1

キーボード ボタンを使用して平面 (y=0) でモデルを移動したいのですが、次の問題があります。

彼を Y 軸を中心に回転させることができましたが、今度は彼が向いている方向に移動させる必要があります。変位を検出して計算し、適切な並進行列を構築するにはどうすればよいですか?

何かがうまくいかないので、ここにコードを添付します...

    this.mouseMv = MatrixMath.lookAt(this.eyeX,this.eyeY,this.eyeZ,this.at,this.up);
    Mat4 translate = MatrixMath.translate(this.position);
    this.mouseMv = this.mouseMv.mul(translate);
    this.mouseMv = this.mouseMv.mul(MatrixMath.rotationX(-90.0f));
    this.mouseMv = this.mouseMv.mul(MatrixMath.translate(this.position);
    this.mouseMv = this.mouseMv.mul(this.mouseAngle);

    modeling.use(gl);
    modeling.setUniformMatrix("model_view", this.mouseMv);
    String part = "models/catbody.sgf";
    Mat4 original = this.mouseMv;
        for (Map.Entry<String, VertexBufferObject> entry : vboHashMap.entrySet()) {
            String key = entry.getKey();
            entry.getValue().bind(gl);
            gl.glDrawArrays(GL3.GL_TRIANGLES, 0, SGFLoader.getNumVertices(key));
        }

したがって、前方ベクトルは、私の mouseMv 行列からの (8,9,10) ベクトルです。モデルを彼が向いている方向に前進させるには、mouseMv を平行移動行列で対応する前方ベクトルに平行移動する必要がありますか?

4

2 に答える 2

1

モデルが向いている角度がある場合は、非常に単純な正弦および余弦の計算を使用できます。
擬似コード:
newx = oldx +(cos(angle)* speed);
newz = oldz +(sin(angle)* speed);
math.hでsin()とcos()を使用する場合は、角度をラジアンにする必要があります(180で除算し、度の場合はpiを掛けます)。

于 2013-01-24T11:49:29.683 に答える
0

ソースコードが提供されていないため、オブジェクトをどのように移動するかを理解するのは困難です。しかし、あなたはすでに回転に行列を使用していると思います。したがって、マトリックスを回転させてから、順方向ベクトルであるマトリックスの新しい方向に沿って移動する必要があります。さて、これは些細なことなので、私があなたに解くために残しておくフォワードベクトルを計算する方法の質問。

しかし、まだ混乱している場合は、ここに手がかりがあります。

http://devmaster.net/forums/topic/5881-forward-vector/

于 2013-01-23T19:42:24.160 に答える