阅读背景:

OpenGL蓝宝书源码学习(七)第四章——ModelViewProjection.cpp_perseverancep的博客

来源:互联网 

模型视图投影源码示例

// ModelviewProjection.cpp
// OpenGL SuperBible
// Demonstrates OpenGL the ModelviewProjection matrix
// Program by Richard S. Wright Jr.
#include 
  
   	// OpenGL toolkit
#include 
   
    
#include 
    
     
#include 
     
      
#include 
      
        #include 
       
         #include 
        
          #include 
         
           #ifdef __APPLE__ #include 
          
            #else #define FREEGLUT_STATIC #include 
           
             #endif // Global view frustum class GLFrustum viewFrustum; // The shader manager GLShaderManager shaderManager; // The torus GLTriangleBatch torusBatch; // Set up the viewport and the projection matrix void ChangeSize(int w, int h) { // Prevent a divide by zero if(h == 0) h = 1; // Set Viewport to window dimensions glViewport(0, 0, w, h); viewFrustum.SetPerspective(35.0f, float(w)/float(h), 1.0f, 1000.0f); } // Called to draw scene void RenderScene(void) { // Set up time based animation static CStopWatch rotTimer; float yRot = rotTimer.GetElapsedSeconds() * 60.0f; // Clear the window and the depth buffer glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Matrix Variables M3DMatrix44f mTranslate, mRotate, mModelview, mModelViewProjection; // Create a translation matrix to move the torus back and into sight m3dTranslationMatrix44(mTranslate, 0.0f, 0.0f, -2.5f); // Create a rotation matrix based on the current value of yRot m3dRotationMatrix44(mRotate, m3dDegToRad(yRot), 0.0f, 1.0f, 0.0f); // Add the rotation to the translation, store the result in mModelView m3dMatrixMultiply44(mModelview, mTranslate, mRotate); // Add the modelview matrix to the projection matrix, // the final matrix is the ModelViewProjection matrix. m3dMatrixMultiply44(mModelViewProjection, viewFrustum.GetProjectionMatrix(),mModelview); // Pass this completed matrix to the shader, and render the torus GLfloat vBlack[] = { 0.0f, 0.0f, 0.0f, 1.0f }; shaderManager.UseStockShader(GLT_SHADER_FLAT, mModelViewProjection, vBlack); torusBatch.Draw(); // Swap buffers, and immediately refresh glutSwapBuffers(); glutPostRedisplay(); } // This function does any needed initialization on the rendering // context. void SetupRC() { // Black background glClearColor(0.8f, 0.8f, 0.8f, 1.0f ); glEnable(GL_DEPTH_TEST); shaderManager.InitializeStockShaders(); // This makes a torus gltMakeTorus(torusBatch, 0.4f, 0.15f, 30, 30); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); } /// // Main entry point for GLUT based programs int main(int argc, char* argv[]) { gltSetWorkingDirectory(argv[0]); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL); glutInitWindowSize(800, 600); glutCreateWindow("ModelViewProjection Example"); glutReshapeFunc(ChangeSize); glutDisplayFunc(RenderScene); GLenum err = glewInit(); if (GLEW_OK != err) { fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err)); return 1; } SetupRC(); glutMainLoop(); return 0; } 
           
          
         
        
       
      
     
    
   
  // ModelviewProjection.cpp
// O



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: