最近这个内容让我很窝火啊,真是有点摸不到头脑,经过查资料,终于知道这其中的一些原理,由于我现在只是初步学习,有关矩阵变换的问题,我会在后面补充的,目前先稍微的说明,看了一个机械臂的程序,研究好一段时间终于知道模型变换中的这两个函数glTranslatef(),glRotatef()在执行的顺序上与实际是相反的。
参看http://www.cnblogs.com/yujunyong/archive/2011/04/17/2018776.html,这里面讲述了顺序的问题
看一下这个机械臂的程序中有关这两个函数的应用
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glColor3f(0.0, 1.0, 1.0);
glTranslatef (-0.5, 0.0, 0.0);
glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);
glTranslatef (1.0, 0.0, 0.0);
auxSolidBox(2.0, 0.3, 0.5);
这两个操作是画两个正方体,并且旋转方式都是按Z轴逆时针旋转,按照上面所阐述的内容,首先是先移动坐标轴,然后在绕Z旋转操作,先移动后旋转,物体旋转时是以(0.0f,0.0f,0.0f)这个点绕Z轴逆时针旋转的(旋转是右手坐标系),然后再调用glTranslatef(-0.5,0.0,0.0),这个操作实际上是改变了原点,也就是再旋转时是以原坐标经(-0.5,0.0,0.0)变换后的那个点绕Z轴旋转的,然后绘制立方体
下一步是画第2个立方体,我设置成蓝色的以便好观察
代码如下
glColor3f(0.0, 0.0, 1.0);
glTranslatef (1.0, 0.0, 0.0);
glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);
glTranslatef (0.8, 0.0, 0.0);
auxSolidBox(1.6, 0.2, 0.5);
同样的操作,是先移动后旋转,然后改变原点的位置,使其旋转。
效果如下

全部代码如下
#include <windows.h>
#include &

这篇博客介绍了作者在学习OpenGL时遇到的模型变换问题,特别是关于glTranslatef()和glRotatef()函数的执行顺序。作者通过研究一个机械臂的程序,理解了这两个函数的使用,指出它们的顺序与直观理解相反。文章提到了一个外部资源链接,进一步解释了顺序问题,并展示了如何使用这两个函数画出旋转的正方体。最后,给出了实现这一效果的代码片段。
最低0.47元/天 解锁文章
4901

被折叠的 条评论
为什么被折叠?



