glTranslate和glRotate没有按预期工作

时间:2012-08-31 18:24:05

标签: java c++ opengl lwjgl

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

1 个答案:

答案 0 :(得分:3)

由于您的代码不完整,我必须猜一点,但我怀疑您做了以下事情。

您在z方向上进行了.5的平移,以使您的对象进入原点,然后应用旋转。期望它转动现在位于对象内的原点。有道理但不幸的是,这不是OpenGL的工作原理。

翻译对象时,整个坐标系都会随之翻译。因此,当您围绕原点旋转时,原点仍然是对象旁边的一个点。

您必须撤消订单。因此,首先旋转对象然后翻译对象。请注意,当您旋转对象时,坐标系也会随之旋转,因此无论您旋转对象多少,您需要平移的数量和方向仍然是z方向的.5。