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
);
}
只是想知道如何設置相機的視圖矩陣。
謝謝!
我看不錯。我會嘗試並讓你知道! – William
嘿, 所以我試了你的建議。但是,我正在查看m.decompose的結果,並且返回的值數組都沒有正確的位置。看起來像視圖矩陣確實有它們,但實際上從THREE.Matrix4的元素數組中獲取值也沒有工作... – William
您是否檢查過最初從「新矩陣」中獲取的值?可能是你的計算的東西?因爲如果你將正確的值設置爲'camera.position',那麼你就可以將你的位置設置正確)) –