我在iPhone上玩OpenGL ES,我试图通过手指平移来旋转模型。我发现了开源应用Molecules,让你这样做,我正在看那个代码,但是当谈到旋转我的模型时,我能够只旋转它在空间中的一个点(就像它是在轨道作为卫星,我是固定的行星)。 什么可能是错的任何建议? 我可以稍后发布代码,也许是按需发布(很多行) 在大多数情况下,请参阅您可以在MOLECULES
找到的分子答案 0 :(得分:4)
如果我的记忆正确地为我服务,我认为您需要将模型转换为原点,旋转,然后转换回起始位置以获得您所追求的效果。
我认为有一个glTranslate()函数,比如说对象是1,0,0。然后你应该翻译-1,0,0来转到原点。这是由从对象中心到原点的矢量转换的。
答案 1 :(得分:3)
绘图代码可能大致如下:
glLoadIdentity();
glTranslate(0, 0, -10);
glRotate(...);
drawMolecule();
现在重要的是要意识到这些转换是以相反的顺序应用的。如果在drawMolecule
中我们指定了一个顶点,那么这个顶点将首先围绕赋予glRotate
的轴旋转(根据定义,它通过 local < / em>分子的起源),然后在-z方向上翻译10个单位。
这是有道理的,因为glTranslate
本质上意味着:“翻译此后的所有内容”。这包括glRotate
调用本身,因此旋转的结果也会被转换。如果调用被反转,则翻译的结果将被旋转,这导致围绕不再通过原点的轴旋转。
底线:要围绕本地来源旋转对象,请将glRotate
调用最后。