Tôi có một camera di chuyển theo một vài cách khác nhau trong cảnh. Máy ảnh sẽ xoay quanh vị trí mục tiêu. Trong trường hợp của tôi, đây là một điểm trên lưới mà người dùng đã nhắm mục tiêu. Do máy ảnh thường không yêu cầu di chuyển liên quan đến điểm này nên tôi không thể sử dụng ý tưởng xoay vòng ở đây: https://github.com/mrdoob/three.js/issues/1830. Giải pháp hiện tại của tôi sử dụng mã sau:Ba.js Xoay camera quanh vật thể (có thể di chuyển)
var rotationY = new THREE.Matrix4();
var rotationX = new THREE.Matrix4();
var translation = new THREE.Matrix4();
var translationInverse = new THREE.Matrix4();
var matrix = new THREE.Matrix4();
function rotateCameraAroundObject(dx, dy, target) {
// collect up and right vectors from camera perspective
camComponents.up = rotateVectorForObject(new THREE.Vector3(0,1,0), camera.matrixWorld);
camComponents.right = rotateVectorForObject(new THREE.Vector3(1,0,0), camera.matrixWorld);
matrix.identity();
rotationX.makeRotationAxis(camComponents.right, -dx);
rotationY.makeRotationAxis(camComponents.up, -dy);
translation.makeTranslation(
target.position.x - camera.position.x,
target.position.y - camera.position.y,
target.position.z - camera.position.z);
translationInverse.getInverse(translation);
matrix.multiply(translation).multiply(rotationY).multiply(rotationX).multiply(translationInverse);
camera.applyMatrix(matrix);
camera.lookAt(target.position);
}
Vấn đề là chúng tôi không muốn sử dụng lookAt, do định hướng lại. Chúng tôi muốn có thể loại bỏ dòng đó.
Nếu chúng tôi sử dụng mã ở trên mà không có lookAt, chúng tôi xoay quanh điểm nhưng chúng tôi không xem xét điểm. Sự hiểu biết của tôi là phương pháp của tôi nên xoay tầm nhìn của máy ảnh nhiều như bản thân camera quay, nhưng thay vào đó máy ảnh chỉ được xoay một lượng nhỏ. Bất cứ ai có thể giúp tôi hiểu những gì sai?
EDIT: Đã xóa sạch bài đăng và mã gốc để hy vọng làm rõ câu hỏi của tôi.
Suy nghĩ của tôi là tôi có thể dịch sang nguồn gốc (vị trí mục tiêu của tôi), xoay số tiền mong muốn của tôi và sau đó dịch trở lại vị trí bắt đầu. Bởi vì vòng quay, tôi mong đợi ở một vị trí mới nhìn vào nguồn gốc.
Trong thực tế, tôi đang thử nghiệm nó bây giờ mà không có ma trận dịch được sử dụng, do đó, dòng nhân ma trận là:
matrix.multiply(rotationY).multiply(rotationX);
và nó dường như được cư xử như vậy. Cảm ơn tất cả sự giúp đỡ cho đến nay!
MỘT THÊM THÊM! Một phần của vấn đề là khi máy ảnh hoạt động kém gần cực bắc hoặc cực nam. Tôi đang tìm kiếm cảm giác 'chuyển vùng tự do'.
(1) 'camera.lookAt (vector)' không lấy 'ma trận' làm đối số. (2) Chính xác, bạn đang cố gắng làm gì? – WestLangley
Tôi đã làm hỏng nó trong khi cố gắng dọn dẹp mã của mình, xin lỗi! Tôi đã chỉnh sửa bài đăng để phản ánh đúng thông tin – maaachine
Tôi đang tìm kiếm chính xác điều tương tự .. trong năm 2017. Tôi có thể đã bỏ lỡ điều gì đó, nhưng tôi thực sự hy vọng tôi không phải rút ra sách giáo khoa Calc của tôi và truy cập lại vectơ và 3D trig. Tôi chỉ muốn có thể xoay "tự do" xung quanh một vật thể. Đó là một chút khó khăn, thực sự. – dylnmc