几种坐标系的简介及关系

定点坐标(对象坐标系)→ 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]= 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);

      [xyw 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

posted on 2013-12-23 21:00  金融挨踢狗  阅读(2108)  评论(0)    收藏  举报