OpenGL 入门三:变换原理简介
1、背景
我们现实世界是三维的,但是展示到屏幕上只能是二维的,我们要用二维表示三维就必须解决一系列问题,涉及到多个坐标的转换,比如物体的坐标,观察者相机的坐标,渲染最终展示到屏幕的坐标等等。
在数学坐标系中(笛卡尔坐标系)原点在左下角,向上是 y 轴正方向,向右是 x 轴正方向;屏幕坐标系中横轴是 x 轴,纵轴是 y 轴,x 轴向右是正方向,y 轴向下是正方向,原点在左上角。
在 OpenGL3D 坐标系中使用笛卡尔坐标系来表示空间坐标位置:左下角是原点,向右和向上是正值,同时引入了第三个量就是 z 轴,z 轴方向指向我们自己,下面找的这张图就是 OpenGL 笛卡尔坐标系:
我们看看 OpenGL 中我们用到几种坐标系和空间:
对象空间,即现实世界的物体空间,它相对于每个对象自身;
相机/眼睛,空间是针对视点;
投影、剪裁空间是平面的屏幕或者视口;
切线空间,用于更高级的特效,比如如凹凸映射等;
归一化设备坐标(ndc),表示从-1 到 1 归一化的 xyz 值。
2、3D 到 2D 过程
3D 到 2D 涉及到投影的问题,我们拍照就是典型的 3 维到 2 维的转换。投影分透视投影和正交投影,我们日常生活中都是基于透视投影,会有近大远小,还会有遮挡。相机拍照的过程涉及到一个视景体:
定义视景体非常简单通过定义一个几何体就可以了,空间中,任何平截头体内的物体都能够在屏幕上找到相应的位置,只要没有被其他物体覆盖就可以展示。Frustum 用于指定 field-of-view(FOV),比如相机的广角与长焦镜头,角度越大看到的景象越多,成像就越小.
上一篇绘制三角形我们使用 gl.glMatrixMode(GL_MODELVIEW)方法加载视图模型矩阵,我们还可以对模型视图矩阵进行平移和旋转操作:
3、变换数学原理
3.1 平移
平移公式:
可以通过矩阵来实现:
3.2 旋转
旋转公式:
矩阵表示:
传统上逆时针旋转是正值,顺时针旋转是负值
3.2 缩放
缩放公式:
矩阵表示:
注意:进行变换时顺序很重要,比如进行平移和旋转时,顺序不一样得到的结果也不一样,一般是先旋转再平移.
4、总结
本文介绍了 OpenGL 相关的空间和坐标体系,以及从 3 维到 2 维的投影过程及成像原理,最后介绍了平移、缩放、旋转三种变换的数学及矩阵表示。
版权声明: 本文为 InfoQ 作者【轻口味】的原创文章。
原文链接:【http://xie.infoq.cn/article/b304ced117e287e4de77ea5c6】。文章转载请联系作者。
评论