坐标系、变换及缓冲区及操作矩阵的通用变换函数(openGL)

之前一直纠结于坐标系与变换调用的顺序,但到目前为止:

a.使用到的只是一个全局坐标和绘图坐标

b.会调用变换就行,无关顺序

0.对象的点在出现在屏幕的过程中:各种变换调用顺序和各种坐标系出现顺序


对象 \ 建模坐标系下,转化到标准的世界坐标系下(方便转换到眼(视点)坐标),再把标准的世界坐标系转换为视点坐标(因为要观察对象,对于(观察者)照相机而言不是所有对象都能观察(拍)到)。如果一个对象位于视见体外,那么就在光栅化之前把它从场景里裁剪掉。为了更有效率的裁剪,OpenGL先执行投影变换,这个变换把所有可能是可见的对象变换到一个立方体中,该立方体的中心是裁剪坐标系(clip coordinate)的原点。在投影变换之后,顶点的表示仍然是齐次坐标。顶点的齐次坐标表示再经过透视除法(perspective division),即用w分量去除其他分量,就得到了规范化的设备坐标系(normalized device coordinate)下的三维表示。最后一步变换根据视口提供的信息,把规范化的设备坐标系下的表示变换为窗口坐标系(window coordinate)下的三维表示。窗口坐标系是用显示器上的像素来度量的,但仍然保留了深度信息。如果去掉深度坐标,就得到了二维的屏幕坐标(screen coordinate)。

总结:

1、目标:将对象展现在观察者的视线内,需要将点的对象建模坐标转化成视点坐标(对象建模坐标->世界坐标->视点坐标。opengl把这个过程弄成了一个,模视矩阵);

2、转换成视点坐标后:由于有些点的视点坐标在观察者的视口之外,所以需要裁剪掉。为了裁剪效率,需要用投影变换将视点坐标转化成裁剪坐标;

3、裁剪完成之后,就需要将三维的裁剪坐标转化成屏幕上的窗口坐标展现在窗口中(裁剪坐标->标准化设备坐标->窗口坐标);

总结2:

为了把一个物体的三维坐标转换成屏幕上的像素坐标,需要完成如下三步:

1、变换:包括模型、视图和投影操作,它们是由矩阵乘法表示的。这些操作包括旋转、移动、缩放、反射、正投影和透视投影

2、由于场景是在一个矩阵窗口中渲染的,因此位于窗口之外的物体必须才裁剪掉

3、最后,经过变换的坐标和屏幕像素之间必须建立对应关系。这个过程叫视口变换

opengl中存在的六种坐标系

1)object or model coordinate(对象 \ 建模坐标(空间))(绘图过程中输入,建模变换有用)
2)world coordinate(世界坐标(空间))(标准坐标,对于多个对象而言,计算机有个统一的标准)
3)eye coordinate(眼坐标(空间))(视觉坐标相对于观察者的视角而言,可以视为绝对的屏幕坐标,通常作为参考坐标系使用)
4)clip coordinate(裁剪坐标(空间))(应用程序员不涉及)
5)normalized device coordinate(设备坐标(空间))(应用程序员不涉及)

6)window coordinate(屏幕坐标(空间))(应用程序员不涉及)

3D数学基础书中对一些常用坐标系的功用介绍

世界坐标系
它建立了描述其他坐标系所需要的参考框架。从另一方面来说,能够用世界坐标系描述其他坐标的位置。
世界坐标系的典型问题都是关于初始位置和环境的,如:
1、每个物体的位置和方向
2、摄像机的位置和方向
3、世界中每一个点的地形是什么
4、各物体从哪里来、到哪里去(NPC的运动策略)
物体坐标系
物体坐标系是和特定物体相关联的坐标系。每个物体都有它们独立的坐标系。当物体移动或改变方向时,和该物体相关联的坐标系将随之移动或改变方向。
物体坐标系中可能遇到的问题,如:
1、周围有需要互相作用的物体吗?(我要攻击它吗)
2、哪个方向?在我前面吗?我左边一点?右边?(我应该向它射击还是转身就跑)
摄像机坐标系
摄像机坐标系是和观察者密切相关的坐标系。摄像机坐标系和屏幕坐标系相似,差别在于摄像机坐标系处于三维空间中而屏幕坐标系在二维平面里。
1、物体是否在屏幕上
2、两个物体,谁在前面
惯性坐标系
为了简化世界坐标系到物体坐标系的转换,人们引入了一种新的坐标系,成为惯性坐标系。惯性坐标系的原点在物体,但坐标轴与世界坐标系平行。
惯性坐标系为了简化世界坐标系到物体坐标系的转换?:
1、物体坐标系到惯性坐标系只需要旋转,惯性坐标系到世界坐标系只需要平移;分开考虑要比把这两件事糅合在一起简单

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值