Hallo!
Ich bastel gerade in Java an einem Flugsimulator rum und nutze dazu die offenen Höhendaten und die Bilder von Google Maps.
Wie ich das genau machen möchte:
mit den Höhendaten spanne ich die Oberfläche und mappe die Textur drauf.
Da die Bilder synchron von google runtergeladen werden und ich somit nicht ein einziges großes Texture-Bild habe, habe ich mir das so vorgestellt (um auch ein bisschen Aufwand mit den Textur-Koordinaten zu sparen ):
Ich habe ein Array von Höhendaten. Für ein "Quadrat" (damit meine ich ein Rechteck mit den Koordinaten X|Y; X|Y+1; X+1|Y+1; X+1|Y) benutze ich genau ein Texture-Bild. Für das nächste Rechteck ist es dann das nächste Bild usw usw bis so die gesamte Landschaft entsteht.
Dieses Vorhaben ist mit
gl.glVertex3f(...) und
gl.glTexCoord2f(...)
recht einfach zu realisieren.
Hier mein Beispiel:
ich habe:
ein map-array von typ float[][] mit meinen Höhendaten
ein texture-array vom typ texture[][] mit den Texturbildern
Das klappt auch, aber nicht besonders performant.
Ich will das ganze mit VBOs lösen. Ich habe mich in das Thema eingelesen und bin soweit, dass ich mit Hilfe der Höhendaten die Landschaft darstellen kann.
Wenns aber zu der Textur kommt, habe ich probleme. Alle Beispiele, die ich finde, gehen davon aus, dass es eine große Textur gibt. Dann werden die Texturkoordinaten berechnet und das gesamte Bild drauf geladen.
Weiss jemand wie das gleiche mit vielen kleinen Texturen geht? Gibt es tutorials wo das Thema angeschnitten wird? Wie gesagt, ich konnte nichts finden.
Vielen Dank im Voraus.
Ich bastel gerade in Java an einem Flugsimulator rum und nutze dazu die offenen Höhendaten und die Bilder von Google Maps.
Wie ich das genau machen möchte:
mit den Höhendaten spanne ich die Oberfläche und mappe die Textur drauf.
Da die Bilder synchron von google runtergeladen werden und ich somit nicht ein einziges großes Texture-Bild habe, habe ich mir das so vorgestellt (um auch ein bisschen Aufwand mit den Textur-Koordinaten zu sparen ):
Ich habe ein Array von Höhendaten. Für ein "Quadrat" (damit meine ich ein Rechteck mit den Koordinaten X|Y; X|Y+1; X+1|Y+1; X+1|Y) benutze ich genau ein Texture-Bild. Für das nächste Rechteck ist es dann das nächste Bild usw usw bis so die gesamte Landschaft entsteht.
Dieses Vorhaben ist mit
gl.glVertex3f(...) und
gl.glTexCoord2f(...)
recht einfach zu realisieren.
Hier mein Beispiel:
ich habe:
ein map-array von typ float[][] mit meinen Höhendaten
ein texture-array vom typ texture[][] mit den Texturbildern
Code:
for(int X = 0; X < map.getMap().length - 1; X++)
for(int Y = 0; Y < map.getMap().length - 1; Y++){
texture[X][Y].enable();
texture[X][Y].bind();
gl.glBegin(GL.GL_QUADS);
gl.glTexCoord2f(0, 0);
gl.glVertex3f(X, map[x][y], Y); // links unten
gl.glTexCoord2f(0, 1);
gl.glVertex3f(X, map)[X][Y+1], Y+1); // links oben
gl.glTexCoord2f(1, 1);
gl.glVertex3f(X+1, map[X+1][Y+1], Y+1); // rechts oben
gl.glTexCoord2f(1, 0);
gl.glVertex3f(X+1, map[X+1][Y], Y); // rechts unten
gl.glEnd();
}
Das klappt auch, aber nicht besonders performant.
Ich will das ganze mit VBOs lösen. Ich habe mich in das Thema eingelesen und bin soweit, dass ich mit Hilfe der Höhendaten die Landschaft darstellen kann.
Wenns aber zu der Textur kommt, habe ich probleme. Alle Beispiele, die ich finde, gehen davon aus, dass es eine große Textur gibt. Dann werden die Texturkoordinaten berechnet und das gesamte Bild drauf geladen.
Weiss jemand wie das gleiche mit vielen kleinen Texturen geht? Gibt es tutorials wo das Thema angeschnitten wird? Wie gesagt, ich konnte nichts finden.
Vielen Dank im Voraus.