OpenGL ES Learning - 关于旋转的一些问题

时间:2011-01-25 10:07:26

标签: opengl-es

Hy那里!我是OpenGL ES的新手,我在网上看到了很多例子,但我对旋转有一些疑问。

我怎么能一次双旋转?所以我需要在它的中心旋转一个物体,同时,我需要在空间中的一个具有中心点的圆上旋转这个物体。

第二件事:

我创建了这段代码:

glLoadIdentity...
glTranslateF 0,0,0..
glRotateF...

drawSomeObject...

glLoadIdentity...
glTranslateF 0,3,0..
glRotateF...

drawSomeObject...

非常好,通过这段代码,我可以将绘图对象旋转到它自己的中心。但是我如何将所有对象作为一个组旋转或翻译?

这样的事情:

//translate, and rotate all in the group1
glTranslateF 0,0,0..
glRotateF...

GROUP1

glLoadIdentity...
glTranslateF 0,0,0..
glRotateF...

drawSomeObject...

glLoadIdentity...
glTranslateF 0,3,0..
glRotateF...

drawSomeObject...

END GROUP1


//translate, and rotate all in the group1
glTranslateF 2,0,0..
glRotateF...

GROUP2

glLoadIdentity...
glTranslateF 0,0,0..
glRotateF...

drawSomeObject...

glLoadIdentity...
glTranslateF 0,3,0..
glRotateF...

drawSomeObject...

END GROUP2

1 个答案:

答案 0 :(得分:1)

应用以下方案(伪代码):

LoadIdentity
Translate (Group Translation) 
Rotate(Group Rotation) 
PushMatrix 

Translate Object1
Rotate Object1
DrawObject1

PopMatrix

PushMatrix

Translate Object2
Rotate Object2
DrawObject2

PopMatrix

... 

所以不要为每个对象返回Identity,而是返回组状态,这可以使用模型视图矩阵上的PushMatrix和PopMatrix轻松保存。这些命令将当前状态存储在内部OpenGL堆栈(PushMatrix)上,并在稍后从堆栈中检索矩阵(PopMatrix)。

以下是相关教程的链接: http://www.swiftless.com/tutorials/opengl/pop_and_push_matrices.html