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的投影其他旋转看起来很怪。我们将会在即将到来的全套的变换管线课程中完成它们。

posted @ 2018-06-21 13:31  银龙背上的骑士  阅读(457)  评论(0编辑  收藏  举报