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 に答える