diff options
Diffstat (limited to 'src/ru/olamedia/olacraft/render/jogl/BlockRenderer.java')
-rw-r--r-- | src/ru/olamedia/olacraft/render/jogl/BlockRenderer.java | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/ru/olamedia/olacraft/render/jogl/BlockRenderer.java b/src/ru/olamedia/olacraft/render/jogl/BlockRenderer.java new file mode 100644 index 0000000..6d96403 --- /dev/null +++ b/src/ru/olamedia/olacraft/render/jogl/BlockRenderer.java @@ -0,0 +1,87 @@ +package ru.olamedia.olacraft.render.jogl; + +import javax.media.opengl.GL; +import javax.media.opengl.GL2; +import javax.media.opengl.GLAutoDrawable; + +import com.jogamp.opengl.util.texture.Texture; +import com.jogamp.opengl.util.texture.TextureCoords; + +import ru.olamedia.geom.SimpleQuadMesh; +import ru.olamedia.olacraft.world.chunk.BlockSlice; +import ru.olamedia.texture.TextureManager; + +public class BlockRenderer { + private BlockSlice slice; + private SimpleQuadMesh mesh; + + public BlockRenderer(BlockSlice slice) { + this.slice = slice; + } + + public SimpleQuadMesh getMesh(GL glx) { + GL2 gl = glx.getGL2(); + // 14739 + SimpleQuadMesh mesh = new SimpleQuadMesh(999999); + mesh.useColor(); + mesh.useTexture(); + + gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, + GL.GL_NEAREST_MIPMAP_NEAREST); + gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, + GL.GL_NEAREST_MIPMAP_NEAREST); + gl.glHint(GL2.GL_PERSPECTIVE_CORRECTION_HINT, GL2.GL_FASTEST); + gl.glHint(GL2.GL_LINE_SMOOTH_HINT, GL2.GL_NICEST); + Texture grass = TextureManager.get("texture/grass.png"); + int tex = grass.getTextureObject(gl); + + TextureCoords tc = grass.getImageTexCoords(); + // mesh.setTextureSize(tc.right(), tc.top()); + System.out.println(grass.getWidth() + " " + grass.getHeight() + " | " + + tc.left() + " " + tc.right() + " " + tc.top() + " " + + tc.bottom()); + mesh.setTextureSize(grass.getWidth(), grass.getHeight()); + for (int x = 0; x < slice.getWidth(); x++) { + for (int y = 0; y < slice.getHeight(); y++) { + for (int z = 0; z < slice.getDepth(); z++) { + mesh.setTranslation(x, y, z); + // mesh.setColor4f(0, 1, 0, 1); + mesh.setColor4f((float) Math.random(), + (float) Math.random(), (float) Math.random(), 1); + mesh.setGLTexture(tex); + if (y == 0) { + mesh.addBottomQuad(); + } + if (y == 3) { + // Math.random(); + mesh.addTopQuad(); + } + if (y < 4) { + if (x == 0) { + mesh.addLeftQuad(); + } + if (x == slice.getWidth() - 1) { + mesh.addRightQuad(); + } + if (z == 0) { + mesh.addBackQuad(); + } + if (z == slice.getDepth() - 1) { + mesh.addFrontQuad(); + } + } + } + } + } + mesh.endMesh(); + return mesh; + } + + public void render(GL glx) { + if (null == mesh) { + mesh = getMesh(glx); + } + mesh.joglRender(glx); + } + +} |