0

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++ を問題なく読むことができます。

4

1 に答える 1

3

あなたのコードは完全ではないので、少し推測する必要がありますが、あなたは次のことをしたと思います.

z 方向に 0.5 の平行移動を行って、オブジェクトを原点の中心または周囲に配置してから、回転を適用しました。現在オブジェクト内にある原点を中心に回転することを期待しています。理にかなっていますが、残念ながらこれは OpenGL の仕組みではありません。

オブジェクトを平行移動すると、座標系全体が平行移動します。したがって、原点を中心に回転すると、原点はオブジェクトの横のポイントのままです。

順序を逆にする必要があります。したがって、最初にオブジェクトを回転させてから、オブジェクトを平行移動させます。オブジェクトを回転すると、座標系も回転するため、オブジェクトをどれだけ回転させても、平行移動する必要がある量と方向は z 方向に 0.5 のままであることに注意してください。

于 2012-08-31T18:50:18.707 に答える