glTranslate和glRotate未按预期工作

glTranslate and glRotate not working as expected

本文关键字:工作 glRotate glTranslate      更新时间:2023-10-16

我使用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。