@Override public FloatBuffer fillBuffer(FloatBuffer buffer) { return cameraToClipMatrix.fillBuffer(buffer); }
@Override protected void display() { glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepth(1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); MatrixStack modelMatrix = new MatrixStack(); modelMatrix.setMatrix(viewPole.calcMatrix()); Vec4 lightDirCameraSpace = Mat4.mul(modelMatrix.top(), lightDirection); glUseProgram(whiteDiffuseColor.theProgram); glUniform3(whiteDiffuseColor.dirToLightUnif, lightDirCameraSpace.fillAndFlipBuffer(vec4Buffer)); glUseProgram(vertexDiffuseColor.theProgram); glUniform3( vertexDiffuseColor.dirToLightUnif, lightDirCameraSpace.fillAndFlipBuffer(vec4Buffer)); glUseProgram(0); { modelMatrix.push(); // Render the ground plane. { modelMatrix.push(); glUseProgram(whiteDiffuseColor.theProgram); glUniformMatrix4( whiteDiffuseColor.modelToCameraMatrixUnif, false, modelMatrix.top().fillAndFlipBuffer(mat4Buffer)); Mat3 normMatrix = new Mat3(modelMatrix.top()); glUniformMatrix3( whiteDiffuseColor.normalModelToCameraMatrixUnif, false, normMatrix.fillAndFlipBuffer(mat3Buffer)); glUniform4f(whiteDiffuseColor.lightIntensityUnif, 1.0f, 1.0f, 1.0f, 1.0f); planeMesh.render(); glUseProgram(0); modelMatrix.pop(); } // Render the Cylinder { modelMatrix.push(); modelMatrix.applyMatrix(objtPole.calcMatrix()); if (drawColoredCyl) { glUseProgram(vertexDiffuseColor.theProgram); glUniformMatrix4( vertexDiffuseColor.modelToCameraMatrixUnif, false, modelMatrix.top().fillAndFlipBuffer(mat4Buffer)); Mat3 normMatrix = new Mat3(modelMatrix.top()); glUniformMatrix3( vertexDiffuseColor.normalModelToCameraMatrixUnif, false, normMatrix.fillAndFlipBuffer(mat3Buffer)); glUniform4f(vertexDiffuseColor.lightIntensityUnif, 1.0f, 1.0f, 1.0f, 1.0f); cylinderMesh.render("lit-color"); } else { glUseProgram(whiteDiffuseColor.theProgram); glUniformMatrix4( whiteDiffuseColor.modelToCameraMatrixUnif, false, modelMatrix.top().fillAndFlipBuffer(mat4Buffer)); Mat3 normMatrix = new Mat3(modelMatrix.top()); glUniformMatrix3( whiteDiffuseColor.normalModelToCameraMatrixUnif, false, normMatrix.fillAndFlipBuffer(mat3Buffer)); glUniform4f(whiteDiffuseColor.lightIntensityUnif, 1.0f, 1.0f, 1.0f, 1.0f); cylinderMesh.render("lit"); } glUseProgram(0); modelMatrix.pop(); } modelMatrix.pop(); } }