//////////////////////////////////////////////////////////////////////////////////////////////////// //! Display mainloop. //////////////////////////////////////////////////////////////////////////////////////////////////// void display(){ // set OpenGL states setOpenGLStates(); // Clear the color and depth buffer glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); mat4 modelViewMatrix = viewMatrix * objectMatrix; mat4 modelViewProjectionMatrix = projectionMatrix * modelViewMatrix; mat4 normalMatrix = glm::transpose(glm::inverse(modelViewMatrix)); glUniformMatrix4fv(m_MVHandle, 1, GL_FALSE, glm::value_ptr(modelViewMatrix)); glUniformMatrix4fv(m_MVPHandle, 1, GL_FALSE, glm::value_ptr(modelViewProjectionMatrix)); glUniformMatrix4fv(m_NormalMatrixHandle, 1, GL_FALSE, glm::value_ptr(normalMatrix)); glUniform4fv(m_lightPosition, 1, glm::value_ptr(lightDirection)); glUniform4f(m_lightAmbient, light_ambient[0], light_ambient[1], light_ambient[2], 1.0f); glUniform4fv(m_lightDiffuse, 1, light_diffuse); glUniform4fv(m_lightSpecular, 1, light_diffuse); glUniform4fv(m_MaterialAmbient, 1, mat_ambient); glUniform4fv(m_MaterialDiffuse, 1, mat_diffuse); glUniform4fv(m_MaterialSpecular, 1, mat_specular); glUniform1f(m_MaterialShininess, mat_shininess[0]); // Set the render states for the current rendering technique // switch(currentRenderer){ // case FLAT: // // TODO ENABLE PER FACE LIGHTING // renderFlat = true; // renderGouraud = false; // renderBlinnPhong = false; // break; // case GOURAUD: // // TODO ENABLE PER VERTEX LIGHTING // renderFlat = false; // renderGouraud = true; // renderBlinnPhong = false; // break; // case BLINN_PHONG: // // ENABLE PER FRAGMENT LIGHTING // renderFlat = false; // renderGouraud = false; // renderBlinnPhong = true; blinnPhongShader.bindShader(); // break; // break; // default: // break; // } //glPushMatrix(); // Rotate the object //glMultMatrixf(&objectMatrix[0][0]); // Render the object // TODO // glBegin(GL_TRIANGLES); // glVertex3f(1,0,0); // glVertex3f(0,1,0); // glVertex3f(0,0,1); // glEnd(); if (renderFlat) { //mesh.renderFlat(); } //if (renderGouraud || renderBlinnPhong) //{ mesh.renderSmooth(); //} // disable program object to avoid side effects //glUseProgramObjectARB( 0); //glPopMatrix(); glFlush(); //glutPostRedisplay(); //glutSwapBuffers(); }
// display callback // XXX: NEEDS TO BE IMPLEMENTED void World::display() { glClearColor(0.2, 0.2, 0.2, 0.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // position the camera at (0,0,cameraZ) looking down the // negative z-axis at (0,0,0) gluLookAt(0.0, 0.0, cameraZ, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); GLfloat lightPosition[]= { 5.0, 5.0, 5.0, 0.0 }; glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); // shift object glTranslatef(shift.x, shift.y, shift.z); // rotate Object glRotatef(rotation.x, 1.0f, 0.0f, 0.0f); glRotatef(rotation.y, 0.0f, 1.0f, 0.0f); // show coordinate system if (showCoordinates) { glDisable(GL_LIGHTING); glDisable(GL_TEXTURE_2D); glBegin(GL_LINES); glColor3ub(255, 0, 0); glVertex3f(0.0, 0.0, 0.0); glVertex3f(1.0, 0.0, 0.0); glColor3ub(0, 255, 0); glVertex3f(0.0, 0.0, 0.0); glVertex3f(0.0, 1.0, 0.0); glColor3ub(0, 0, 255); glVertex3f(0.0, 0.0, 0.0); glVertex3f(0.0, 0.0, 1.0); glEnd(); } // show center of spherical mapping if (showOrigin) { glDisable(GL_LIGHTING); glDisable(GL_TEXTURE_2D); glColor3f(1.0, 1.0, 0.0); glPushMatrix(); glutSolidSphere(0.05f, 20, 20); glPopMatrix(); } // draw cursor // XXX // INSERT YOUR CODE HERE glBegin(GL_LINES); glColor3ub(255, 0, 0); glVertex3f(0.0, 0.0, 0.0); glVertex3f(cursor.x, cursor.y, cursor.z); glEnd(); // END XXX glScalef(scale, scale, scale); if (doLighting) glEnable(GL_LIGHTING); else glDisable(GL_LIGHTING); // draw the geometry // if showTexture is true, enable texturing in opengl // XXX // INSERT YOUR CODE HERE if (showTexture) { glEnable(GL_TEXTURE_2D); } // END XXX glColor3f(1, 1, 1); if (environmentMapping) { if (!shaderIsLoaded) { myShader.load("shaders/emBlinnPhong"); shaderIsLoaded = 1; } myShader.bindShader(); } if (drawRect) { // draw a textured quad // XXX // INSERT YOUR CODE HERE fullScreenQuad(); // END XXX } // else draw model // XXX // INSERT YOUR CODE HERE else { if (defaultModelIndex != -1) { model = Mesh::loadOff(models[defaultModelIndex]); defaultModelIndex = -1; } model.Display(); } if (environmentMapping) { // if we used em, unbind shader afterwards myShader.unbindShader(); } // glDisable(GL_TEXTURE_2D); ??? // END XXX glutSwapBuffers(); }