OpenGL透视投影函数gluPerspective的参数含义之解析(图示)

首先解释一下透视投影:
**透视投影属于中心投影。**透视投影图简称为透视图或透视,它是从某个投射中心将物体投射到单一投影面上所得到的图形。透视图与人们观看物体时所产生的视觉效果非常接近,所以它能更加生动形象地表现建筑外貌及内部装饰。在已有实景实物的情况下,通过拍照或摄像即能得到透视图;对于尚在设计、规划中的建筑物则作图(手工或计算机)的方法才能画出透视图。透视图以渲染、配景,使之成为形象逼真的效果图。由于是中心投影,因此平行投影中的一些重要性质(如平行性、定比性等)和作图规律,在这里已不适用。
例如:
在这里插入图片描述
在这里插入图片描述

透视投影函数gluPerspective的参数含义之解析:

gluPerspective这个函数指定了观察的视景体(frustum为锥台的意思,通常译为视景体)在世界坐标系中的具体大小,一般而言,其中的参数aspect应该与窗口的宽高比大小相同。比如说,aspect=2.0表示在观察者的角度中物体的宽度是高度的两倍,在视口中宽度也是高度的两倍,这样显示出的物体才不会被扭曲。

 

gluPerspective
NAME(函数名称)
gluPerspective -- set up a perspective projection matrix (设置透视投影矩阵)
C SPECIFICATION(C语言实现示例)
void gluPerspective(
GLdouble fovy, //角度
GLdouble aspect,//视景体的宽高比
GLdouble zNear,//沿z轴方向的两裁面之间的距离的近处
GLdouble zFar //沿z轴方向的两裁面之间的距离的远处
)
PARAMETERS(参数含义)
fovy
Specifies the field of view angle, in degrees, in the y direction.
指定视景体的视野的角度,以度数为单位,y轴的上下方向
aspect
Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
指定你的视景体的宽高比(x 平面上)
zNear
Specifies the distance from the viewer to the near clipping plane (always positive).
指定观察者到视景体的最近的裁剪面的距离(必须为正数)
zFar
Specifies the distance from the viewer to the far clipping plane (always positive).
与上面的参数相反,这个指定观察者到视景体的最远的裁剪面的距离(必须为正数)
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的OpenGL透视投影示例代码: ```c #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> void init(void) { glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT); } void display(void) { glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, 1.0, 1.0, 20.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glBegin(GL_TRIANGLES); glColor3f(1.0, 0.0, 0.0); glVertex3f(-2.0, -2.0, 0.0); glColor3f(0.0, 1.0, 0.0); glVertex3f(2.0, -2.0, 0.0); glColor3f(0.0, 0.0, 1.0); glVertex3f(0.0, 2.0, 0.0); glEnd(); glFlush(); } void reshape(int w, int h) { glViewport(0, 0, (GLsizei)w, (GLsizei)h); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(250, 250); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return 0; } ``` 这个示例程序使用了GLUT库来创建一个窗口,并在窗口中绘制了一个三角形。在绘制之前,它先通过glMatrixMode函数将当前矩阵模式设置为GL_PROJECTION,然后将透视投影矩阵加载到当前矩阵中。透视投影矩阵由gluPerspective函数生成,它需要四个参数:视角、宽高比、近平面距离和远平面距离。在本例中,视角为60度,宽高比为1:1,近平面距离为1,远平面距离为20。接着,程序将矩阵模式切换回GL_MODELVIEW,并通过gluLookAt函数设置了相机的位置和方向。最后,程序绘制了一个三角形,使用了三种不同的颜色。在绘制完成后,调用glFlush函数将绘制结果刷新到屏幕上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值