1

我正在尝试使用 Three.js 将我的 C# XNA 项目转换为 WebGL。

到目前为止,一切进展顺利,但我目前正在研究我的相机。使用 XNA,您可以轻松地将视图矩阵发送到着色器。

我确定我只是没有看到我应该在文档中看到的内容。

我的 CameraManager 类有一个 MouseMoved 事件处理程序。

CameraManager.prototype.MouseMoved = function( changeVector ) {    
    var q1 = new THREE.Quaternion();
    q1.setFromAxisAngle(this.left, (( Math.PI / 4 ) / 200) * changeVector.y);
    var q2 = new THREE.Quaternion();
    q2.setFromAxisAngle(this.left, (( -Math.PI / 4 ) / 200) * changeVector.x);
    var q = new THREE.Quaternion();
    q.multiply(q1, q2);

    q.multiplyVector3(this.direction);
    q.multiplyVector3(this.left);
}

CameraManager 也有一个更新 View 矩阵的 update 方法。

CameraManager.prototype.CreateLookAt = function() {
    var target = this.position.clone();
    target.addSelf(this.direction);
    this.view = THREE.Matrix4.CreateLookAt(this.position, target, this.up);    
}

THREE.Matrix4.CreateLookAt = function(cameraPosition, cameraTarget, upVector) {
    var zAxis = new THREE.Vector3();
    zAxis.sub(cameraPosition, cameraTarget);    
    zAxis.normalize();

    var xAxis = new THREE.Vector3();
    xAxis.cross(upVector, zAxis);
    xAxis.normalize();

    var yAxis = new THREE.Vector3();
    yAxis.cross(zAxis, xAxis);

    return new THREE.Matrix4(
         xAxis.x,           yAxis.x,           zAxis.x,          0,
         xAxis.y,           yAxis.y,           zAxis.y,          0,
         xAxis.z,           yAxis.z,           zAxis.z,          0,
        -xAxis.dot(cameraPosition),  -yAxis.dot(cameraPosition),  -zAxis.dot(cameraPosition),  l
    ); 
}

只是想知道如何为相机设置视图矩阵。

谢谢!

4

1 回答 1

0

为什么不像这样分开设置矩阵属性:

var m = getYourNewMatrix();
camera.position = m.decompose()[ 0 ];
camera.rotation = m.decompose()[ 1 ];
camera.updateMatrix();
于 2012-12-08T19:16:41.177 回答