opengl教程翻译 #7旋转矩阵

背景知识:

在我们的变换列表中的下一个是旋转,即,给定一个角度和一个点,绕着某条轴旋转这个点。我们总是在X,Y,Z仨中保持一个不变,改变另俩。这意味着旋转路径将会陈列在三个主平面其中之一上:XY平面(当绕着Z轴转时),YZ平面(当绕着X轴转时),XZ平面(当绕着Y轴转时)。有更加复杂的旋转变换允许你绕着一个随意的向量旋转,但这个阶段不讨论它们。

让我们大概定义一下问题。已知下面的图:

 

 

我们想把圈从(x1,y1)移到(x2,y2)。换句话说我们把(x1,y1)旋转角度α2。让我们假设圆的半径是1。这意味着以下:

 

 

我们会用下面的三角函数展示x2和y2:

 

我们这么写上面的式子:

 

 

上图我们盯着XY平面,而Z是指向纸的里面的。如果X和Y是4维向量的一部分,那么上面的等式就能被写成矩阵模式(没有影响到Z和W)

 

 

如果我们想为YZ(绕着X轴)和XZ(绕着Y轴)平面创建一个旋转,那么方程基本相同,只是矩阵的安排有一点点不同。这绕着Y轴旋转的矩阵:

 

 

而这是绕着X轴旋转的矩阵:

 

 

 

源码演练:

在这课中代码改变很小。我们只需在代码中改变单个变换矩阵的内容即可。

World.m[0][0]=cosf(Scale); World.m[0][1]=-sinf(Scale); World.m[0][2]=0.0f; World.m[0][3]=0.0f;

World.m[1][0]=sinf(Scale); World.m[1][1]=cosf(Scale);  World.m[1][2]=0.0f; World.m[1][3]=0.0f;

World.m[2][0]=0.0f;        World.m[2][1]=0.0f;         World.m[2][2]=1.0f; World.m[2][3]=0.0f;

World.m[3][0]=0.0f;        World.m[3][1]=0.0f;         World.m[3][2]=0.0f; World.m[3][3]=1.0f;

如果所看到的我们绕着Z轴旋转。你也可以尝试着其他旋转,但我认为在现在没有实际的从3D到2D的投影其他旋转看起来很怪。我们将会在即将到来的全套的变换管线课程中完成它们。

转载于:https://www.cnblogs.com/alphaGo/p/9208558.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值