文档开发者中心
我的

OpenGL--三维坐标下图形的基本几何变换

上一篇文章,我们通过齐次坐标,很方便的表示出了二维图形的基础变换形式。对于三维,我们可以将平移和缩放的结论直接推论过来

1、平移:

2、缩放:

对于中心点在原点的缩放,有


对于中心点不在原点的缩放,假设中心点为(x0,y0,z0),则需要先将中心点平移到原点,缩放之后再将其平移回去,综合下来其矩阵形式为:


3、旋转:

对于三维旋转,则不能简单从二维旋转进行推论,先看一种特殊的旋转:绕轴旋转。对于绕z轴旋转,z轴坐标不变,x和y轴的旋转规律与二维情况一致,其矩阵形式为:


对于绕其它轴的旋转,则可以根据右手系转换相关的原则,由z轴变换过去

对于一般的旋转,则需要将其通过一些变换,转化为绕坐标轴的旋转。对于三维坐标系中的不与坐标轴平行的直线方程,可以表示为以下形式


该直线经过点(x0,y0,z0),且方向向量为(u,v,p)

以下就三维图形绕该直线逆时针旋转为例,求其变换矩阵

1> 将(x0,y0,z0)点平移到坐标原点,平移矩阵为T,有


2> 以平移后旋转轴作为新坐标系的z'轴,建立新的x'y'z'坐标系,将z'轴旋转至其与原坐标系z轴重合。这个问题相当于共原点的三维坐标系变换问题,可以直接引用一个定理。

共原点三维坐标系变换定理:已知三维正交坐标系xyz和x'y'z',其中x'y'z'的单位方向向量在xyz坐标中分别为(x1,y1,z1),(x2,y2,z2),(x3,y3,z3),那么xyz到x'y'z'的坐标系变换矩阵为:


这个证明的过程也相当简单,假设变换矩阵为A,则满足条件:



很容易求得:




有了这个结论,我们将该问题做一下转化。新坐标系的z’轴的方向向量已经确定,为(u,v,p),原点为xyz的原点,还需要确定x轴和y轴的方向向量。

由于z'轴方向向量(u,v,p)不平行于xyz的任意一个轴,因此垂直于其且通过原点的平面可以表示为:

在这个平面上,取两个点,分别记为(x4,y4,z4)和(x5,y5,z5),使得这两个点与原点所形成的向量为x'轴、y'轴的方向向量,于是有以下关系:


另外,x'与y'垂直,有



这组方程,有无数组解,圆周上任意一对互相垂直的向量都可以成为其一组解。这里我们人为选定一个,令x4=1/2,则其解限制为四组,我们选取其中的一组:






这里令x4=a,y4=b,z4=c,去求解x5,y5,z5,有:



代入,有:

这里取其中一个值,再代入所有已知量(a,b,c和u,v,p),即可求得新坐标系x'y'z'的三个新坐标轴的方向向量,其中z'轴方向向量经过单位化后为:(,,),因此这一步的变换矩阵可以表示为:





3>图像绕z轴转,其变换矩阵为:
4>由xyz坐标系再变换回x'y'z',变换矩阵为R
5>x'y'z'坐标原点平移回去,变换矩阵为


因此,变换的矩阵M可以写成一下形式:






其中,旋转角和u,v,p为给定常量,a为选定常量, b,c,z5等为可用uvp表示的常量,如下:




这里a是选定常量,选择a=1/2情况下的一种变换,其实a可以选为0<a<1的任意量,都可以计算出四组变换矩阵,对于任意0<a<1的情况,有:



令a=1/2,c和z5的正负号均取为正,即得到上述一组特殊解。

由于变换矩阵是无穷种,但是变换的结果是唯一的,因此,无论以上a的取值如何,c和z5的正负号如何确定,最终求得的变换矩阵变换出的结果都是唯一的,这个结论,可以用来反证上述推导过程的正确性。

对于旋转轴平行于某个轴的情况,直线方程无法这样表示为,就可以通过坐标轴平移来构造一个绕轴变换,会省去坐标轴变换这个比较复杂的步骤,推导比较简单,这里不再讨论。


点赞
1
收藏
回复
分享
举报
浏览1002 发布于2019-08-12 07:52未知归属地
全部评论
最多点赞
最新发布
最早发布
暂无评论
暂无评论
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。