三维坐标变换.docx
- 文档编号:13857922
- 上传时间:2023-06-18
- 格式:DOCX
- 页数:11
- 大小:200.91KB
三维坐标变换.docx
《三维坐标变换.docx》由会员分享,可在线阅读,更多相关《三维坐标变换.docx(11页珍藏版)》请在冰点文库上搜索。
三维坐标变换
第二章三维观察
1.三维观察坐标系
1.1观察坐标系
为了在不同的距离和角度上观察物体,需要在用户坐标系下建
立观察坐标系Xv,yv,Zv(通常是右手坐标系)也称(ViewReferenee
Coordinate)。
如下图所示,其中,点Po(x。
y。
z。
)为观察参考点(View
RefereneePoin),它是观察坐标系的原点。
图1.1用户坐标系与观察坐标系
Palne),有时也称投影平面(projeetionplane)。
图1.2沿Zv轴的观察平面
1.2观察坐标系的建立
观察坐标系的建立如下图所示:
图1.3法矢量的定义
观察平面的方向及Zv轴可以定义为观察平面(viewplane)N
点指定法矢量N,即Zv轴的正向。
定义投影后的矢量为矢量V。
Xz轴的正向。
的指定视图投影到显示设备表面上的过程来处理对象的描述。
2.世界坐标系
在现实世界中,所有的物体都具有三维特征,但是计算机本身
只能处理数字,显示二维的图形,将三维物体和二维数据联系到一起的唯一纽带就是坐标。
为了使被显示的物体数字化,要在被显示的物体所在的空间中定义一个坐标系。
该坐标系的长度单位和坐标轴的方向要适合被显示物体的描述。
该坐标系被称为世界坐标系,世界坐标系是固定不变的。
OpenGL中世界坐标用来描述场景的坐标,Z+轴垂直屏幕向外,
X+从左到右,Y+轴从下到上。
世界坐标系是右手笛卡尔坐标系统。
我们用这个坐标系来描述物体及光源的位置。
世界坐标系以屏幕中心
为原点(0,0,0),长度单位这样来定:
窗口范围按此单位恰好是(-1,-1)到(1,1)。
3.世界坐标系到观察坐标系
在三维观察流水线中,场景构造完成后的第一步工作是将对象描述变换到观察坐标系中。
对象描述的转换等价于将观察坐标系叠加到世界坐标系的一连串变换。
1.平移观察坐标原点到世界坐标系原点。
2.进行旋转,分别让Xview、yview和Zview轴对应到世界坐标的Xw、yw、Zw轴。
如果指定世界坐标点P=(xo,yo,zo)为观察坐标原点,则将观察坐标
系原点移到世界坐标系原点的变换是
将观察坐标系叠加到世界坐标系的组合旋转变换矩阵使用单位
向量uv和n来形成。
该变换矩阵为
'Ux
Uy
Uz
u
Vx
Vy
Vz
0
nx
ny
nz
0
L0
0
0
1
R=
这里,矩阵R的元素是uvn轴向量的分量。
将前面的平移和旋转矩阵乘起来获得坐标变换矩阵:
uz-up。
Vz-VPonz-nPo
01
每一轴上的负投影(观察坐标系中的负分量Po)。
这些矩阵元素的取值
矩阵将世界坐标系中的对象描述变换到观察坐标系。
4.投影变换
对象描述变换到观察坐标后,下一阶段是将其投影到观察平面
上。
投影变换就是把三维立体(或物体)投射到投影面上得到二维平面图形。
平面几何投影主要指平行投影、透视投影以及通过这些投影变换而得到的三维立体的常用平面图形:
三视图、轴视图以及透视图。
图形软件一般都支持平行投影和透视投影两种方式。
在平行投影中(Parallelprojection)中,坐标位置沿平行线变换到观
察平面上。
图4.1给出了用端点坐标P1和P2描述的线段的平行投影。
平行投影保持对象的相关比例不变,这是三维对象计算机辅助绘图和设计中产生成比例工程图的方法。
场景中的平行线在平行投影中显示成平行的。
一般有两种获得对象平行视图的方法:
沿垂直于观察平面的直线投影,或沿某倾斜角度投影到观察平面。
P2
P1
P2'
P1'
图4.1线段到观察平面的平行投影
在透视投影(perspectiveprojection)中,对象位置沿会聚到观察平
面后一点的直线变换到投影坐标系。
图4.2给出了用端点坐标P1和
P2描述的线段的透视投影。
与平行投影不同的是,透视投影不保持
对象的相关比例。
但场景的透视投影真实感教好,因为在透视显示中较远的对象减小了尺寸。
P2
P2'
会聚点
P1
P1'
图4.2线段到观察平面的透视投影
5.正投影
对象描述沿与投影平面法向量平行的方向到投影平面上的变换称
为正投影(orthogonalprojection;或正交投影,orthographic
projection)。
这生成一个平行投影变换,其中投影线与投影平面垂
直。
正投影常常用来生成对象的前视图、侧视图和顶视图,如图
5.1所示,前、侧和后方向的正投影称为立面图,顶部正投影称为
平面图。
工程和建筑绘图通常使用正投影,因为可以精确地绘出
长度和角度,并能从图中测量出这些值。
F三
图5.1对象的正投影,显示了平面图和立面图
6.斜投影
斜投影是将三维形体向一个单一的投影面作平行投影,但投影方向不垂直于投影面所得到的平面图形。
常选用垂直于某个主轴的投影面,使得平行于投影面的形体表面可以进行距离和角度的测量。
斜投
影的特点:
既可以进行测量又可以同时反映三维形体的多个面,具有立体效果。
常用的斜轴测图有斜等测图和斜二测图,如下图所示。
斜等侧投影:
投影方向与投影平面成45°的斜平行投影,它保持
平行投影平面和垂直投影平面的线的投影长度不变。
斜二侧投影:
与投影平面成arctg(1/2)角的斜平行投影,它使垂
直投影平面的线产生长度为原1/2的投影线。
7.透视投影
透视投影基本符合人类的视觉习惯,同样尺寸的物体离视点
近的比离视点远的大,远到极点即消失。
以透视方式在计算机屏
幕上观察物体,就如同透过一个完全透明的四方玻璃片看东西一
样。
想象有一条从眼睛到物体的线,这条直线穿过玻璃,并在玻
璃上涂上一个与物体颜色相同的点。
如果对所有穿过玻璃的线都
这样做,并且保持眼睛不动,那么玻璃片上的图像就是透视变换
后得到的图像,这块玻璃片就是窗口。
正如人眼睛不能聚焦到非
常近或非常远的物体一样,透视投影有2个剪切面——近剪切面
和远剪切面,分别将离视点太近和太远的物体部分或全部地剪切
掉。
透视投影的特点是距离视点近的物体大,距离视点远的物体
小,远到极点即为消失。
它的观察空间是一个顶部和底部都被切
除掉的棱椎,也就是棱台。
OpenGL透视投影函数也有两个,其中一个函数是:
voidglFrustum(GLdoubleleft,GLdoubleRight,GLdoublebottom,GLdoubletop,GLdoublenear,GLdoublefar);
此函数创建一个透视投影的有限观察空间。
它的参数只定义近裁剪平面的左下角点和右上角点的三维空间坐标,即(left,bottom,
-near)和(right,top,-near);最后一个参数far是远裁剪平面的
Z负值,其左下角点和右上角点空间坐标由函数根据透视投影原理
自动生成。
near和far表示离视点的远近,它们总为正值。
另一个函数是:
voidgluPerspective(GLdoublefovy,GLdoubleaspect,GLdoublezNear,GLdoublezFar);
它也创建一个透视投影的有限观察空间,但它的参数定义于前面的不同,如图7-39所示,参数fovy定义视野在X-Z平面(垂直方向上的可见区域)的角度,范围是[0.0,180.0];参数aspect是投影平面的纵横比(宽度与高度的比值);参数zNear和Far分别是远近裁剪面沿Z负轴到视点的距离,它们总为正值。
8.视口变换和三维屏幕坐标系
视口变换类似于照片冲洗过程中的照片裁剪。
在计算机图形学
中,视口是绘制图像的句型区域。
视口以窗口坐标来定义,它表
示图像相对于窗口左下角的位置。
进行视口变换时,所有顶点都
已经经过几何变换,并且位于取景器之外的图像已经被剪切掉了。
8.1定义视口
打开一个窗口时,系统自动地将视口设置为整个窗口的大小。
在OpenGL中可以用gIViewport()函数来设置一个较小的绘图区
域,该函数的原型如下:
voidgIViewport(GLintx,GLinty,GLsizeiwidth,GLsizeiheight);
该函数的功能是设置窗口。
X,y指定一个视口像素矩形的左下角,
其初始值是(0,0)。
width,height指定一个视口的宽度和高度。
当一
个OpenGL环境被第一次连接到一个窗口时,参数width和height
按此窗口的大小设置。
该函数为x和y指定了一种由标准化的设备坐标到窗口坐标的
映射几何转化。
设(Xnd,ynd)是标准化的设备坐标,则窗口坐标(xw,yw)
可由下式求得:
Xw=(Xnd+1詈+Xyw=(xnd+呼+y
视口的宽度和高度被默认为地截断到一定的范围,具体范围值
由所处环境决定。
可调用函数glGet(GLMAX_VIEWPORT_DIMS)
查询这一范围值。
视口的高宽比一般与投影取景器的高宽比相同,否则会造成图
像的变形。
在程序的运行过程中,可能会改变窗口的大小,因此
程序应该始终检测到这种变化,并作相应的处理。
8.2变换z坐标
在视口变换中,z坐标或深度坐标被编码并被存储起来。
在
OpenGL中可以使用gIDepthRange()函数缩放z坐标的值,使它处
于所要求的范围内。
该函数的原型为:
voidgIDepthRange(GLcIampedzNear,GLcIampedzFar);
该函数的功能是指定一种从归一化深度坐标到窗口深度坐标
的映射方法。
zNear指定从最近的剪切平面到窗口坐标的映射,其
缺省值为0.zFar指定从最远的剪切平面到窗口坐标的映射,其缺
省值为1。
深度坐标在剪切和除以w后,其范围将变为[-1,1]。
其中-1和1
分别与最近和最远的剪切平面相对应。
该函数将指定该范围内从
归一化深度坐标到窗口深度坐标的一种线性映射。
不管具体实现
的实际深度缓冲区如何,窗口坐标中的深度值将被看做其范围是
[0,1]。
因此,该函数得到的值将首先被截断到这一范围内。
这里,0和1被分别映射成最近和最远的剪切平面。
在这种映
思考题:
2、
创建透视投影的OpenGL函数有哪些?
并比较其不同点。
4、
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 三维 坐标 变换