示例#1
0
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();
}
示例#2
0
//
// 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();
}
示例#3
0
//
// 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();
}