[OpenGL]OpenGL几何变换的秘密--投影(透视投影、平行投影、正投影)

1.透视投影

如下a图,透视投影是从某个投影点将物体投影到单一投影面上所得到的图形,透视投影符合人们心理习惯,即离视点近的物体大,离视点远的物体小,远到极点即为消失。在透视投影中,同一灯光下,改变物体的位置和方向,其投影也跟着发生变化

2.平行投影

如下b图,平行投影是在一束平行光线照射下形成的投影。在平行投影中,同一时刻改变物体的方向和位置,其投影也跟着发生变化;投影大小与物体和投影面之间的距离无关。度量性较好。
[OpenGL]OpenGL几何变换的秘密--投影(透视投影、平行投影、正投影)_第1张图片

3.正投影

正投影是平行投影的一种特殊形式,投影方向和投影面垂直,正投影法的特点是,能准确、完整地表达出形体的形状和结构,且作图简便,度量性较好

投影变换:给定视点、视线方向,计算出当前顶点的投影点的坐标

在OpenGL中有三个函数glFrustum(),gluPerspective(),glOrtho()

1.void glFrustum(GLdouble left,GLdouble Right,GLdouble bottom, GLdouble top, GLdouble near, GLdouble far)

创建一个透视型的视椎体,其操作是创建一个透视投影的矩阵,并且用这个矩阵乘以当前矩阵。
这个函数的参数之定义,只定义近才见面的左下角点和右上角点的三维空间坐标,即(left,bottom,-near)和(right,top,-near),最后一个参数far是裁减面的,离视点的距离值,其左下角和右上角空间坐标由函数根据透视投影原理自动生成,near和far为正值,即必须>0
[OpenGL]OpenGL几何变换的秘密--投影(透视投影、平行投影、正投影)_第2张图片

2.void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar);

创建一个对称的透视型视椎体,其操作是创建一个对称的透视投影矩阵。参数fovy定义视野在Y-Z平面的角度,范围是[0.0, 180.0],参数aspect是投影平面宽度与高度的比例;参数near和far分别是近远裁剪面到视点的距离,沿Z负轴,总为正值
[OpenGL]OpenGL几何变换的秘密--投影(透视投影、平行投影、正投影)_第3张图片
总结:以上两个函数视点都在原点,视线沿z轴指向负方向
void mydisplay()
{

glMatrixMode(GL_PROJECTION);
LoadIdentity();
Frustum(left,right,bottom,top,near,far)

}

3.glOrtho(GLdobule left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far)

六个参数,前面来给个是x轴最小坐标和最大坐标,中间两个是y轴,最后两个是z轴
这个函数创建的是一个平行视景体,就是一个长方体区域,实际上是创建一个正射投影矩阵,并且用这个矩阵乘以当前矩阵,所有的near和far值同时为正,或者同时为负u,值不能相同,如果没有其他变换,正射投影的方向平行于z轴,且视点朝向z负轴,这意味着物体在视点前面时far和near都是负值,在视点后面时far和near都为正值,只有在视景体里面的物体才能显示出来
[OpenGL]OpenGL几何变换的秘密--投影(透视投影、平行投影、正投影)_第4张图片

你可能感兴趣的:([OpenGL])