2013-04-07 35 views
5

Có ai biết cách tôi có thể xoay CannonJS (thư viện vật lý) CANNON.RigidBody không? Tôi đang cố gắng làm cho đối tượng xoay với máy ảnh, vì vậy cả hai đều hướng về cùng một hướng. Tôi biết tôi phải thay đổi các quaternion, nhưng điều này không làm việc một cách chính xác:Làm thế nào để xoay CannonJS RigidBody?

mPlayer.objectBody.quaternion.set(0, mPlayer.yawObject.rotation.y, 0, 1); 

Nó cũng làm thay đổi Y-vị trí của các đối tượng, không chỉ xoay.

Here's a demo (WASD để di chuyển hình chữ nhật màu đỏ - đó là những gì tôi muốn xoay)
Here's the main script

Tại thời điểm nó sẽ tự động xoay dựa trên vật lý. Cảm ơn đã giúp đỡ!

CHỈNH SỬA:
Tôi sắp làm việc này ngay bây giờ. Nhưng nó không xoay hoàn toàn (toàn bộ 360 độ) và góc quay nó không hoàn toàn đúng. Nếu ai đó có thể xem và xem điều gì sai, tôi thực sự sẽ đánh giá cao nó! :)

Same link as before nhưng hình chữ nhật/cơ thể ở dưới máy ảnh ngay bây giờ, vì vậy tôi có thể biết nếu nó xoay đúng cách.

tôi đã thêm mã này để làm cho nó xoay:

mPlayer.objectBody.quaternion.y = mPlayer.yawObject.rotation.y; 
mPlayer.objectBody.quaternion.w = 1; 
mPlayer.objectBody.quaternion.normalize(); 

Để lưu Bạn đang tìm kiếm thông qua các mã, mPlayer.yawObject.rotation.y được đặt trong sự kiện MouseMove:

var onMouseMove = function (event) { 
    var movementX = event.movementX || event.mozMovementX || event.webkitMovementX || 0; 
    var movementY = event.movementY || event.mozMovementY || event.webkitMovementY || 0; 

    mPlayer.yawObject.rotation.y -= movementX * 0.002; 
    mPlayer.pitchObject.rotation.x -= movementY * 0.002; 

    mPlayer.pitchObject.rotation.x = Math.max(- PI_2, Math.min(PI_2, mPlayer.pitchObject.rotation.x)); 
}; 

Cảm ơn một lần nữa!

Trả lời

6

Giải quyết sự cố với sự trợ giúp của nhà phát triển Cannon.JS. Tôi hiện đang sử dụng:

mPlayer.objectBody.quaternion.setFromAxisAngle(new CANNON.Vec3(0,1,0), mPlayer.yawObject.rotation.y); 
Các vấn đề liên quan