刚接触OpenGL的朋友们,可能对坐标变换不太理解. 本人不才, 接触了三维一段时间后,冒昧说说我的理解, 如有偏差, 请指正.
一: 首先说说什么是世界坐标.
每个三维模型都有自己的局部坐标, 这个大家都好理解, 这个称作模型坐标, 坐标原点可以是模型的中心. 但是一个场景中如果有许多个三维模型, 那要想标准其每个位置,
就需要一个统一的坐标来标定, 那么这个坐标就叫世界坐标. 这都好理解对吧, 下面说点难的.
二: 再说说世界坐标怎么转换到摄像机坐标.
我们知道, 观察三维模型要用一个摄像机. 模型需要在摄像机里成像, 也就需要知道模型在摄像机里映射的位置. 这也就涉及到世界坐标怎么转换到摄像机坐标的问题.
要想理解这个问题, 得先理解摄像机, 生活中, 摄像机往那一放, 就确定了一个位置; 摄像机的朝向也就决定了要拍摄哪个方向的景物; 并且摄像机可以横着拍, 也可以竖着拍,
这个横竖也决定了景物的在底片上的成像是正的还是倒立的; 好, 我们回头一看, 决定摄像机的有三个量, eye(位置), target(所拍摄景物的方位), up(在底片上成像的倒正).
好, 摄像机的三个量能否推出一个摄像机的坐标系呢, 答案是肯定的, 也就是摄像机所在的标架(标架,坐标系推导请自行查看相关书籍吧); 现在摄像机的坐标系有了, 那么, 能否把世界坐标转换摄像机坐标的问题看成是, 世界坐标系到摄像机坐标系的转换呢. 答案是可以的, 分两步走, 先平移, 再旋转. 好, 经过这样两步操作. 两者坐标转换轻松完成了.
三: 摄像机坐标投影到设备坐标
最终三维模型要显示在屏幕上, 投影为设备屏幕坐标, 投影主要有两种, 正交投影, 透视投影, 我觉得理解投影的关键点, 在于理解设备屏幕坐标, 所谓的往哪投影. 常听说设备坐标
归一化, 什么是归一化, 说白了就是往简单了整, 设备坐标可以理解成, 中心在原点, 长度为1的立方体. 三维投影就是往这个区域投. 所以知道了投哪, 怎么投那就很好办了, 中学几何知识, 再套上个矩阵, 就出来了.
四: 设备坐标到视口坐标
视口可以看成是 显示设备屏幕的某一个区域, 并且, 会把图形投影到以视口中心为原点的区域上, 理解这一点, 这个坐标转换就不难理解了.