我正在使用glRotate和glTranslate函数围绕自身旋转模型。但是,当我运行程序时,我的模型围绕着它旁边的一个点旋转。这是我的模型定义:
private static final float[] mesh = {
-0.5f, 0.5f,-0f,
-0.5f, -0.5f, -0,
0.5f, -0.5f, 0f,
0.5f, 0.5f, 0f,
-0.5f, 0.5f,-1f,
-0.5f, -0.5f, -1f,
0.5f, -0.5f, -1f,
0.5f, 0.5f, -1f,
};
private static final byte[] indices = {
0, 2, 1,
0, 3, 2,
1,2,6,
6,5,1,
4,5,6,
6,7,4,
2,3,6,
6,3,7,
0,7,3,
0,4,7,
0,1,5,
0,5,4
};
这是我旋转模型的功能:
glRotatef(rotation.x,1,0,0);
glRotatef(rotation.y,0,1,0);
glRotatef(rotation.z,0,0,1);`
我正在使用LWJGL,但我可以阅读C ++。
最佳答案
由于您的代码不完整,我不得不稍作猜测,但是我怀疑您做了以下事情。
您在z方向上进行了0.5的平移,以使对象居中对准原点,然后应用旋转。期望它绕过现在位于对象内的原点。有意义,但不幸的是,这不是OpenGL的工作方式。
平移对象时,整个坐标系将随之平移。因此,当您绕原点旋转时,原点仍然是对象旁边的一个点。
您将不得不撤销顺序。因此,您首先旋转对象,然后平移对象。请注意,旋转对象时,坐标系也会随之旋转,因此无论旋转了多少对象,z方向上平移的量和方向仍为0.5。
关于java - glTranslate和glRotate无法按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12220721/