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(角度)*速度);
如果你在 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 回答