Tôi biết xoay vòng 3D được ghi lại trên SO và nhiều trang web khác, nhưng mặc dù đọc vô số lời giải thích tôi vẫn chưa tìm ra nơi tôi đang đi sai. Nền tảng của tôi là về nghệ thuật và thiết kế, không phải là toán học và lập trình, và tôi không bao giờ thực sự chắc chắn nếu góc tấn công của tôi (không có ý định chơi chữ) là điều đúng đắn. Thay vì dán một mảnh chắp vá của mã ảm đạm của tôi, tôi bao gồm một hình ảnh mô tả vấn đề của tôi. Điều tôi thực sự thích là một sự phân tích từng bước về cách giải quyết nó. Mã giả là hữu ích, nhưng tôi sẽ tìm hiểu thêm nếu ai đó sẽ chỉ hướng tôi đi đúng hướng hoặc chỉ ra những cạm bẫy phổ biến.Xoay 3D với Axis & Angle
Đỏ = X-Axis, Green = Y-Axis, Blue = Z-Axis
Magenta vectơ = gốc -> một số X, Y, Z điểm
Khối màu đỏ tươi = trung bình của các điểm cuối của hai vec-tơ đỏ tươi (có tên tốt hơn cho điều này không?)
Vectơ trắng = vectơ chéo của hai vec tơ đỏ tươi (được mở rộng để dịch chuyển ay, vector thực tế là bình thường)
đối tượng khối Cyan = luân chuyển không
trước đây tôi đã sử dụng Away3D và Papervision; trong các thư viện này, việc áp dụng các góc Euler cho các thuộc tính rotationX, rotationY hoặc rotationZ của đối tượng sẽ xoay đối tượng cục bộ, như thể nó ở gốc bất kể vị trí thực tế của nó. Với Three.js, đây không phải là trường hợp. Sửa đổi các thuộc tính rotation.x và rotation.y của đối tượng tạo ra một hiệu ứng kì lạ khi đối tượng dường như nghiêng một chút trên trục Z. Thậm chí còn khó hiểu hơn là điều này xảy ra khi đối tượng nằm ở gốc. Tôi nghĩ rằng có thể sử dụng Quaternion -> Matrix hoặc Axis/Angle -> chức năng Matrix sẽ giải quyết vấn đề của tôi, nhưng không có con xúc xắc. Có vẻ như có một khái niệm cốt lõi mà tôi không nhận được.
Dù sao, những gì tôi muốn làm là định hướng khối lập phương cho vectơ sản phẩm chéo (màu trắng), sao cho đầu khối lập phương quay về hướng của vectơ đó. Sau đó, tôi muốn xoay khối lập phương dọc theo cùng một trục. Hình ảnh tôi đã đính kèm cho thấy kết quả của nhiều giờ hơn tôi muốn thừa nhận cố gắng đạt được kết quả này. Mã của tôi lỏng lẻo trông như thế này:
axis = Vector3.cross(a, b)
axis.normalize()
angle = 45 * TO_RADIANS;
quat = AxisAngle2Quaternion(axis, angle)
rot = Quaternion2Matrix(quat)
cube.matrix = rot
Cảm ơn trước,
Casey
Edit: Bắt đầu một bounty
Có lẽ tôi đang hiểu lầm thế nào điều này có nghĩa vụ phải công việc. Dưới đây là hình ảnh khác:
Am tôi không chính xác trong suy nghĩ rằng vector magenta đây là trục, và các mũi tên màu cam chỉ xoay xung quanh trục này dựa trên các góc? Bằng cách này hay cách khác, tôi muốn định hướng khối lập phương lục lam dựa trên một số vector hướng và xoay nó. Tôi đang làm gì vậy !?
Không ai phản ứng, nhưng tôi thực sự nghĩ rằng câu hỏi của bạn là một trong những của những công thức tốt nhất tôi đã thấy ở đây cho đến nay. Có lẽ không ai biết? Tôi cũng tò mò muốn xem câu trả lời ở đây. – erikbwork
Có lẽ họ đang tránh xa khỏi khía cạnh Three.js ... Tôi cho rằng đây là một vấn đề khá cơ bản – Casey
Tôi đã có thể tiến gần hơn với phương thức "Utils3D.pointTowards()" trong Flash: http: // help. adobe.com/en_US/AS3LCR/Flash_10.0/flash/geom/Utils3D.html Nhưng tôi không biết cách áp dụng xoay vòng trục và tôi không thể tìm thấy bất kỳ hàm OSS nào có thể so sánh được – Casey