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

Aktuelle Zeit: Fr Jul 18, 2025 06:33

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Tutorial Lektion 4 Terramapping
BeitragVerfasst: Mo Jan 16, 2012 15:22 
Offline
DGL Member

Registriert: So Jan 15, 2012 23:14
Beiträge: 10
Wohnort: Köln
Programmiersprache: Java
Hey, ich lese mir grad die Tutorials durch und hab echt Probleme mit dem Code zum Terramapping

http://wiki.delphigl.com/index.php/Tutorial_Lektion_4

Der einzige Code der im Wiki steht ist

Code:
  1. U:=1 / XCount;
  2. V:=1 / YCount;
  3.  
  4. for y:=0 to YCount-1 do
  5. begin
  6.   glPushMatrix;
  7.   for x:=0 to XCount-1 do
  8.   begin
  9.     glBegin(GL_QUADS);
  10.       glTexCoord2f(U*x,     V*(y+1));
  11.       glVertex3f(0,  Map[x,y+1],  0);
  12.       glTexCoord2f(U*x,     V*y);    
  13.       glVertex3f(0,  Map[x,y],  1);
  14.       glTexCoord2f(U*(x+1), V*y);    
  15.       glVertex3f(1,  Map[x+1,y],  1);
  16.       glTexCoord2f(U*(x+1), V*(y+1));  
  17.       glVertex3f(1, Map[x+1,y+1],  0);
  18.     glEnd;
  19.     glTranslatef(1,0,0);
  20.   end;
  21.   glPopMatrix;
  22.   glTranslatef(0,0,-1);
  23. end;


Das eigentliche Problem ist aber, dass ich echt Kopfschmerzen beim Delphi lesen bekommen xD
Da im Wiki leider nirgens das Array Map auftaucht musst ich mal in der .dpr schauen
Dann hab ich probiert das irgendwie nach zu basteln, aber irgendwie check ich die Delphi Syntax nicht.


Code:
  1.   MAP : array[0..WIDTH+1,0..HEIGHT+1] of single;
  2.   Map[x,y]:=0.01*Random(50);
  3. map[x,y+1]


usw..

In Java siehts dann bei mir so aus:
Code:
  1.        
  2.         int xcount = 10;
  3.         int ycount = 10;
  4.        
  5.         float U = 1 / xcount;
  6.         float V = 1 / ycount;  
  7.        
  8.         float z = 0;
  9.        
  10.         float[][] Map = new float[ xcount][ycount];
  11.         Random rand = new Random();
  12.        
  13.         for(y = 0; y < ycount; y++){
  14.             for(x = 0; x < xcount; x++){
  15.                 Map[(int) x][(int) y] = (float) (rand.nextInt(50) * 0.01);
  16.             }
  17.         }
  18.  
  19.  
  20.         while(!Display.isCloseRequested()){
  21.            
  22.  
  23.             glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clearscreen
  24.            
  25.             z -= 0.01f;
  26.  
  27.               glLoadIdentity();
  28.               gluLookAt(0,2,5,
  29.                         0,0,0,
  30.                         0,1,0);
  31.               glPushMatrix();
  32.               glTranslatef(z,0,0);
  33.            
  34.             for(y = 0; y < ycount; y++){
  35.                 glPushMatrix();
  36.                 for(x = 0; x < xcount; x++){
  37.                     glBegin(GL_QUADS);
  38.                       glTexCoord2f(U*x,     V*(y+1));
  39.                       glVertex3f(0,  Map[(int) x][(int) (y+1)],  0);
  40.                       glTexCoord2f(U*x,     V*y);    
  41.                       glVertex3f(0,  Map[(int) x][(int) y],  1);
  42.                       glTexCoord2f(U*(x+1), V*y);    
  43.                       glVertex3f(1,  Map[(int) (x+1)][(int) y],  1);
  44.                       glTexCoord2f(U*(x+1), V*(y+1));  
  45.                       glVertex3f(1, Map[(int) (x+1)][(int) (y+1)],  0);
  46.                     glEnd();
  47.                     glTranslatef(1,0,0);
  48.                 }
  49.                 glPopMatrix();
  50.                 glTranslatef(0,0,-1);
  51.             }
  52.            
  53.            
  54.             Display.update();
  55.             Display.sync(60);
  56.         }


Ich weis natürlich das
Code:
  1. glVertex3f(1, Map[(int) (x+1)][(int) (y+1)],  0);
Quatsch ist, weils in nem outOfIndex endet, aber das war so meine Idee, weil ich grad echt aufm Schlauch stehe, was das in Delphi zu bedeuten hat.

Grüße

(P.S.: Dann übe ich mal Kritik.
Wenn man im Texturing Tutorial gleich mit Terraforming/mapping beginnt sollte man einem nicht nur so Codebrocken hinwerfen, sondern vllt etwas womit man auch was anfangen kann :/ )


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tutorial Lektion 4 Terramapping
BeitragVerfasst: Mo Jan 16, 2012 16:21 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
In Delphi ist es möglich den Startindex eines Arrays ungleich 0 zu wählen.
Heisst also hier: 2-Dimensionales Array von 0 bis Width+1 und 0 bis Height+1.
Code:
  1. MAP : array[0..WIDTH+1,0..HEIGHT+1] of single;


Ich habe mal etwas dran rumgefummelt:
So sollte es eigentlich gehen. Wobei ich die meiner Meinung nach überflüssigen Matrix-Operationen weglassen würde. Also dieses glTranslate in jedem Schleifendurchlauf. Da würde ich die Position für glVertex absolut berechnen.
Die geänderten Stellen sind Fett.

Code:
  1.        
  2.         int x, y;
  3.  
  4.         int xcount = 10;
  5.         int ycount = 10;
  6.        
  7.         float U = 1 / xcount;
  8.         float V = 1 / ycount;  
  9.        
  10.         float z = 0;
  11.        
  12.         float[][] Map = new float[ xcount][ycount];
  13.         Random rand = new Random();
  14.        
  15.         for(y = 0; y < ycount; y++){
  16.             for(x = 0; x < xcount; x++){
  17.                 Map[x][y] = (float) rand.nextInt(50) * 0.01f;
  18.             }
  19.         }
  20.  
  21.  
  22.         while(!Display.isCloseRequested()){
  23.            
  24.  
  25.             glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clearscreen
  26.            
  27.             z -= 0.01f;
  28.  
  29.               glLoadIdentity();
  30.               gluLookAt(0,2,5,
  31.                         0,0,0,
  32.                         0,1,0);
  33.               glTranslatef(z,0,0);
  34.            
  35.               glBegin(GL_QUADS);
  36.             for(y = 0; y < ycount -1; y++){
  37.                 for(x = 0; x < xcount -1; x++){
  38.                       glTexCoord2f(U*x,     V*(y+1));
  39.                       glVertex3f(x, Map[x][y],  y);
  40.                       glTexCoord2f(U*x,     V*y);    
  41.                       glVertex3f(x, Map[x][y+1],  y+1);
  42.                       glTexCoord2f(U*(x+1), V*y);    
  43.                       glVertex3f(x+1, Map[x+1][y+1],  y+1);
  44.                       glTexCoord2f(U*(x+1), V*(y+1));  
  45.                       glVertex3f(x+1, Map[x+1][y],  y);
  46.                 }
  47.             }
  48.             glEnd();
  49.            
  50.            
  51.             Display.update();
  52.             Display.sync(60);
  53.         }

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tutorial Lektion 4 Terramapping
BeitragVerfasst: Mo Jan 16, 2012 17:12 
Offline
DGL Member

Registriert: So Jan 15, 2012 23:14
Beiträge: 10
Wohnort: Köln
Programmiersprache: Java
Hey, danke für die Antwort. Da waren echt paar richtige Dumme Fehler bei die ich übersehen habe :/

Habs jetzt mal probiert und bekomm so was raus (Anhang)

Welche Matrix Operationen sind den überflüssig? Ich habe selbst nix dazu erfunden sondern nur das aus der .dpr oder dem Wiki übernommen.

Grüße


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tutorial Lektion 4 Terramapping
BeitragVerfasst: Mo Jan 16, 2012 17:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Welche Matrix Operationen sind den überflüssig?

Er hat das glBegin(GL_QUADS)...glEnd() aus der Schleife gezogen, weil das einen DEUTLICHEN Performance-Schub (*) gibt. Entsprechend muss man auch die Matrix-Operationen ( glPushMatrix, glTranslatef, ...) raus nehmen.


(*) was nicht heißen soll das dies schnell ist...aber für den OpenGL-Einsteiger sollt es erst mal reichen ;)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tutorial Lektion 4 Terramapping
BeitragVerfasst: Mo Jan 16, 2012 18:05 
Offline
DGL Member

Registriert: So Jan 15, 2012 23:14
Beiträge: 10
Wohnort: Köln
Programmiersprache: Java
Wenn man das raus nimmt wird doch gar nichts mehr gezeichnet?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tutorial Lektion 4 Terramapping
BeitragVerfasst: Mo Jan 16, 2012 18:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Wenn man das raus nimmt wird doch gar nichts mehr gezeichnet?!

Mit "aus der Schleife" herausnehmen war gemeint, dass das glBegin jetzt außerhalb der Schleife liegt. Siehe Code von damadmax.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tutorial Lektion 4 Terramapping
BeitragVerfasst: Mo Jan 16, 2012 18:33 
Offline
DGL Member

Registriert: So Jan 15, 2012 23:14
Beiträge: 10
Wohnort: Köln
Programmiersprache: Java
Wow, danke. So klappt es sogar. Habs eben leider total übersehen.

War als ich mir das angeguckt hab bisschen fertig mit der Welt, danke Leute :)


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


Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot] und 4 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.021s | 16 Queries | GZIP : On ]