OpenGL中的坐标系和变换

发表于2017-12-15
评论0 3k浏览
本文为学习计算机图形学及利用OpenGL开发图形程序做数学准备工作,下面就给大家介绍下OpenGL里的坐标系与坐标转换,帮助大家去了解最基本的知识点。

坐标系

模型坐标

模型坐标是以物体某一点为原点而建立的坐标系,该坐标系仅对该物体适用,用来简化对物体各部分坐标的描述。物体放到场景中时,各部分经历的坐标变换相同,相对位置不变,所以可视为一个整体,与人类的思维习惯一致。

世界坐标

世界坐标系以屏幕中心为原点(0,0,0)。你面对屏幕,你的右边是x正轴,上面是y正轴,屏幕指向你的为z正轴。长度单位这样来定: 窗口范围按此单位恰好是(-1,-1)到(1,1)。

相机坐标

相机坐标以视点为原点,以视线的方向为Z+轴正方向的坐标系中的方向。OpenGL管道会将世界坐标先变换到眼坐标,然后进行裁剪,只有在视线范围(视见体)之内的场景才会进入下一阶段的计算。

投影坐标

OpenGL的重要功能之一就是将三维的世界坐标经过变换、投影等计算,最终算出它在显示设备上对应的位置,这个位置就称为设备坐标。在屏幕、打印机等设备上的坐标是二维坐标。OpenGL可以只使用设备的一部分进行绘制,这个部分称为视区或视口(viewport)。投影得到的是视区内的坐标就是投影坐标,从投影坐标到设备坐标的计算过程就是设备变换了。

屏幕坐标

显示设备屏幕的坐标,坐标角为远点。

变换

从模型坐标到屏幕大致要经过如下流程:

世界坐标观察变换[模型变换]相机坐标投影变换投影坐标视口变换屏幕坐标yesyesyesyes

观察变换

用来定位和瞄准相机的位置和方向。默认情况下相机的位置为(0, 0, 0),指向z-。 
可以平移和旋转,必须在模型变换之前。

模型变换

模型自身的变换,支持如下三种: 
移动: 使模型沿一个指定的向量进行移动; 
旋转: 使模型沿一个指定的向量进行旋转; 
缩放: 通过指定的向量来放大或者缩小模型尺寸。

模型变换的顺序会影响变换的结果。

投影变换

确定需要显示的区域,在观察变换和模型变换之后执行,有两类: 
透视投影:近大远小,于真实世界中看到的一样; 
正交投影:显示物体的真实尺寸。

视口变换

根据视口和屏幕大小来确定最终图像的缩放。

相关函数: 
平移:glTranslate 
旋转:glRotate 
缩放:glScale

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引