[原]3D中的坐标变换(一)

相机变换:
1.建立一个欧拉相机模型的过程:
I: 计算出相机的平移矩阵(根据相机位置计算平移矩阵的逆矩阵)。
II: 根据相机沿各个坐标轴的变化角度,计算一下各坐标轴的欧拉角度。
III: 然后建立各坐标轴的旋转的逆矩阵。左后根据坐标轴的变换顺序,如:xyz、yxz、xzy、yzx、zyx等旋转顺序,产生一个计算好的旋转矩阵(个坐标轴的旋转矩阵相乘)。
IV: 把平移矩阵和旋转矩阵相乘,得到最终的欧拉相机变换矩阵。

2.建立一个UVN相机模型的过程:
I: 根据相机位置计算出平移逆矩阵;
II: 确定出方向点的坐标;
III: 建立n,即相机位置到参考点的一个向量;
IV: 建立一个临时的v,首先假设v为;这个假设是由于最后都需要把所有的向量都要归一化
V: 建立u,u=v×n;
VI: 建立真正的v,v=n×u;
VII: 对所有的向量(uvn)进行归一化
VIII:计算出uvn旋转逆矩阵
u.x v.x n.x 0
u.y v.y n.y 0
u.z v.z n.z 0
0 0 0 1
VX:根据逆平移矩阵和逆旋转矩阵得出uvn坐标变化矩阵

世界坐标到相机坐标变换:
这个变换就是一个思路:首先计算出逆平移矩阵,然后计算出逆旋转矩阵,最后把逆旋转矩阵和逆平移矩阵合成一个变换矩阵。世界坐标通过这个矩阵变换到相机坐标。

物体的剔除:

1. 首先对经过世界变换到相机变换的物体,进行剔除。
剔除方法:分别对X(左右剪裁面)、Y(上下剪裁面)和Z(远近剪裁面)进行判断,看看物体坐标是否超出各剪裁面界限。
2. 如果超出剪裁面界限则设置一个该多边形已经被裁剪的标记。

不过,有一个问题:如果物体的一部分在里面,另一部分在外面则上述算法不能处理很好。

背面消隐:
1. 计算出面法线:面上两向量进行叉乘;
2. 计算出面发现和视点的夹角:进行点乘;如果夹角大于90度则进行背面消隐;

这里需要指出的是,进行背面消隐的时候先确定物体或多边形是单面有效的,即只有一个面被人看到。其次,背面消隐只应用到世界坐标中的关系,即确定出面法线和视点的关系即可,所以可以在进行世界变换到相机变换前进行背面消隐这样可以减少大量的无谓计算。

相机坐标变换到透视坐标
1.投影变换公式:
X_per = viewing_distance * x_world / z_world;
Y_per viewing_distance * aspect_ratio * y_world / z_world;
如果viewing_distance设置为1,则是平面坐标是归一化的即:x_per为-1到1,y_per为-1/ar到1/ar,其中,ar为屏幕的宽高比;
2.变换算法:
变换算法就是依次对多边形列表或物体中的顶点进行变换,即套用上述公式即可。

需要注意的是软件实现的投影变换最好用公式法,因为需要的cpu开销小,如果用矩阵变换方式进行计算则需要更多的cpu开销,用硬件实现的话矩阵变换方法最好,因为多数显卡只进行矩阵计算。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值