void DrawShip(glutil::MatrixStack &modelMatrix) { glutil::PushStack push(modelMatrix); glm::mat4 worldToCamera = modelMatrix.Top(); modelMatrix.SetIdentity(); modelMatrix.Translate(glm::vec3(0.0f, 2.0f, 50.0f)); modelMatrix.Scale(3); modelMatrix.Rotate(glm::vec3(0, 1.0f, 0), -34); modelMatrix.Rotate(glm::vec3(0.5, 0.0, 0.5), 10); glUseProgram(ReflectorsAndLightProgram.reflectorsProgramData.theProgram); glUniform1f(ReflectorsAndLightProgram.reflectorsProgramData.shininess, 2.3f); glUniform3f(ReflectorsAndLightProgram.reflectorsProgramData.ks, 0.5f, 0.5f, 0.5f); glUniform3f(ReflectorsAndLightProgram.reflectorsProgramData.ka, 0.3f, 0.3f, 0.3f); glUniform3f(ReflectorsAndLightProgram.reflectorsProgramData.kd, 0.3f, 0.3f, 0.3f); glUniform1f(ReflectorsAndLightProgram.reflectorsProgramData.spotLight.cutoffUnif, 73.0); glUniform1f(ReflectorsAndLightProgram.reflectorsProgramData.spotLight.exponentUnif, 3.0); glUniform3fv(ReflectorsAndLightProgram.reflectorsProgramData.spotLight.directionUnif, 1, glm::value_ptr(car->reflectorDirection())); glUniform3fv(ReflectorsAndLightProgram.reflectorsProgramData.spotLight.intensityUnif, 1, glm::value_ptr(glm::vec3(0.8, 0.8, 0.8))); SendReflectorPosition(ReflectorsAndLightProgram.reflectorsProgramData.spotLight.positionLeftReflectorUnif, -0.2f, 0.2f, 0.5f); SendReflectorPosition(ReflectorsAndLightProgram.reflectorsProgramData.spotLight.positionRightReflectorUnif, 0.2f, 0.2f, 0.5f); glUniformMatrix4fv(ReflectorsAndLightProgram.reflectorsProgramData.modelToWorldMatrixUnif, 1, GL_FALSE, glm::value_ptr(modelMatrix.Top())); glUniformMatrix4fv(ReflectorsAndLightProgram.reflectorsProgramData.worldToCameraMatrixUnif, 1, GL_FALSE, glm::value_ptr(worldToCamera)); glm::vec3 worldLightPos(CalcLightPosition()); glUniform3fv(ReflectorsAndLightProgram.worldSpaceLightPosUnif, 1, glm::value_ptr(worldLightPos)); g_pShip->Render(); glUseProgram(0); }
void DrawTetrahedron(glutil::MatrixStack &modelMatrix) { glutil::PushStack push(modelMatrix); g_TetrahedronTimer.Update(); glm::mat4 worldToCamera = modelMatrix.Top(); modelMatrix.SetIdentity(); modelMatrix.Translate(40.0f, 2.0f, 75.0f); modelMatrix.RotateY(360.0f * g_TetrahedronTimer.GetAlpha()); modelMatrix.Translate(1.0f, 1.0f + sqrtf(2.0f) * 10, 1.0f); modelMatrix.Scale(10); modelMatrix.Rotate(glm::vec3(-0.707f, 0.0f, -0.707f), 54.735f); glUseProgram(ReflectorsAndLightProgram.reflectorsProgramData.theProgram); glUniform1f(ReflectorsAndLightProgram.reflectorsProgramData.shininess, 2.3f); glUniform3f(ReflectorsAndLightProgram.reflectorsProgramData.ks, 0.5f, 0.5f, 0.5f); glUniform3f(ReflectorsAndLightProgram.reflectorsProgramData.ka, 0.2f, 0.2f, 0.2f); glUniform3f(ReflectorsAndLightProgram.reflectorsProgramData.kd, 0.3f, 0.3f, 0.3f); glUniform1f(ReflectorsAndLightProgram.reflectorsProgramData.spotLight.cutoffUnif, 73.0f); glUniform1f(ReflectorsAndLightProgram.reflectorsProgramData.spotLight.exponentUnif, 3.0f); glUniform3fv(ReflectorsAndLightProgram.reflectorsProgramData.spotLight.directionUnif, 1, glm::value_ptr(car->reflectorDirection())); glUniform3fv(ReflectorsAndLightProgram.reflectorsProgramData.spotLight.intensityUnif, 1, glm::value_ptr(glm::vec3(0.8f, 0.8f, 0.8f))); SendReflectorPosition(ReflectorsAndLightProgram.reflectorsProgramData.spotLight.positionLeftReflectorUnif, -0.2f, 0.2f, -0.5f); SendReflectorPosition(ReflectorsAndLightProgram.reflectorsProgramData.spotLight.positionRightReflectorUnif, 0.2f, 0.2f, -0.5f); glUniformMatrix4fv(ReflectorsAndLightProgram.reflectorsProgramData.modelToWorldMatrixUnif, 1, GL_FALSE, glm::value_ptr(modelMatrix.Top())); glUniformMatrix4fv(ReflectorsAndLightProgram.reflectorsProgramData.worldToCameraMatrixUnif, 1, GL_FALSE, glm::value_ptr(worldToCamera)); glUniform4fv(ReflectorsAndLightProgram.lightIntensityUnif, 1, glm::value_ptr(glm::vec4(0.7f, 0.7f, 0.7f, 1.0f))); glm::vec3 worldLightPos(CalcLightPosition()); glUniform3fv(ReflectorsAndLightProgram.worldSpaceLightPosUnif, 1, glm::value_ptr(worldLightPos)); g_pTetrahedronMesh->Render(); glUseProgram(0); }
void Scene::Draw( glutil::MatrixStack &modelMatrix, int materialBlockIndex, float alphaTetra ) { //Render the ground plane. { glutil::PushStack push(modelMatrix); modelMatrix.RotateX(-90); DrawObject(m_pTerrainMesh.get(), GetProgram(LP_VERT_COLOR_DIFFUSE), materialBlockIndex, 0, modelMatrix); } //Render the tetrahedron object. { glutil::PushStack push(modelMatrix); modelMatrix.Translate(75.0f, 5.0f, 75.0f); modelMatrix.RotateY(360.0f * alphaTetra); modelMatrix.Scale(10.0f, 10.0f, 10.0f); modelMatrix.Translate(0.0f, sqrtf(2.0f), 0.0f); modelMatrix.Rotate(glm::vec3(-0.707f, 0.0f, -0.707f), 54.735f); DrawObject(m_pTetraMesh.get(), "lit-color", GetProgram(LP_VERT_COLOR_DIFFUSE_SPECULAR), materialBlockIndex, 1, modelMatrix); } //Render the monolith object. { glutil::PushStack push(modelMatrix); modelMatrix.Translate(88.0f, 5.0f, -80.0f); modelMatrix.Scale(4.0f, 4.0f, 4.0f); modelMatrix.Scale(4.0f, 9.0f, 1.0f); modelMatrix.Translate(0.0f, 0.5f, 0.0f); DrawObject(m_pCubeMesh.get(), "lit", GetProgram(LP_MTL_COLOR_DIFFUSE_SPECULAR), materialBlockIndex, 2, modelMatrix); } //Render the cube object. { glutil::PushStack push(modelMatrix); modelMatrix.Translate(-52.5f, 14.0f, 65.0f); modelMatrix.RotateZ(50.0f); modelMatrix.RotateY(-10.0f); modelMatrix.Scale(20.0f, 20.0f, 20.0f); DrawObject(m_pCubeMesh.get(), "lit-color", GetProgram(LP_VERT_COLOR_DIFFUSE_SPECULAR), materialBlockIndex, 3, modelMatrix); } //Render the cylinder. { glutil::PushStack push(modelMatrix); modelMatrix.Translate(-7.0f, 30.0f, -14.0f); modelMatrix.Scale(15.0f, 55.0f, 15.0f); modelMatrix.Translate(0.0f, 0.5f, 0.0f); DrawObject(m_pCylMesh.get(), "lit-color", GetProgram(LP_VERT_COLOR_DIFFUSE_SPECULAR), materialBlockIndex, 4, modelMatrix); } //Render the sphere. { glutil::PushStack push(modelMatrix); modelMatrix.Translate(-83.0f, 14.0f, -77.0f); modelMatrix.Scale(20.0f, 20.0f, 20.0f); DrawObject(m_pSphereMesh.get(), "lit", GetProgram(LP_MTL_COLOR_DIFFUSE_SPECULAR), materialBlockIndex, 5, modelMatrix); } }