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

Aktuelle Zeit: Mi Jul 16, 2025 11:49

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Apr 30, 2008 19:54 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 15:18
Beiträge: 62
Wieso werden Objekte dargestellt, die eigentlich verdeckt sein sollten?

Lösung: Der Tiefenpuffer muss aktiviert sein.


Hallo DelphiGL,

es erstaunt mich, dass ich erst jetzt meine erste Frage stellen muss. Ich muss sagen, das Forum hier ist eine schöne Bibliothek von Lösungen zu Anfängerproblemen. Mithilfe der Tutorials bin ich jetzt soweit gekommen, dass ich meinen ersten Raum erstellen will. Bewegung klappt schon.

Also: Ich erstelle einen Raum, in dem ich mich bewegen kann. Der "Raum" hat bis jetzt nur vier Wände - aber das reicht schon. Das Dach und der Boden sind also noch offen.

Vielleicht erst mal ein bisschen Source...

Code:
  1. // Links
  2.   glPushMatrix;
  3.     glTranslatef(-30, 0, 0);
  4.     glScalef(1, 20, 30);
  5.     DrawTexturedCube;
  6.   glPopMatrix;
  7.  
  8.   // Rechts
  9.   glPushMatrix;
  10.     glTranslatef(30, 0, 0);
  11.     glScalef(1, 20, 30);
  12.     DrawTexturedCube;
  13.   glPopMatrix;
  14.  
  15.   // Vorne
  16.   glPushMatrix;
  17.     glTranslatef(0, 0, -30);
  18.     glScalef(30, 20, 1);
  19.     DrawTexturedCube;
  20.   glPopMatrix;      
  21.  
  22.   // Hinten
  23.   glPushMatrix;
  24.     glTranslatef(0, 0, 30);
  25.     glScalef(30, 20, 1);
  26.     DrawTexturedCube;
  27.   glPopMatrix;
  28.  
  29. procedure DrawTexturedCube;
  30. begin
  31.   glBegin(GL_QUAD_STRIP);
  32.     // Vorne links
  33.     glTexCoord2f(0,1); glVertex3f(-0.5,  0.5,  0.5);
  34.     glTexCoord2f(0,0); glVertex3f(-0.5, -0.5,  0.5);
  35.  
  36.     // Vorne rechts
  37.     glTexCoord2f(1,1); glVertex3f( 0.5,  0.5,  0.5);
  38.     glTexCoord2f(1,0); glVertex3f( 0.5, -0.5,  0.5);
  39.  
  40.     // Hinten rechts
  41.     glTexCoord2f(0,1); glVertex3f( 0.5,  0.5, -0.5);
  42.     glTexCoord2f(0,0); glVertex3f( 0.5, -0.5, -0.5);
  43.  
  44.     // Hinten links
  45.     glTexCoord2f(1,1); glVertex3f(-0.5,  0.5, -0.5);
  46.     glTexCoord2f(1,0); glVertex3f(-0.5, -0.5, -0.5);
  47.  
  48.     // Vorne links
  49.     glTexCoord2f(0,1); glVertex3f(-0.5,  0.5,  0.5);
  50.     glTexCoord2f(0,0); glVertex3f(-0.5, -0.5,  0.5);
  51.   glEnd;
  52.  
  53.   glBegin(GL_QUADS);
  54.     // Oben
  55.     glTexCoord2f(0,0); glVertex3f(-0.5,  0.5,  0.5);
  56.     glTexCoord2f(1,0); glVertex3f( 0.5,  0.5,  0.5);
  57.     glTexCoord2f(1,1); glVertex3f( 0.5,  0.5, -0.5);
  58.     glTexCoord2f(0,1); glVertex3f(-0.5,  0.5, -0.5);
  59.    
  60.     // Unten
  61.     glTexCoord2f(0,1); glVertex3f(-0.5, -0.5,  0.5);
  62.     glTexCoord2f(0,0); glVertex3f(-0.5, -0.5, -0.5);
  63.     glTexCoord2f(1,0); glVertex3f( 0.5, -0.5, -0.5);
  64.     glTexCoord2f(1,1); glVertex3f( 0.5, -0.5,  0.5);
  65.   glEnd;
  66. end;

So rendere ich meine vier Wände. Die Prozedur DrawTexturedCube tut schon, aber für Verbesserungsvorschläge in Sachen Geschwindigkeit etc. wäre ich offen.

Das eigentliche Problem liegt darin, dass die Wände eben in der Reihenfolge dargestellt werden, in der ich sie zeichne. Das sieht nicht besonders schön aus, wenn ich dann hinter der ersten Wand stehe:

Bild

Genau genommen tritt das Problem natürlich immer auf, wenn etwas, das weiter weg ist, am Schluss gezeichnet wird. Aber es kann doch nicht sein, dass ich jedes Mal auf die aktuelle Position prüfen muss, und daraus dann auf die Erstellungsreihenfolge schließen muss? Das kann doch bei größeren Projekten mit z.B. Akteuren oder aufwändigen Modellierungen sehr lange dauern. :roll:

Edit: Mir ist gerade aufgefallen, dass außerhalb des Raumes die Geschwindigkeit von 60FPS auf 30FPS sinkt. Das kommt mir verdammt bekannt vor von Genesis 3D, welches außerhalb von Räumen zwar keine Zeichenfehler hatte, aber auch langsamer wurde.

Ich hoffe, dass einer Zeit findet, mir weiterzuhelfen. Danke schonmal dafür! :D

Die Abstände zwischen den Wänden sind zwar keine Absicht, aber in einer neueren Version ist der Fehler behoben. Ich möchte hier jedoch bei dieser Version bleiben, weil die sehr viel einfacher ist.

Viel Grüße,
Yogu

Kompletter Quelltext des Projekts


Zuletzt geändert von Yogu am Mi Apr 30, 2008 21:15, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 30, 2008 21:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Mär 09, 2005 15:54
Beiträge: 372
Wohnort: München
Programmiersprache: Delphi, C#, FPC
Kann es sein, dass du den Tiefenpuffer nicht verwendest? (kann den Quelltext nicht runderladen, HTTP 404 - Fehler) Setzt mal nach dem Initialisieren oder vor dem Rendern diese Zeile ein:
Code:
  1. glEnable(GL_DEPTH_TEST);

_________________
Aktuelles Projekt: Gael - Development Blog
Website: LightBlackSoft.com


Zuletzt geändert von littleDave am Mi Apr 30, 2008 21:21, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 30, 2008 21:10 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 15:18
Beiträge: 62
Hey! Ganz großes Danke!! :D

Als ich das Quitstart-Tutorial machte, hab ich diesen Tiefentest erst mal weggelassen, weil ich dachte, das wäre ein Optimierer (dass bestimmte Objekte nicht gezeichnet, weil sie eh nicht sichtbar sind oder so ähnlich). Ich wäre nie auf die Idee gekommen, dass das ist :)

Danke nochmal :D

Grüße,
Yogu


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 01, 2008 10:50 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Hmm, letzendlich ist es doch eine art optimierung, die Objekte nicht zeichnet, die eigentlich nicht gezeichnet werden sollen.

Der Tiefentest prüft ja, ob das Quad abhängig von den bereits gezeichneten Quads eigentlich garnicht sichtbar sein drüfte, weil die es verdecken.

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 01, 2008 17:45 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 15:18
Beiträge: 62
Es ist auch eine Optimierung. Aber eine, die besser aktiviert ist. Es wird ja nicht nur die Permanence optimiert, sondern auch die Grafik.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.011s | 15 Queries | GZIP : On ]