AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Ziel:eine Landschaft mit OpenGL, Ich erzeuge: Streifen
Thema durchsuchen
Ansicht
Themen-Optionen

Ziel:eine Landschaft mit OpenGL, Ich erzeuge: Streifen

Ein Thema von Flippo · begonnen am 24. Jul 2007 · letzter Beitrag vom 25. Jul 2007
 
Flippo

Registriert seit: 26. Sep 2004
111 Beiträge
 
Delphi 2005 Personal
 
#1

Ziel:eine Landschaft mit OpenGL, Ich erzeuge: Streifen

  Alt 24. Jul 2007, 21:10
Hallo,
ich hoffe der Titel war einigermaßen Aussagekräftig.
Also, ich probiere gerade OpenGl anhand der Tutorials von DGL-Wiki bedienen zu lernen.

Jezt versuche ich gerade eine Landschaft zu erzeugen, indem ich mehrere schräge Quads aneinander setze. Ich mache das so:
1. Ich generiere 11*11 zufällige Y-Werte/Höhenwerte und speichere diese in einem Memo
2. Jeder dieser Punkte ist ein Eckpunkt eines Quads, die aneinander liegenden Quads haben natürlich gemeinsame Eckpunkte
Die Theorie habe ich aus dem Tutorial, die sollte also stimmen

Mein Code erzeugt aber nur Streifen(Siehe Bild im Anhang),die Quads in X-Richtung liegen aneinander, wie es sein soll, aber die Quads in Z-Richtung nicht. Sie haben komischerweise andere Höhenwerte.(Ich habe mir die Y-Werte beim Erstellen der Quads auch schon(mit Showmessage) anzeigen lassen und das "aufgemalt", da waren die Werte eigentlich alle Richtig)
Daher vermute ich, dass mein Quelltext einen Fehler hat auf den ich auch nach mehreren Stunden Suche nicht gekommen bin oder das ich einen Denkfehler drin habe.
Ich hoffe ihr könnt mir helfen:

Delphi-Quellcode:
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
DC:=GetDC(panel1.Handle);
if not InitOpenGL then showmessage('Init OpenGL fehlgeschlagen!');
RC:=CreateRenderingContext(DC,[opDoubleBuffered],32,24,0,0,0,0);
ActivateRenderingContext(DC, RC);
glClearColor(0, 0, 0, 0);
glEnable(GL_DEPTH_TEST);
fTexture := TglBitmap2D.Create('myTex\floor.JPG'); // Instanz erstellen und Datei laden
fTexture.GenTexture; // geladene Textur an OpenGL übergeben
end;

procedure TForm1.Render; //Hier wird wohl der Fehler liegen....
var x,z:integer;
    u,v:real;
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(45.0, ClientWidth/ClientHeight,NEAR_CLIPPING,FAR_CLIPPING);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
glTranslatef(-COUNT_X/2, -3, -14);
glRotatef(45,1,0,0);
fTexture.Bind;
U:=1/COUNT_X; V:=1/COUNT_Z;
{Hier werden Reihe für Reihe die Quads erstellt.
Bei den nebeneinander liegenden Quads klappt es mit gemeinsamen Eckpunkten,
bei den "hintereinander" liegenden (Z-Richtung) klappt es nicht.
}

for z:=0 to COUNT_Z-1 do
begin
   glPushMatrix;
   for x:=0 to COUNT_X-1 do
   begin
      glBegin(GL_QUADS);
         glTexCoord2f(U*x,V*(z+1));
         glVertex3f(0, GetTheFuckingY(x,z) ,0); //1 "vorne Links"
         glTexCoord2f(U*x,V*z);
         glVertex3f(0, GetTheFuckingY(x,z+1) ,1); //2 "hinten Links"
         glTexCoord2f(U*(x+1),V*z);
         glVertex3f(1, GetTheFuckingY(x+1,z+1) ,1);//3 "hinten Rechts"
         glTexCoord2f(U*(x+1),V*(z+1));
         glVertex3f(1, GetTheFuckingY(x+1,z) ,0); //4 "vorne Rechts"
      glEnd;
      glTranslatef(1,0,0);
      {SwapBuffers(DC);Ich kann leider nicht sehen wie der Fehler entsteht :-D
      sleep(1000); }

   end;
   glPopMatrix;
   glTranslatef(0,0,-1);
end;
SwapBuffers(DC);
end;

function TForm1.GetTheFuckingY(x,z:integer):real;
//Gibt aus dem Memo namens L aus der Zeile z den x'ten Wert zurück
// (gibt die richtigen Werte zurück)
var s:string;
    i,j:integer;
begin
s:=L.Lines[z];
i:=pos('!'+inttostr(x),s); while (s[i]<>'-') do i:=i+1; i:=i+1;
j:=i; while s[j]<>';do j:=j+1; j:=j-i;
result:=strtofloat(copy(s,i,j))/1000; //(durch 1000 damit die Größe passt)
end;

procedure TForm1.Button3Click(Sender: TObject);
//11*11 Punkte erzeugen
var x,z:integer;
begin
L.Clear;
Randomize;
for z:=0 to COUNT_Z do
begin
   L.lines.add('');
   for x:=0 to COUNT_X do L.Lines[z]:=L.Lines[z]+'!'+inttostr(x)+'-'+inttostr(Random(LIM))+';';
end;
end;
Angehängte Grafiken
Dateityp: jpg glfehler_111.jpg (25,5 KB, 56x aufgerufen)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz