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
答案 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