3

これをカメラに使っています

library.Camera = function Camera(PosX, PosY, PosZ, Pitch, Yaw){
    this.x = PosX;
    this.y = PosY;
    this.z = PosZ;
    this.pitch = Pitch;
    this.yaw = Yaw;

    this.getCameraMatrix = function(ModelMatrix){

        var TMatrix = ModelMatrix;

        mat4.translate(TMatrix, TMatrix, [this.x, this.y, this.z]);

        mat4.rotateX(TMatrix, TMatrix, degToRad(this.pitch));
        mat4.rotateY(TMatrix, TMatrix, degToRad(this.yaw));
        return TMatrix;

    };
};

移動は問題なく動作し、回転も少し動作します。問題は、マウスによる回転が常に原点を中心に回転することです。したがって、左に移動して (-x ) 回転を開始すると、カメラは現在のポイントではなく、原点を中心に回転します。

http://glmatrix.net/docs/2.2.0/symbols/mat4.html

4

1 に答える 1

3

線形変換は可換ではないことを常に覚えておく必要があります。これは単に、回転してから平行移動すると、平行移動してから回転すると異なる結果が得られることを意味します。

あなたの場合、翻訳の前に回転を置くと問題が解決するはずです。

于 2013-07-15T17:33:43.973 に答える