2

我正在为我的测试做准备,但我需要帮助来理解围绕轴的旋转。在一个问题中,我假设一个函数drawHouse()在 xy 平面上绘制一个线框房屋,如下图所示:

改造前的房子

我们有多种选择的代码段,并询问哪一个会导致这个改造的房子:

在此处输入图像描述

正确答案如下:但我不确定命令是从后到前还是从前到后执行:

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glScalef(2, 1, 1); 
glRotatef(90, 0, 0, 1); 
glRotatef(180, 1, 0, 0); 
drawHouse(); 

问题是我不知道在哪个轴上旋转的哪种方式,所以如果有人可以给我一个简短的总结,我将不胜感激。

原始问题是 22 在这里,PDF

4

2 回答 2

2

编辑此文本与接受的(不正确的)答案完全不同,但在接受后我无法删除我的答案。

转换以相反的顺序应用。

x第一次旋转(函数中的最后一次)通过围绕轴旋转将房屋倒置。

第二个将它围绕z轴旋转,使其指向正确。

最后的缩放函数沿x轴拉伸它。

于 2012-05-02T08:14:02.347 回答
2

大概您有有关gl函数和应用转换顺序的文档。如果您根据固定轴来查看转换,那么只有当转换以相反的顺序发生时,解决方案才有意义,即从glRotatef(180, 1, 0, 0);. 所以转换将是

  1. 绕 X 轴旋转 180 度,使房子朝下
  2. 围绕 Z 轴旋转 90 度,使房子像最终图像一样位于 X 轴上,没有拉伸
  3. 沿 X 轴缩放 *2,将房子拉长
于 2012-05-02T08:23:34.020 回答