ich habe ein kleines Problem bei der Darstellung von transparenten Cubes.
Diser "Fehler" tritt bei einer best. Ansicht der rot. Würfel auf (siehe Anhang).
Die Würfel werden wiefolgt dargestellt:
Code:
procedure MyRenderProc;stdcall;
var
x,y,z:integer;
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
Stimmt doch alles. Wenn du den Würfel betrachtest, sind bei einer bestimmten Drehung die Würfel durchsichtig.
Du musst beachten, dass die Würfel im Hintergrund schon gezeichnet sind bevor die davor gezeichnet werden.
Transparenz bedeutet nur, dass beim Zeitpunkt der Erstellung die Farbe mit dem aktuellen Hintergrund verrechnet wird.
Wenn du also erst die vorderen Würfel zeichnest, ist der Hintergrund Schwarz. Die danach gezeichneten Würfel werden für die Transparenz ignoriert.
Blending und der Tiefentest wollen nicht so richtig zusammenarbeiten. Schalte also den Tiefentest aus - allerdings musst du jetzt die Reihenfolge, in der die Quader gerendert werden, selber bestimmen. Da kenne ich mich nicht so aus, du könntest es aber mit der 3D-Variante des Satzes des Pythagoras versuchen.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Alternativ (eine Methode, die ich gerne benutze) lässt du den Tiefentest an, das Blending auch, aber machst das Backfaceculling aus. Dann stellst du sicher, dass dein würfel von allen seiten richtig funktioniert.
Wenn du dann noch die Backfaces wieder haben willst, musst du nur deinen Zeichencode duplizieren und die Reihenfolge der Quads und der Vertices innerhalb der Quads umdrehen. Danach solltest du einen Würfel haben, wie du ihn willst.
Ist leider nicht bei jedem Mesh so einfach zu machen, aber hier tuts seinen dienst.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Also durch das abschalten des Backfaceculling ist eine leichte Verbesserung aufgetreten.
Leider Ist der Rest aber noch nicht so doll. Auch das hinzufügen eines "Hintergrundlichtes" brachte nix.
Das zeichnen der einzelnen Würfel von hinten nach vorn ist mir zu aufwendig.
Den Vorschlag von Lord Horazont muss ich noch ausprobieren.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Um das sortieren beim Zeichnen von mehreren Transparenten Objekten kommst du nicht drumrum. Punkt. Ob dus mit oder ohne Tiefentest machst, ist dabei egal. Wenn dus ohne machst, musst du auch sortieren, sonst sieht das reichlich komisch aus, und mit auch. Die einzige (!) ausnahme ist Additives Blending (also glBlend(GL_ONE, GL_ONE); ). Da kannst du alle Objekte mit diesem Transparenzmodus zum schluss zeichnen, mit glDepthMask(False);.
Um anständig zu sortieren, würde ich die Objekte irgendwie Kapseln, sodass ich die Bounding Boxes habe und nach denen dann sortieren kann. Das geht entweder mit Satz des Pythagoras für 3d (Wurzel aus (x^2 + y^2 + z^2)) oder indem du dir die Modelview-Matrix rausziehst (glGetFloatv) und die auf die Koordinaten anwendest. Dann hast du in dem Z-Feld des Vektors entsprechend die Tiefe, nach der OpenGL auch prüft. Ich würde hier die zweite methode favorisieren. Und dann halt einfach sortieren und in der reihenfolge zeichnen. Das sortieren musst du auch nicht jeden Frame sondern immer nur, wenn sich position oder drehung der Kamera verändern.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
@tP: Wenn deine Objekte komplizierter werden, musst du sogar noch weiter gehen, und die Einzelteile deines Objekts nach Tiefe sortieren. Glücklicherweise ist das nicht ganz vergeben, denn es gibt z.B. Sachen wie
Zitat:
LOD
die auch Tiefenabhängig sind, und wo du die Tiefeninfos wiederverwenden kannst.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: 0 Mitglieder und 2 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.