java - glTranslate 和 glRotate 没有按预期工作

标签 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++。

最佳答案

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

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

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

您将不得不颠倒顺序。所以你首先旋转对象然后平移对象。请注意,当您旋转对象时,坐标系也会随之旋转,因此无论您将对象旋转了多少,您需要平移的量和方向在 z 方向上仍然是 0.5。

关于java - glTranslate 和 glRotate 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12220721/

相关文章:

C++ 迭代器、接口(interface)和指针

c++ - Mac 上的自制 GLFW/GLEW

c++ - 计算三角形网格中的法线

animation - 在 Opengl 中通过鼠标移动形状

java - 如何在android中的我的自定义相机上添加自定义颜色效果

Java:你怎么称呼这种多重继承歧义?

java - 如何从 JSON 字符串获取值的所有 JSON 路径的列表?

c++ - 结构中带有类的链表无法使 bool 操作正常工作

OpenGL glRotate 和 glTranslate 顺序

java - 如何获得谷歌地图标记的图标?