OpenGL入门(四)-- OpenGL坐标系与坐标变换

大哥大姐们哪位知道,OpenGL入门(四)-- OpenGL坐标系与坐标变换
最新回答
秋桜

2024-05-03 17:47:41

上一篇文章《 OpenGL入门(三)-- OpenGL坐标系解析与坐标变换 》,我们大概了解了OpenGL坐标系的一些常用概念认知,现在,我们继续深入介绍OpenGL坐标系的相关知识与坐标系的几何变换,让我们继续挖坑(入坑)吧。本文内容来自于:

为啥要转换到眼坐标系呢?
可以这样理解,通过前面的MODEVIEW变换,这个世界坐标系中的场景已经绘制好了。这时候我们还不能看到场景哦,因为我们的观察位置还没定呢,而且如果我们眼睛(照相机)的位置不同,那么观察物体的角度则不同,那看到的场景的样子肯定也不同,所以要有这一步,把场景与我们的观察位置对应起来。
默认情况下,眼坐标系与世界坐标系也是重合的。使用函数 gluLookAt()则可以指定眼睛(相机)的位置和眼睛看向的方向。该函数的原型如下:

函数参数中:

这个GL_PROJECTION矩阵定义了视景体( viewing volume),即确定哪些物体位于视野之内,位于视景体外的对象会被剪裁掉。除了视景体,投影变换还定义了顶点是如何投影到屏幕上的,是透视投影(perspective projection)还是正交投影(orthographic projection)。
透视投影似于日常生活看到的场景,远处物体看起来小,近处看起来大。使用透视投影函数glFrustum()和gluPerspective().

总的来说,OpenGL中的坐标处理过程包括模型变换、视变换、投影变换、视口变换等过程,三维物体的显示过程(OpenGL坐标变换全局过程)如下:

OpenGL中采用方式2的观点来解释视变换。再举一个例子,比如,一个物体中心位于原点,照相机也位于初始位置原点,方向指向-Z轴。为了对物体的+Z面成像,那么必须将照相机从原点移走,如果照相机仍然指向-Z轴,需要将照相机沿着+Z轴方向后退。通过在世界坐标系中指定相机的位置,指向的目标位置,以及viewUp向量来构造一个相机坐标系,通过视变换矩阵将物体坐标由世界坐标系转换到相机坐标系。

--

投影方式决定以何种方式成像,投影方式有很多种,OpenGL中主要使用两种方式,即透视投影(perspective projection)和正交投影( orthographic projection)。

视变换是将规范化设备坐标(NDC)转换为屏幕坐标的过程,如下图所示:

最后我们来看一下坐标变换过程从坐标计算角度的示意图:

--
总结:从上面的内容,我们可以了解了OpenGL坐标系和坐标变换的一些原理和关系,篇幅有点长,一定要坚持下去。下一篇文章尽请期待。。。

--

系列连载