From 32117d0bf27e0a72165707fe4e56d231136e734b Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 16 Jan 2010 17:50:43 +0100 Subject: Use index buffers to render tiles --- src/de/gamezock/metacraft/ui/Main.java | 2 +- src/de/gamezock/metacraft/ui/Renderer.java | 49 +++++++++++++++++++----------- 2 files changed, 33 insertions(+), 18 deletions(-) (limited to 'src/de/gamezock/metacraft/ui') 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 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(); } } -- cgit v1.2.3