2011-01-25 94 views
0

Hy there!我对OpenGL ES非常陌生,在网上看到很多例子,但是我对旋转有一些疑问。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

应用以下方案(伪):

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

Translate Object1 
Rotate Object1 
DrawObject1 

PopMatrix 

PushMatrix 

Translate Object2 
Rotate Object2 
DrawObject2 

PopMatrix 

... 

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

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