opengl三维观察

本文介绍了OpenGL中的三维观察原理,包括相机变换、正射投影和透视投影的使用,以及深度测试和光源设置的重要性。通过示例说明了如何调整相机和物体位置以实现预期的视觉效果。
摘要由CSDN通过智能技术生成

1.      相机

产生目标场景视图的变换过程类似于用照相机进行拍照。用照相机进行拍照的步骤大致如下:

·把照相机固定在三脚架上,并让它对准场景(视图变换);

·对场景进行安排,使各个物体在照片中的位置是我们所希望的(模型变换)

·选择照相机镜头,并调整放大倍数(投影变换)

·确定最终照片的大小(视口变换)

完成这些步骤之后,就可以进行拍照(或者绘制场景)了。

 

2.      投影方式

openGL提供了两种投影方式:正射投影和透视投影。

a)      正射投影(Orthographic Projection)

又叫平行投影。这种投影的视景体是一个矩形的平行管道,因此无论物体距离相机多远,投影之后物体的大小尺寸不变。这也正是为什么在正射投影模式下前后移动茶壶看不出来。此种模式下,不需要设定照相机位置、方向以及视点的位置,也就是说不需要gluLookAt函数。

正射投影函数void glOrtho(GLdoubleleft, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdoublefar)创建一个平行视景体,实际上这个函数的操作是创建一个正射投影矩阵,并且用这个矩阵乘以当前矩阵。其中近裁剪平面是一个矩阵,矩形左下角点三维空间坐标是(left, bottom,-near),右上角点(right, top,-near);远裁剪平面也是一个矩形,左下角点空间坐标是(left, bottom,far),右上角点是(right, top,-far)。所有的near和far值同时为正或者同时为负,物体在视点后面时far和near都为正值。

b)      透视投影(Perspective Projection)

透视投影符合人的心理习惯,即离视点近的物体大,离视点远的物体小,远到极点即为消失,成为灭点。它的视景体类似于一个顶部和底部被切除掉的棱锥,也就是棱台。

透视投影函数voidgluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar),创建一个对称透视视景体。其操作是创建一个对称的透视投影矩阵,并且用这个矩阵乘以当前矩阵。参数fovy定义视野在X-Z平面的角度,范围是[0.0,180.0];参数aspect是投影平面宽度与高度的比率;参数zNear和Far分别是远近裁剪面到眼睛的距离,它们总为正值。

 

3.      深度测试

深度其实就是像素点在3D世界中距离摄像机的距离,深度缓存中存储着每个像素点的深度之,深度值越大,则离摄像机越远。

在不使用深度测试的时候,如果我们先绘制一个距离较近的物体,再绘制距离较远的物体,则距离远的物体因为后绘制,会把距离近的物体覆盖掉,这不符合现实世界表现。而有了深度缓冲以后,绘制物体的顺序就不那么重要了,都能够按照远近顺序进行现实。

启用深度测试的代码如下:

glEnable(GL_DEPTH_TEST);//启用深度测试,根据坐标远近自动隐藏被遮住的物体

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值