public class NewMap { int vaoID; int vertexBufferID; int indexBufferID; Image texture; Shader shader = ShaderManager.getShader("SimpleColor"); int indexCount; public NewMap() { //-------------------------------------------------------- VertexData v0 = new VertexData(); v0.setXYZ(0, 0, 0); v0.setNXYZ(0, 0, -1); v0.setUV(0, 1); VertexData v1 = new VertexData(); v1.setXYZ(1, 0, 0); v1.setNXYZ(0, 0, -1); v1.setUV(1, 1); VertexData v2 = new VertexData(); v2.setXYZ(1, 1, 0); v2.setNXYZ(0, 0, -1); v2.setUV(1, 0); VertexData v3 = new VertexData(); v3.setXYZ(0, 1, 0); v3.setNXYZ(0, 0, -1); v3.setUV(0, 0); //-------------------------------------------------------- VertexData v4 = new VertexData(); v4.setXYZ(0, 0, 1); v4.setNXYZ(0, 0, 1); v4.setUV(0, 1); VertexData v5 = new VertexData(); v5.setXYZ(1, 0, 1); v5.setNXYZ(0, 0, 1); v5.setUV(1, 1); VertexData v6 = new VertexData(); v6.setXYZ(1, 1, 1); v6.setNXYZ(0, 0, 1); v6.setUV(1, 0); VertexData v7 = new VertexData(); v7.setXYZ(0, 1, 1); v7.setNXYZ(0, 0, 1); v7.setUV(0, 0); //-------------------------------------------------------- VertexData v8 = new VertexData(); v8.setXYZ(0, 0, 1); v8.setNXYZ(-1, 0, 0); v8.setUV(0, 1); VertexData v9 = new VertexData(); v9.setXYZ(0, 1, 1); v9.setNXYZ(-1, 0, 0); v9.setUV(1, 1); VertexData v10 = new VertexData(); v10.setXYZ(0, 1, 0); v10.setNXYZ(-1, 0, 0); v10.setUV(1, 0); VertexData v11 = new VertexData(); v11.setXYZ(0, 0, 0); v11.setNXYZ(-1, 0, 0); v11.setUV(0, 0); //-------------------------------------------------------- VertexData v12 = new VertexData(); v12.setXYZ(1, 0, 1); v12.setNXYZ(1, 0, 0); v12.setUV(0, 1); VertexData v13 = new VertexData(); v13.setXYZ(1, 1, 1); v13.setNXYZ(1, 0, 0); v13.setUV(1, 1); VertexData v14 = new VertexData(); v14.setXYZ(1, 1, 0); v14.setNXYZ(1, 0, 0); v14.setUV(1, 0); VertexData v15 = new VertexData(); v15.setXYZ(1, 0, 0); v15.setNXYZ(1, 0, 0); v15.setUV(0, 0); VertexData[] data = new VertexData[] {v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15}; FloatBuffer vertBuffer = BufferUtils.createFloatBuffer(data.length * VertexData.elementCount); for(int i = 0; i < data.length; i++) { vertBuffer.put(data[i].getElements()); } vertBuffer.flip(); byte[] indices = new byte[] { 0, 1, 2, 2, 3, 0, 4, 5, 6, 6, 7, 4, 8, 9, 10, 10, 11, 8, 12, 13, 14, 14, 15, 12 }; indexCount = indices.length; ByteBuffer indexBuffer = BufferUtils.createByteBuffer(indices.length); indexBuffer.put(indices); indexBuffer.flip(); vaoID = GL30.glGenVertexArrays(); GL30.glBindVertexArray(vaoID); vertexBufferID = GL15.glGenBuffers(); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertexBufferID); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertBuffer, GL15.GL_STATIC_DRAW); GL20.glVertexAttribPointer(0, VertexData.positionElementCount, GL11.GL_FLOAT, false, VertexData.stride, VertexData.positionOffset); GL20.glVertexAttribPointer(1, VertexData.textureElementCount, GL11.GL_FLOAT, false, VertexData.stride, VertexData.textureOffset); GL20.glVertexAttribPointer(2, VertexData.normalElementCount, GL11.GL_FLOAT, false, VertexData.stride, VertexData.normalOffset); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); GL30.glBindVertexArray(0); indexBufferID = GL15.glGenBuffers(); GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, indexBufferID); GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, indexBuffer, GL15.GL_STATIC_DRAW); GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0); GL20.glUseProgram(shader.getID()); GL20.glBindAttribLocation(shader.getID(), 0, "inPosition"); GL20.glBindAttribLocation(shader.getID(), 1, "inTexCoord"); GL20.glBindAttribLocation(shader.getID(), 2, "inNormal"); GL20.glUseProgram(0); } public void render(Camera cam) { GL20.glUseProgram(shader.getID()); shader.setUniformMatrix("projMat", cam.getProjection()); shader.setUniformMatrix("viewMat", cam.getView()); shader.setUniformMatrix("modelMat", new Matrix4f()); shader.setUniformMatrix("normalMat", new Matrix3f()); shader.setUniformFloat("shininess", 100); shader.setUniformVec("diffuse", new Vector4f(0, 0.5f, 0, 1f)); shader.setUniformVec("ambient", new Vector4f(0, 0, 1,1)); shader.setUniformVec("specular", new Vector4f(0, 0, 0, 1f)); shader.setUniformVec("lightPos", cam.getPosition()); GL30.glBindVertexArray(vaoID); GL20.glEnableVertexAttribArray(0); GL20.glEnableVertexAttribArray(1); GL20.glEnableVertexAttribArray(2); GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, indexBufferID); GL11.glDrawElements(GL11.GL_TRIANGLES, indexCount, GL11.GL_UNSIGNED_BYTE, 0); GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0); GL20.glDisableVertexAttribArray(0); GL20.glDisableVertexAttribArray(1); GL20.glDisableVertexAttribArray(2); GL30.glBindVertexArray(0); GL20.glUseProgram(0); } }