2012-12-08 90 views
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矩陣的更新方法。

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 
    ); 
} 

只是想知道如何設置相機的視圖矩陣。

謝謝!

回答

0

你爲什麼不只是除了設置你的矩陣的屬性,像這樣:

var m = getYourNewMatrix(); 
camera.position = m.decompose()[ 0 ]; 
camera.rotation = m.decompose()[ 1 ]; 
camera.updateMatrix(); 
+0

我看不錯。我會嘗試並讓你知道! – William

+0

嘿, 所以我試了你的建議。但是,我正在查看m.decompose的結果,並且返回的值數組都沒有正確的位置。看起來像視圖矩陣確實有它們,但實際上從THREE.Matrix4的元素數組中獲取值也沒有工作... – William

+0

您是否檢查過最初從「新矩陣」中獲取的值?可能是你的計算的東西?因爲如果你將正確的值設置爲'camera.position',那麼你就可以將你的位置設置正確)) –