【循序渐进学图形学之】OpenGL视图和模型变换中各变换发生顺序的思考

在视图模型变换中,顶点v的变换是按照相反的顺序发生的,而不是按照它的代码中先后顺序出现的。下面举例说明。

考虑下面的代码:

在这段代码中,模型视图矩阵按顺序分别包含I、N、NM,最后是NML,其中I表示单位矩阵。经过变化的顶点是NMLv。因此顶点变换就是N(M(Lv))。

下面看绘制机器人手臂的display()函数的代码:

我们通过逐步调试运行来查看效果。

现在注释掉代码:

以及绘制第二段手臂的代码:

只保留绘制第一段的代码,便于查看效果。

运行结果:

显示的是经过缩放了的立方体。

然后解除下面这行代码的注释:glTranslatef(1.0,0.0,0.0);(位于旋转之下的代码)

运行结果:

显示的是经过缩放、平移的结果。

在解除这行代码的注释:glRotatef((GLfloat)shoulder,0.0,0.0,1.0);

运行结果:

显示的是经过缩放、平移、再旋转地结果。

再解除这行代码的注释:glTranslatef(-1.0,0.0,0.0);(位于旋转之上的代码)

运行结果:


可以看出是上一步的结果又平移之后的效果。

从上面的单步效果可以看出,乘法的出现顺序和他们的代码中得出现顺序相反。


最后给出绘制两端机器人手臂整个代码:

运行效果(通过s和e键可以控制两端手臂的旋转角度):




posted on 2011-12-03 11:10  江南烟雨hust  阅读(449)  评论(0编辑  收藏  举报

导航