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:
// Links
glPushMatrix;
glTranslatef(-30,0,0);
glScalef(1,20,30);
DrawTexturedCube;
glPopMatrix;
// Rechts
glPushMatrix;
glTranslatef(30,0,0);
glScalef(1,20,30);
DrawTexturedCube;
glPopMatrix;
// Vorne
glPushMatrix;
glTranslatef(0,0,-30);
glScalef(30,20,1);
DrawTexturedCube;
glPopMatrix;
// Hinten
glPushMatrix;
glTranslatef(0,0,30);
glScalef(30,20,1);
DrawTexturedCube;
glPopMatrix;
procedure DrawTexturedCube;
begin
glBegin(GL_QUAD_STRIP);
// Vorne links
glTexCoord2f(0,1); glVertex3f(-0.5,0.5,0.5);
glTexCoord2f(0,0); glVertex3f(-0.5,-0.5,0.5);
// Vorne rechts
glTexCoord2f(1,1); glVertex3f(0.5,0.5,0.5);
glTexCoord2f(1,0); glVertex3f(0.5,-0.5,0.5);
// Hinten rechts
glTexCoord2f(0,1); glVertex3f(0.5,0.5,-0.5);
glTexCoord2f(0,0); glVertex3f(0.5,-0.5,-0.5);
// Hinten links
glTexCoord2f(1,1); glVertex3f(-0.5,0.5,-0.5);
glTexCoord2f(1,0); glVertex3f(-0.5,-0.5,-0.5);
// Vorne links
glTexCoord2f(0,1); glVertex3f(-0.5,0.5,0.5);
glTexCoord2f(0,0); glVertex3f(-0.5,-0.5,0.5);
glEnd;
glBegin(GL_QUADS);
// Oben
glTexCoord2f(0,0); glVertex3f(-0.5,0.5,0.5);
glTexCoord2f(1,0); glVertex3f(0.5,0.5,0.5);
glTexCoord2f(1,1); glVertex3f(0.5,0.5,-0.5);
glTexCoord2f(0,1); glVertex3f(-0.5,0.5,-0.5);
// Unten
glTexCoord2f(0,1); glVertex3f(-0.5,-0.5,0.5);
glTexCoord2f(0,0); glVertex3f(-0.5,-0.5,-0.5);
glTexCoord2f(1,0); glVertex3f(0.5,-0.5,-0.5);
glTexCoord2f(1,1); glVertex3f(0.5,-0.5,0.5);
glEnd;
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:
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.
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!
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.
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:
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
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 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
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.