三维观察与坐标变换

来源:互联网 发布:海鸥手表知乎 编辑:程序博客网 时间:2024/05/01 22:35
三维观察与坐标变换
三维景物视图的计算机生成过程类似于用相机对物体的拍照过程。我们需要对相机定位,并决定镜头的方向。按下快门时,相当于用镜头作为窗口对景物进行裁剪。
在计算机图形学中,我们可以在世界坐标系中通过建立观察坐标系来实现对三维物体的观察。(见下图1)
一,建立观察坐标系,将世界坐标系中三维物体的坐标转化为观察坐标。
二,在观察坐标系中建立观察平面,将观察坐标再投影到观察平面上。

Yw
Xw
Zw
Xv
Zv
Yv

                图1   世界坐标系与观察坐标系
 

CY
 

 
 
 


X
Y
。point
CX
图2   Window GDI 下坐标系

 
 

(0,0)
(1,0)
(0,1)
(-1,0)
(0,-1)
图3  OpenGL 下标准设备坐标系

 
 

后截面
前截面
观察窗口
 
h
 

图 4 透视投影的有限观察空间
假设我们想要实现用鼠标左键点击画点:
在窗口中按下鼠标左键,发出WM_LButtonDown消息,void OnLButtonDown(UINT nFlags, CPoint point)函数处理该消息,其中point是相对于图2中坐标系,要想在屏幕中正确的显示,必须将该点坐标值转化成OpenGL下标准的设备坐标。
第一步,将GDI下坐标转化为观察坐标下坐标值。假设建立的是透视投影观察坐标系
       ::gluPerspective(90.0f, aspect_ratio, .01f, 100.0f);
       X_ratio = point.x / CX;
       Y_ratio = point.y / CY;
 
       h代表该点在观察坐标系中z轴的大小,也即深度信息。
       用h和视角可以求出该点所在截面的长和宽。
       根据X_ratio和Y_ratio求出该点在截面中的坐标值
第二步,由OpenGL本身将截面中坐标投影到标准设备坐标。
 
      
原创粉丝点击