Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Aug 09, 2025 17:32

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Jeden zweiten Pixel zeichnen?
BeitragVerfasst: Fr Dez 30, 2005 15:39 
Hallo,

ich beschäftige mich nun schon etwas mit ATIs Rendermonkey 1.6. Wir sollen fürs Studium einen Shader programmieren. Ich dachte mir es wäre einfach aus einem normal dargestellten 3D-Objekt (mit Normalen usw) eine Art Punktwolke zu machen, indem ich nur jedes zweite Pixel zeichne und den Rest per DISCARD weglasse. So nun scheint es ja doch nicht so ganz einfach zu sein, weil ich ja irgendwie nicht so richtig rausbekomme welches jetzt nun das zweite oder erste oder sonstwas für ein Pixel ist, vorallem weil der das ja parallel abarbeitet im Fragment-Teil. Habe mir also jetzt eine Textur gebastelt, die schwarz-weiß aussieht, wie ein Schachbrett, damit kann ich zumindest schonmal die Schwarzen Teile discarden und die weißen erhalten. Aber das Ergebnis ist nicht ganz so wie gewünscht, denn die Texturen werden ja auch verzerrt und so bleiben nicht einzelne Pixel übrig, sondern ganze Flächen, bzw. ganze Flächen werden ausgelassen. Nun zu meinen Fragen:

Hat jemand eine Idee, wie ich ähnlich einem Schachbrett einfach jedes zweite Pixel zeichne und die Zwischenräume verwerfe (sodass man den Hintergrund durchsieht)?

Wie kann man einstellen das die Faces auch von hinten gezeichnet werden (also beleuchtet werden) und nicht nur von einer Seite?

Danke im Voraus

Cracker

PS: VGA: Radeon 9700 Pro


Nach oben
  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 16:09 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
Das is so ne Sache mit dem "jedes zweite Pixel weglassen". Wenn du das auf den Bildschirm beziehst, dann werden die Löcher auf der Vorderseite des Objektes genau an der gleichen stelle sein, wie die Löcher auf der Rückseite - und cih denke mal du willst, dass man die Rückseite sehen kann. Ausserdem wirds nciht wie eine Punktwolke aussehen, weil wenn du das Teil drehst, sollten sich die Punkte der Punktwolke ja mitdrehen, das tun sie nur nicht, wenn sie an die Pixel des Bildschirms gebunden sind.
Ich würde es also trotzdem mit ner Textur machen, allerdings mit ner gekachelten 3D-Textur. Dann haste keine Verzerrungen, und die "Punkte" drehen sich mit.

_________________
[18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay

hi, i'm a signature viruz, plz set me as your signature and help me spread :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 16:24 
Danke AL für Deine schnelle Hilfe.

Hmm, also das mit der 3D-Textur mußt du mir nochmal genauer erklären, ich habe zwar schon gelesen das es das gibt, aber wie kann mir das weiterhelfen? Ich zeig mal kurz ein Bild wie es jetzt essieht, mit ner ganz normalen Kachel-Textur:

Bild

Was mir daran noch nicht gefällt...

1. Die "Pixel" sind zu groß --> gut dann muss ich die Textur nochmal bearbeiten
2. Die "Pixel" werden verzerrt, wenn ein Objekt sich starkt krümmt oder so
3. Die Faces werden auf der Rückseite nicht gezeichnet, man sieht also die Innenseite der Kanne nicht durch die Lücken auf der Vorderseite


Nach oben
  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 16:41 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
Wenn du backface culling ausmachst, solltest du schonmal die rückseite sehen können.

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 16:50 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
OK, also das die Rückseite nicht gezeichnet wird is ein anders Prob. [Edit das bezog sich jetzt nicht auf luketheduke, ich war nur zu langsam beim posten]

Aber ne 3D Textur könnte dir gegen diese Verzerrung helfen.

Bei einer 2D-Textur läuft das doch folgendermaßen ab: Du hast ein 2D Array mit Farbwerten und zu jedem Vertex eine 2D Texcoordinate. Innerhalb des Polygons wird dann zwischen den Texcoords interpoliert, und mit der entstandenen Koordinate in deinem 2D Farbarray (=Textur) nachgeschaut, welche Farbe dieses Fragment nun bekommen soll. Bei 3D-Texturen läufts genauso, nur dass du ein 3D Array mit Farbwerten hast, und die Texcoordinaten 3 Komponenten haben. Der Vorteil ist, du musst nicht irgendwie die räumliche Oberfläche eines Objektes in eine ebene Fläche zwängen, was zwangsweise irgendwo in Verzerrungen endet. Du kannst ganz einfach die Koordinaten der Vertices als Texturkoordinaten nehmen. Keine Verzerrung. Einziges Problem ist, dass 3D-Texturen sehr groß werden. Eine 16x16 2D-Textur hat 256 Pixel, eine 16x16x16 3D-Textur hat bereits 4096 Pixel. Darum war die Idee, ähnlich wie dus wahrscheinlich auch schon mit der 2D Textur gemacht hast, die 3D Texture auf 2x2x2 Pixel zu beschränken, in die du so eine art 3D-Schachbrettmuster baust. Wenn du die dann kachelst, dann müsste das gehen. Evtl musst du noch ein Vertexprog schreiben, dass die Vertexkoordinaten in die Texturkoordinaten steckt, am besten noch mit nem Faktor, mit dem du die Größe der Punkte regeln kannst.


[Edit] Oh, und vllt hilft dir das weiter: http://wiki.delphigl.com/index.php/glTexImage

_________________
[18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay

hi, i'm a signature viruz, plz set me as your signature and help me spread :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 18:48 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Das Problem der Größe deiner Vierecke mit deiner gekachelten Textur könnte man ganz einfach lösen, indem du die Textur nicht nur einmal auf die Teekanne zeichnest, sondern ein paar mal, du also einfach die Texturkoordinaten anpasst.

Also für ein einfaches Viereck hast du zum Beispiel folgenden Code:
Code:
  1.  
  2. glTexCoord2f(0, 0);
  3.  glVertex3f(0, 0, 0);
  4. glTexCoord2f(1, 0);
  5.  glVertex3f(1, 0, 0);
  6. glTexCoord2f(1, 1);
  7.  glVertex3f(1, 1, 0);
  8. glTexCoord2f(0, 1);
  9.  glVertex3f(0, 1, 0);
  10.  


Wenn du nun die Textur einfach ein paar mal drauflegst, dann so:
Code:
  1.  
  2. glTexCoord2f(0, 0);
  3.  glVertex3f(0, 0, 0);
  4. glTexCoord2f(10, 0);
  5.  glVertex3f(1, 0, 0);
  6. glTexCoord2f(10, 10);
  7.  glVertex3f(1, 1, 0);
  8. glTexCoord2f(0, 10);
  9.  glVertex3f(0, 1, 0);
  10.  


Wenn du das bei der Teekanne machst und ein bisschen mit den Texturgrößen spielst, könntest du den Eindruck schaffen, dass es sich um eine Pixelwolke handelt.

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 19:30 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Ich würde eine 2. Kanne mit einer anderen Textur (ohne Muster) malen, die aber genau in die andere Richtung gezeichnete Polygone zulässt.
Ansich würde sich so teilweise Polygone überlagern, aber in der Theorie müsst einer immer "wegfallen"... :D

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 20:42 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
Ich dachte ich poste mal wie das aussehen würde, was ich mit der 3D-Textur meinte.

Ich habs übrigends ohne Shader geschafft, aber das musst du ja nicht deinem Prof erzählen ^^

[Edit] hmm, als Gast kannst du die hochgeladenen Sachen gar nicht sehen, oder?


Dateianhänge:
Punktwolke.JPG
Punktwolke.JPG [ 51.03 KiB | 7105-mal betrachtet ]

_________________
[18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay

hi, i'm a signature viruz, plz set me as your signature and help me spread :)
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 31, 2005 14:05 
So erstmal vielen Dank für Eure Mühe, ich gucke mir jetzt all Eure Ratschläge mal an, melde mich dann in Kürze zurück.


Nach oben
  
Mit Zitat antworten  
 Betreff des Beitrags: Backface Culling
BeitragVerfasst: Sa Dez 31, 2005 17:02 
Offline
DGL Member

Registriert: Sa Dez 31, 2005 14:11
Beiträge: 5
Also das mit dem Backface Culling ist in der Tat ne gute Idee. Nur finde ich in dem blöden Rendermonkey keinen Schalter dafür. Ich weiß ich weiß, man kann Shader auch in Delphi oder in C++ einbinden, da haben wir auch schon gemacht, aber in diesem Fach geht es halt nur um die Shader und das ganze eben in Rendermonkey oder einem anderen Shader-Editor. Gibts da irgendwo ne Option die ich noch nicht gefunden habe, oder kann ich da irgendein Schlüsselwort direkt ins Vertex- oder Fragmentprogramm schreiben?

Über 3D Texturen habe ich jetzt auch schon ein bischen gelesen, aber mir ist noch nicht ganz klar, wie ich eine solche Textur erstelle und innerhalb des Shaders einbinde. Ich meine das gibts im Rendermonkey zwar als Option, da ne 3D-Textur reinzumachen und mit ner 2D gehts ja auch, irgendwie fehlt mir da noch was zum Verständnis.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 31, 2005 17:41 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
Ich kenne Rendermonkey nicht, aber ich denke mal, dass man die Texturen, egal ob 2D oder 3D irgendwie aus Dateien laden kann. Die 2D Texturen dann aus einfachen Bildern wie JPG oder TGA und die 3D Texturen dann halt aus mehreren. Die Sache mit den Texturkoordinaten musst du dann im Vertexshader machen so mit nem

OPTION ARB_position_invariant;

ATTRIB VertIn = vertex.position;
OUTPUT Tex0Out = result.texcoord[0];

und nem

MOV Tex0Out, VertIn;

oder noch besser

PARAM Fac = program.local[0];
#...
MUL Tex0Out, VertIn, Fac;

Aber da weiß ich nicht, ob man die bei Rendermonkey so reinreichen kann. Das wäre halt nur der Code für die guten alten ARB_VERTEX_PROGRAMS...

_________________
[18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay

hi, i'm a signature viruz, plz set me as your signature and help me spread :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 01, 2006 00:48 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
Backface culling ausschalten sollte man im hauptprogramm machen... irgendwas wie gldisable(GL_BACKFACE_CULL); oder so...

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 01, 2006 19:39 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Cracker hat ja gesagt, dass er mit Rendermonkey arbeitet, da gibts sowas wie ein Hauptprogramm gar ned

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 01, 2006 19:49 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Man wählt den gewünschten Renderpass aus der Liste aus und wählt dann im Kontextmenü "Add Render State". Dann gibt es da ein neues Render-State Objekt (maximal eins pro Pass) und wenn man doppelt darauf klickt öffnet sich eine Liste in der man alle OpenGL Variablen eintragen kann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 02, 2006 19:23 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
Aha.... damit kenn ich mich natürlich nicht aus. ;üsste man mal sehen, ob der überhaupt Backface Culling standardmäßig anhat und wie man auschalten kann.

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 16 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.011s | 18 Queries | GZIP : On ]