//////////////////////////////////////////////////////////////////////////////////////////////////// //! Program main //! @param argc number of command line arguments //! @param argv handle to the array containing the command line arguments //////////////////////////////////////////////////////////////////////////////////////////////////// int main( int argc, char** argv) { int running = GL_TRUE; initOpenGLContext(argc, argv); // set OpenGL states setOpenGLStates(); // load ressources blinnPhongShader.load("shaders/BlinnPhong"); m_MVHandle = glGetUniformLocation(blinnPhongShader.getProgramObject(), "uMVMatrix"); m_MVPHandle = glGetUniformLocation(blinnPhongShader.getProgramObject(), "uMVPMatrix"); m_NormalMatrixHandle = glGetUniformLocation(blinnPhongShader.getProgramObject(), "uNormalMatrix"); m_lightPosition = glGetUniformLocation(blinnPhongShader.getProgramObject(), "uLightPosition"); m_lightAmbient = glGetUniformLocation(blinnPhongShader.getProgramObject(), "my_light.ambient"); m_lightDiffuse = glGetUniformLocation(blinnPhongShader.getProgramObject(), "my_light.diffuse"); m_lightSpecular = glGetUniformLocation(blinnPhongShader.getProgramObject(), "my_light.specular"); m_MaterialAmbient = glGetUniformLocation(blinnPhongShader.getProgramObject(), "my_material.ambient"); m_MaterialDiffuse = glGetUniformLocation(blinnPhongShader.getProgramObject(), "my_material.diffuse"); m_MaterialSpecular = glGetUniformLocation(blinnPhongShader.getProgramObject(), "my_material.specular"); m_MaterialShininess = glGetUniformLocation(blinnPhongShader.getProgramObject(), "my_material.shininess"); // TODO LOAD MESH mesh.loadOff("meshes/camel_head.off", blinnPhongShader.getProgramObject()); // register glut callbacks //glutDisplayFunc( display); //glutKeyboardFunc( keyboard); //glutMouseFunc(mousePressed); //glutMotionFunc(mouseMoved); //glutReshapeFunc(reshape); glfwSetWindowSizeCallback(reshape); glfwSetMousePosCallback(mouseMoved); // let's rock ... //glutMainLoop(); while (running) { display(); glfwSwapBuffers(); running = !glfwGetKey(GLFW_KEY_ESC) && glfwGetWindowParam(GLFW_OPENED); } glfwTerminate(); return 0; }
// 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(); }