几种坐标系的简介及关系
定点坐标(对象坐标系)→ MModelView → 眼坐标系 → MProjection → 裁剪坐标系 → w分离 → 标准化设备坐标系 → 视口转换 → 窗口坐标系
1.对象的坐标系(Object Coordinates)
1.1 对象的本地坐标,感觉这里应该是用户坐标系(UCS)而非世界坐标系;
1.2 几何变换操作(transformation),如:glRotate(),glTranslatef(),glScalef(),就是在此坐标系上进行的。
2.眼坐标系(Eye Coordinates)
2.1 Ze轴为视点指向原点,XeYe平面保持当前平面(即屏幕)的一个左手系坐标;
2.2 OpenGL中用GL_MODELVIEW将对象对象空间(Object Space)变换到视觉空间(eye space)——物体在眼坐标中的位置由GL_MODELVIEW矩阵和Object 坐标相乘所得;
2.3 GL_MODELVIEW包含了2个矩阵:Viewing(视角) Matrix 和 Modeling(模型) Matrix ——MModelView=MView • MModel
[xeye yeye zeye]T = MModelView • [xobj yobj zobj]T = MView • MModel • [xobj yobj zobj]T
理解为物体本地坐标系经MModel变换为世界坐标系,再经由MView转变为眼坐标系
2.4 OpenGL里没有Camera Matrix;所以要模拟Camera 或者View变换,需要将场景通过View反变换
2.5 这里还有一个标准向量(Normal vectors)的概念没有弄太懂
3. 裁剪坐标系(Clip Coordinates)
3.1 从名字上看裁剪坐标系应该定义了物体在投影平面上可视部分,再看看
3.2 由视觉坐标系和GL_PROJECTION矩阵相乘得到
[xcli ycli zcli]T = MProjection • [xeye yeye zeye]T
4. 标准化设备坐标系(Normalizied Device Coordinates——NDC)
这部分不太懂
5.窗口坐标系(Window Coordinates)
5.1 也叫屏幕坐标系,原点在左上角——auxInitPosition就是初始化一个窗口
5.2 另外还有一个概念:视口(Viewport),即在窗口中用于显示图像的那部分——glViewport定义了视口
5.3 通过NDC缩小和平移(以便适应屏幕的透视)得到
对于glViewPort(x,y,w,h);和glDepthRange(n,f);
[xw yw zw]T = [(w / 2 * xndc + x + w /2) (h / 2 * yndc + y + h /2) ((f - n) / 2 * zndc + (f + n) / 2)]T
这里其实就是一个单纯的线性映射关系
-1 → x; 1 → x + w
-1 → y; 1 → y + h
-1 → n; 1 → f
浙公网安备 33010602011771号