美文网首页
OpenGL:正投影和透视投影

OpenGL:正投影和透视投影

作者: Neal_f | 来源:发表于2018-03-28 15:33 被阅读0次

    OpenGL:正投影和透视投影

    1. 正投影

    正射投影,又叫平行投影。这种投影的视景体是一个矩形的平行管道,也就是一个长方体,如图所示。正射投影的最大一个特点是无论物体距离相机多远,投影后的物体大小尺寸不变。这种投影通常用在建筑蓝图绘制和计算机辅助设计等平面图形方面,这些行业要求投影后的物体尺寸及相互间的角度不变,以便施工或制造时物体比例大小正确。

    GLFrustum::SetOrthographic(GLfloat xMin,GLfloat xMax,GLfloat yMin,GLfloat yMax,GLfloat zMin,GLfloat zMax);

    2.透视投影
    透视投影符合人们心理习惯,即离视点近的物体大,离视点远的物体小,远到极点即为消失,成为灭点。它的视景体类似于一个顶部和底部都被切除掉的棱椎,也就是棱台。这个投影通常用于动画、视觉仿真以及其它许多具有真实性反映的方面

    GLFrustum::SetPerspective(float fFov,float fAspect,float fNear,float fFar);

    1. 示例:
    void ChangeSize(int w, int h)
    {
    
        if(h == 0) {
            h = 1;
        }
        glViewport(0, 0, w, h);
        //设置透视投影
        viewFrustum.SetPerspective(35.0f, float(w)/float(h), 1.0f, 1000.0f);
        projectionMatrix.LoadMatrix(viewFrustum.GetProjectionMatrix());
        //使用变换管线来管理矩阵堆栈
        transformPipeline.SetMatrixStacks(modelViewMatix, projectionMatrix);
    
    }
    
    
    void RenderScene(void)
    {
    
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glEnable(GL_DEPTH_TEST);
        modelViewMatix.PushMatrix(viewFrame);
    
        GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f };
        GLfloat vGray[] = { 0.75f, 0.75f, 0.75f, 1.0f };
    
     shaderManager.UseStockShader(GLT_SHADER_DEFAULT_LIGHT,transformPipeline.GetModelViewMatrix(),transformPipeline.GetProjectionMatrix(),vRed);
        tubeBatch.Draw();
    
    shaderManager.UseStockShader(GLT_SHADER_DEFAULT_LIGHT,transformPipeline.GetModelViewMatrix(),transformPipeline.GetProjectionMatrix(),vGray);
        innerBatch.Draw();
    
        modelViewMatix.PopMatrix();
        glutSwapBuffers();
    
    }
    

    相关文章

      网友评论

          本文标题:OpenGL:正投影和透视投影

          本文链接:https://www.haomeiwen.com/subject/kptucftx.html