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

Aktuelle Zeit: Mo Jun 17, 2024 03:56

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: glPush/PopMatrix
BeitragVerfasst: Sa Okt 13, 2012 14:54 
Offline
DGL Member

Registriert: So Sep 26, 2010 16:19
Beiträge: 64
Programmiersprache: Pascal
Hallo Leute,
ich möchte gerne mehrer Objekte in einer TList zeichen, habe jetzt aber ein Problem. Das sonst immer funktionierende GlPush- GlPopMatrix funktioniert irgendwie nicht und ich finde den den vorliegenden Renderauszug einfach nicht den Fehler :(
Das Ergebnis habe ich als Bild hochgeladen

Code:
  1.  
  2. procedure TUnEngine.RenderScene;
  3. var i:integer;
  4. begin
  5.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  6.  
  7.   glMatrixMode(GL_PROJECTION);
  8.   glLoadIdentity;
  9.   gluPerspective(45.0,PDisplay.Width/PDisplay.Height,PCamera.View_Near,PCamera.View_Far);
  10.  
  11.   glMatrixMode(GL_MODELVIEW);
  12.   glLoadIdentity;
  13.   //Position
  14.   glTranslatef(PCamera.Position_X,PCamera.Position_Y,PCamera.Position_Z);
  15.   glRotatef(PCamera.Rotation_X,1,0,0);
  16.   glRotatef(PCamera.Rotation_Y,0,1,0);
  17.   glRotatef(PCamera.Rotation_Z,0,0,1);
  18.   glPushMatrix();
  19.  
  20.   //Rendern der Objekte...
  21.   //Quads
  22.   if PListQuads.Count>0 then
  23.   begin
  24.     for i := 0 to PListQuads.Count - 1 do begin
  25.       if TUnQuad(PListQuads[i]^).Textured=True then glEnable(GL_TEXTURE_2D) else glDisable(GL_TEXTURE_2D);
  26.       glTranslatef(TUnQuad(PListQuads[i]^).Position.X,TUnQuad(PListQuads[i]^).Position.Y,TUnQuad(PListQuads[i]^).Position.Z);
  27.       glRotatef(TUnQuad(PListQuads[i]^).Rotation.X,1,0,0);
  28.       glRotatef(TUnQuad(PListQuads[i]^).Rotation.Y,0,1,0);
  29.       glRotatef(TUnQuad(PListQuads[i]^).Rotation.Z,0,0,1);
  30.  
  31.       if TUnQuad(PListQuads[i]^).FrontFace=True then
  32.       begin
  33.         glBegin(GL_QUADS);
  34.         glColor3f(1,1,1);
  35.         if TUnQuad(PListQuads[i]^).Textured=True then glBindTexture(GL_TEXTURE_2D,TUnQuad(PListQuads[i]^).Texture);
  36.         if TUnQuad(PListQuads[i]^).Textured=True then glTexCoord2f(0,0)
  37.           else glColor3f(TUnQuad(PListQuads[i]^).Color.Red,TUnQuad(PListQuads[i]^).Color.Green,TUnQuad(PListQuads[i]^).Color.Blue);
  38.         glVertex3f(0,TUnQuad(PListQuads[i]^).Height,0); //Links|Oben
  39.         if TUnQuad(PListQuads[i]^).Textured=True then glTexCoord2f(0,1);
  40.         glVertex3f(0,0,0); //Links|Unten
  41.         if TUnQuad(PListQuads[i]^).Textured=True then glTexCoord2f(1,1);
  42.         GlVertex3f(TUnQuad(PListQuads[i]^).Width,0,0); //Rechts|Unten
  43.         if TUnQuad(PListQuads[i]^).Textured=True then glTexCoord2f(1,0);
  44.         glVertex3f(TUnQuad(PListQuads[i]^).Width,TUnQuad(PListQuads[i]^).Height,0); //Rechts|Oben
  45.         glEnd;
  46.       end;
  47.       if TUnQuad(PListQuads[i]^).FrontFace=False then
  48.       begin
  49.         glBegin(GL_QUADS);
  50.         glColor3f(1,1,1);
  51.         if TUnQuad(PListQuads[i]^).Textured=True then glBindTexture(GL_TEXTURE_2D,TUnQuad(PListQuads[i]^).Texture);
  52.         if TUnQuad(PListQuads[i]^).Textured=True then glTexCoord2f(0,0)
  53.           else glColor3f(TUnQuad(PListQuads[i]^).Color.Red,TUnQuad(PListQuads[i]^).Color.Green,TUnQuad(PListQuads[i]^).Color.Blue);
  54.         glVertex3f(0,TUnQuad(PListQuads[i]^).Height,0); //Links|Oben
  55.         if TUnQuad(PListQuads[i]^).Textured=True then glTexCoord2f(1,0);
  56.         glVertex3f(TUnQuad(PListQuads[i]^).Width,TUnQuad(PListQuads[i]^).Height,0); //Rechts|Oben
  57.         if TUnQuad(PListQuads[i]^).Textured=True then glTexCoord2f(1,1);
  58.         GlVertex3f(TUnQuad(PListQuads[i]^).Width,0,0); //Rechts|Unten
  59.         if TUnQuad(PListQuads[i]^).Textured=True then glTexCoord2f(0,1);
  60.         glVertex3f(0,0,0); //Links|Unten
  61.         GLEnd;
  62.       end;
  63.       //Bewegen zum "Nullpunk" in der Kamerasicht
  64.       glPopMatrix();
  65.     end;
  66.   end;
  67.  
  68.   SwapBuffers(PDC);
  69. end;
  70.  


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glPush/PopMatrix
BeitragVerfasst: Sa Okt 13, 2012 15:19 
Offline
DGL Member

Registriert: Sa Mär 31, 2012 23:14
Beiträge: 26
Programmiersprache: PASCAL
Das sieht so aus als würdest du glPushMatrix nur einmal (vor der Schleife) aufrufen, aber glPopMatrix in der Schleife.
Das funktioniert nicht, für jedes glPop sollte ein glPush vorangegangen sein. wenn du das glPushMatrix an den Anfang in der Schleife setzt sollte das funktionieren.

_________________
The force, strong it is in OpenGL.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glPush/PopMatrix
BeitragVerfasst: Sa Okt 13, 2012 15:24 
Offline
DGL Member

Registriert: So Sep 26, 2010 16:19
Beiträge: 64
Programmiersprache: Pascal
Vielen Dank :)
Jetzt funktioniert es. Ich wäre da bestimmt nicht drauf gekommen, dass man für jedes Pop ein Push braucht. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glPush/PopMatrix
BeitragVerfasst: Sa Okt 13, 2012 17:32 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
Em, hast Du schonmal was von temp Variablen gehört? Falls nicht, könntest Du Dir darunter vielleicht etwas vorstellen?

Das bisschen Quellcode da, ist grauenhaft.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glPush/PopMatrix
BeitragVerfasst: Sa Okt 13, 2012 19:28 
Offline
DGL Member

Registriert: So Sep 26, 2010 16:19
Beiträge: 64
Programmiersprache: Pascal
Meinst du dass, weil ich so oft TUnQuad(PListQuads[i]^) benutze?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glPush/PopMatrix
BeitragVerfasst: Sa Okt 13, 2012 19:39 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
Japp, andere Dinge in deinem Code sind auch nicht ganz koscher :)


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 45 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.109s | 19 Queries | GZIP : On ]