diff options
author | Matthias Schiffer <matthias@gamezock.de> | 2010-01-16 17:50:43 +0100 |
---|---|---|
committer | Matthias Schiffer <matthias@gamezock.de> | 2010-01-16 17:50:43 +0100 |
commit | 32117d0bf27e0a72165707fe4e56d231136e734b (patch) | |
tree | df5de7dedbfa7084227122505b96a4bc1d0845a0 /src/de/gamezock/metacraft/ui | |
parent | b9cc8e8871de73bf70406913f18b446a1fc723e8 (diff) | |
download | metacraft-32117d0bf27e0a72165707fe4e56d231136e734b.tar metacraft-32117d0bf27e0a72165707fe4e56d231136e734b.zip |
Use index buffers to render tiles
Diffstat (limited to 'src/de/gamezock/metacraft/ui')
-rw-r--r-- | src/de/gamezock/metacraft/ui/Main.java | 2 | ||||
-rw-r--r-- | src/de/gamezock/metacraft/ui/Renderer.java | 49 |
2 files changed, 33 insertions, 18 deletions
diff --git a/src/de/gamezock/metacraft/ui/Main.java b/src/de/gamezock/metacraft/ui/Main.java index c26e510..f5eb3f9 100644 --- a/src/de/gamezock/metacraft/ui/Main.java +++ b/src/de/gamezock/metacraft/ui/Main.java @@ -144,6 +144,6 @@ public class Main implements GLEventListener { * @param args */ public static void main(String[] args) { - new Main(); + new Main(); } } diff --git a/src/de/gamezock/metacraft/ui/Renderer.java b/src/de/gamezock/metacraft/ui/Renderer.java index 3213a53..6d8d04a 100644 --- a/src/de/gamezock/metacraft/ui/Renderer.java +++ b/src/de/gamezock/metacraft/ui/Renderer.java @@ -1,12 +1,15 @@ package de.gamezock.metacraft.ui; +import java.nio.IntBuffer; +import java.util.List; + import javax.media.opengl.GL; import javax.media.opengl.GL2; -import javax.vecmath.Point3f; -import javax.vecmath.Vector3f; +import de.gamezock.metacraft.data.IndexedTriangle; import de.gamezock.metacraft.data.Map; -import de.gamezock.metacraft.data.Triangle; +import de.gamezock.metacraft.data.Tile; +import de.gamezock.metacraft.data.VertexBuffer; public class Renderer { private Main main; @@ -15,14 +18,20 @@ public class Renderer { this.main = main; } - private void renderTriangle(GL2 gl, Triangle t) { - for(int i = 0; i < 3; ++i) { - Point3f v = t.getVertex(i); - Vector3f n = t.getNormal(i); - - gl.glNormal3f(n.x, n.y, n.z); - gl.glVertex3f(v.x, v.y, v.z); - } + private void renderTile(GL2 gl, Tile tile) { + List<IndexedTriangle> triangles = tile.getData().getTriangles(); + + if(triangles.isEmpty()) + return; + + VertexBuffer buffer = triangles.get(0).getBuffer(); + + gl.glInterleavedArrays(GL2.GL_N3F_V3F, 0, buffer.getBuffer().clear()); + + IntBuffer indexBuffer = tile.getData().getIndexBuffer(); + indexBuffer.clear(); + + gl.glDrawElements(GL.GL_TRIANGLES, indexBuffer.capacity(), GL2.GL_UNSIGNED_INT, indexBuffer); } public void render(GL2 gl) { @@ -30,20 +39,26 @@ public class Renderer { Map currentMap = main.getCurrentMap(); + gl.glEnable(GL2.GL_VERTEX_ARRAY); + gl.glEnable(GL2.GL_NORMAL_ARRAY); + gl.glPushMatrix(); gl.glRotatef((System.currentTimeMillis()%9000)/25.0f, 0, 0, 1); gl.glTranslatef(-20, -20, 0); - gl.glBegin(GL.GL_TRIANGLES); - gl.glColor3f(1, 1, 1); - for(Triangle t : currentMap.getTriangleData()) { - renderTriangle(gl, t); + for(int x = 0; x < currentMap.getWidth(); ++x) { + for(int y = 0; y < currentMap.getHeight(); ++y) { + gl.glPushMatrix(); + + gl.glTranslatef(currentMap.getTileSize()*x, currentMap.getTileSize()*y, currentMap.getTileHeight(x, y)); + renderTile(gl, currentMap.getTile(x, y)); + + gl.glPopMatrix(); + } } - gl.glEnd(); - gl.glPopMatrix(); } } |