void resetCamera() { mLookAt=STVector3(0.f,0.f,0.f); mPosition=STVector3(0.f,5.f,15.f); mUp=STVector3(0.f,1.f,0.f); SetUpAndRight(); }
// // Display the output image from our vertex and fragment shaders // void DisplayCallback() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); SetUpAndRight(); gluLookAt(mPosition.x,mPosition.y,mPosition.z, mLookAt.x,mLookAt.y,mLookAt.z, mUp.x,mUp.y,mUp.z); glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); // Texture 0: surface normal map glActiveTexture(GL_TEXTURE0); surfaceNormTex->Bind(); // Texture 1: surface normal map glActiveTexture(GL_TEXTURE1); surfaceDisplaceTex->Bind(); // Bind the textures we've loaded into openGl to // the variable names we specify in the fragment // shader. shader->SetTexture("normalTex", 0); shader->SetTexture("displacementTex", 1); shader->SetTexture("colorTex", 2); // Invoke the shader. Now OpenGL will call our // shader programs on anything we draw. shader->Bind(); if(mesh) { shader->SetUniform("normalMapping", -1.0); shader->SetUniform("displacementMapping", -1.0); shader->SetUniform("colorMapping", 1.0); glPushMatrix(); // Pay attention to scale STVector3 size_vector=gBoundingBox.second-gBoundingBox.first; float maxSize=(std::max)((std::max)(size_vector.x,size_vector.y),size_vector.z); glScalef(3.0f/maxSize,3.0f/maxSize,3.0f/maxSize); glTranslatef(-gMassCenter.x,-gMassCenter.y,-gMassCenter.z); for(unsigned int id=0;id<gTriangleMeshes.size();id++) { gTriangleMeshes[id]->Draw(smooth); } glPopMatrix(); } else { if(normalMapping){ shader->SetUniform("displacementMapping", -1.0); shader->SetUniform("normalMapping", 1.0); shader->SetUniform("colorMapping", -1.0); } else{ shader->SetUniform("displacementMapping", 1.0); shader->SetUniform("normalMapping", -1.0); shader->SetUniform("colorMapping", -1.0); shader->SetUniform("TesselationDepth", TesselationDepth); } if(gManualTriangleMesh) gManualTriangleMesh->Draw(smooth); if(gTriangleMeshes.size()) { for(unsigned int id=0;id<gTriangleMeshes.size();id++) { gTriangleMeshes[id]->Draw(smooth); } } } shader->UnBind(); glActiveTexture(GL_TEXTURE0); surfaceNormTex->UnBind(); glActiveTexture(GL_TEXTURE1); surfaceDisplaceTex->UnBind(); glutSwapBuffers(); }
// // Display the output image from our vertex and fragment shaders // void DisplayCallback() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); SetUpAndRight(); gluLookAt(mPosition.x,mPosition.y,mPosition.z, mLookAt.x,mLookAt.y,mLookAt.z, mUp.x,mUp.y,mUp.z); glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); //This line commented doesnt change the image glLightfv(GL_LIGHT1, GL_POSITION, lightPosition1);//added by Helen // Texture 0: surface normal map glActiveTexture(GL_TEXTURE0); surfaceNormTex->Bind(); // Texture 1: surface normal map glActiveTexture(GL_TEXTURE1); surfaceDisplaceTex->Bind(); // Bind the textures we've loaded into openGl to // the variable names we specify in the fragment // shader. shader->SetTexture("normalTex", 0); shader->SetTexture("displacementTex", 1); shader->SetTexture("colorTex", 2); // Invoke the shader. Now OpenGL will call our // shader programs on anything we draw. shader->Bind(); //if(mesh) //{ shader->SetUniform("normalMapping", -1.0); shader->SetUniform("displacementMapping", -1.0); shader->SetUniform("colorMapping", 1.0); //Manually commented out by John //glPushMatrix(); // Pay attention to scale //STVector3 size_vector=gBoundingBox.second-gBoundingBox.first; //float maxSize=(std::max)((std::max)(size_vector.x,size_vector.y),size_vector.z); //glScalef(3.0f/maxSize,3.0f/maxSize,3.0f/maxSize); //glTranslatef(-gMassCenter.x,-gMassCenter.y,-gMassCenter.z); //for(unsigned int id=0;id<gTriangleMeshes.size();id++) { // gTriangleMeshes[id]->Draw(smooth); //} //glTranslatef(0.0f, 15.0f, -1.0f); glTranslatef(0.0f, -20.0f, -60.0f); glPushMatrix(); //This is our "center" gTriangleMeshes[2]->Draw(smooth); gTriangleMeshes[3]->Draw(smooth); gTriangleMeshes[7]->Draw(smooth); glPopMatrix(); glPushMatrix(); glTranslatef(5.0f, 13.0f, 50.0f); glRotatef(180.0f, 0.0f, 1.0f, 0.0f); gTriangleMeshes[2]->Draw(smooth); gTriangleMeshes[10]->Draw(smooth); gTriangleMeshes[7]->Draw(smooth); glPopMatrix(); glPushMatrix(); glTranslatef(-4.0f, 5.0f, 30.0f); glRotatef(90.0f, 0.0f, 1.0f, 0.0f); gTriangleMeshes[2]->Draw(smooth); gTriangleMeshes[6]->Draw(smooth); gTriangleMeshes[7]->Draw(smooth); glPopMatrix(); glPushMatrix(); glTranslatef(-25.0f, -25.0f, -70.0f); glRotatef(90.0f, 0.0f, 1.0f, 0.0f); gTriangleMeshes[2]->Draw(smooth); gTriangleMeshes[10]->Draw(smooth); gTriangleMeshes[7]->Draw(smooth); glPopMatrix(); glPushMatrix(); glTranslatef(-38.0f, -30.0f, -120.0f); glRotatef(90.0f, 0.0f, 1.0f, 0.0f); gTriangleMeshes[2]->Draw(smooth); gTriangleMeshes[3]->Draw(smooth); gTriangleMeshes[7]->Draw(smooth); glPopMatrix(); glPushMatrix(); glScalef(30.0f, 30.0f, 3.0f); glTranslatef(0.0f, 0.0f, -90.0f); glRotatef(90, 1, 0, 0); gTriangleMeshes[0]->Draw(smooth); glPopMatrix(); glPushMatrix(); glScalef(10.0f, 8.0f, 2.0f); glTranslatef(-3.0f, -3.0f, 0.0f); gTriangleMeshes[1]->Draw(smooth); glPopMatrix(); //} /*else { if(normalMapping){ shader->SetUniform("displacementMapping", -1.0); shader->SetUniform("normalMapping", 1.0); shader->SetUniform("colorMapping", -1.0); } else{ shader->SetUniform("displacementMapping", 1.0); shader->SetUniform("normalMapping", -1.0); shader->SetUniform("colorMapping", -1.0); shader->SetUniform("TesselationDepth", TesselationDepth); } gManualTriangleMesh->Draw(smooth); }*/ //gManualTriangleMesh->Draw(smooth); shader->UnBind(); glActiveTexture(GL_TEXTURE0); surfaceNormTex->UnBind(); glActiveTexture(GL_TEXTURE1); surfaceDisplaceTex->UnBind(); glutSwapBuffers(); }