Positionierung von Objekten in OpenGL

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...

Positionierung von Objekten in OpenGL

Beitragvon Hartkern » 2. Jun 2016, 14:08 Positionierung von Objekten in OpenGL

Hallo,

meinen Versuch, eine Tile-Based Map in Canvas zu erstellen hab ich aufgeben und bin dann doch zu OpenGl umgeschwenkt.
Ich hab scheinbar ein Verständnisproblem. Ich versuche Isometrische Tiles in folgender Form anzuordnen

x
x x
x x x
x x
x

also ne riesige Raute...meine erste Linie versuche ich gerade per Hand zu zusammenzuschustern, jedoch müsste eigentlich immer eine Art Versatz dazu kommen, jedoch hab ich entweder nen Knick in der Optik oder die Teile liegen tatsächlich versetzt nebeneinander obwohl ich der Meinung war, sie müssten quasi gestapelt liegen

Code: Alles auswählen
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  glClearColor(0.0, 0.0, 0.0, 0.0);
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glEnable(GL_DEPTH_TEST);
 
  glMatrixMode(GL_Projection);
  glViewport(0,0,ClientWidth,ClientHeight);
  glLoadIdentity();
  glTranslatef(StartX,Zoom,0.0);
  DrawMap(0.0,0.0,0.0);
  DrawMap(-0.25,-0.25,-0.01);
  DrawMap(-0.30,-0.30,-0.02);   // warum, haben die gleiche Koordinaten, liegen aber versetzt nebeneinander!!!!!
  DrawMap(-0.30,-0.30,-0.03);
  DrawMap(-0.30,-0.30,-0.04);
  OpenGLControl1.SwapBuffers;
end;
 
procedure TForm1.DrawMap(x,y,z : real);
begin
  // --- Textur Aktivieren
  glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_2D, textureID0);
  glTranslatef(x,y,z);
  glBegin(GL_QUADS);
  glTexCoord2f(0.0, 0.0);
  glVertex3f(-0.3, -0.3, 0);
  glTexCoord2f(1.0, 0.0);
  glVertex3f(-0.3, 0.3, 0);
  glTexCoord2f(1.0, 1.0);
  glVertex3f(0.3, 0.3, 0);
  glTexCoord2f(0.0, 1.0);
  glVertex3f(0.3, -0.3, 0);
  glEnd();
end;           
Hartkern
 
Beiträge: 68
Registriert: 5. Dez 2015, 20:03
Wohnort: Leipzig
OS, Lazarus, FPC: Win10 IDE 1.6 | 
CPU-Target: 64Bit
Nach oben

Beitragvon Mathias » 2. Jun 2016, 17:09 Re: Positionierung von Objekten in OpenGL

// warum, haben die gleiche Koordinaten, liegen aber versetzt nebeneinander!!!!!

Da addierst die Koordinaten fortlaufend.

Code: Alles auswählen
  DrawMap(0.0,0.0,0.0)//  x=0, y=0, z=0
  DrawMap(-0.25,-0.25,-0.01)// x=-0.25, y-0.25, z-0.01
  DrawMap(-0.30,-0.30,-0.02)// x=-0.55, y-0.55. z-0.03
  DrawMap(-0.30,-0.30,-0.03)// x=-0.85, y-0.85, z-0.06
  DrawMap(-0.30,-0.30,-0.04)// usw.


Hast du dies gemeint, oder verstehe ich dich falsch ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3993
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 2. Jun 2016, 17:58 Re: Positionierung von Objekten in OpenGL

Du musst in DrawMap anfangs die Modelview-Matrix speichern (glPushMatrix) und am Ende wieder restaurieren (glPopMatrix); zuvor die ModelView-Matrix auswählen (glMatrixMode(GL_MODELVIEW)). Auf diese Weise bleibt das in DrawMap vorgenommene glTranslate ohne Auswirkung auf das Gesamt-Modell.

Code: Alles auswählen
procedure TForm1.DrawMap(x,y,z : real);
begin
  // aktuelle ModelView-Matrix sichern
  glMatrixMode(GL_MODELVIEW);
  glPushMatrix;
  // --- Textur Aktivieren
  glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_2D, textureID0);
  glTranslatef(x,y,z);
  glBegin(GL_QUADS);
    glTexCoord2f(0.0, 0.0); glVertex3f(-0.3, -0.3, 0);
    glTexCoord2f(1.0, 0.0); glVertex3f(-0.3, 0.3, 0);
    glTexCoord2f(1.0, 1.0); glVertex3f(0.3, 0.3, 0);
    glTexCoord2f(0.0, 1.0); glVertex3f(0.3, -0.3, 0);
  glEnd();
  // Modelview-Matrix wiederherstellen
  glPopMatrix;
end;
wp_xyz
 
Beiträge: 2533
Registriert: 8. Apr 2011, 08:01

Beitragvon Hartkern » 3. Jun 2016, 12:22 Re: Positionierung von Objekten in OpenGL

Danke...habs heute Nacht schon hinbekommen :), jedoch läuft es auch ohne das ich in der Procedure Draw glMatrixMode(GL_MODELVIEW); verwende :?: und lediglich nur Push und Pop.

Edit: doch ich brauchte es dann doch :)
Hartkern
 
Beiträge: 68
Registriert: 5. Dez 2015, 20:03
Wohnort: Leipzig
OS, Lazarus, FPC: Win10 IDE 1.6 | 
CPU-Target: 64Bit
Nach oben

Beitragvon Mathias » 3. Jun 2016, 16:48 Re: Positionierung von Objekten in OpenGL

jedoch läuft es auch ohne das ich in der Procedure Draw glMatrixMode(GL_MODELVIEW); verwende

Bei diesem einfachen Code fällt dies nicht ins Gewicht, aber wen du mit Perspektiven, Cameras, etc., dann ist es sehr wichtig, welche Matrix aktiv geschalten wird. :wink:
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3993
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Multimedia



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron
porpoises-institution
accuracy-worried