2011-06-22 41 views
7

trong GLScene chúng tôi có ba tham số (RollAngle, PitchAngle và TurnAngle) để xoay quanh hướng địa phương. trong hình bên dưới, làm thế nào tôi có thể xoay khối lập phương quanh hướng toàn cầu (trục cam)?Xoay vòng toàn cầu

enter image description here

+3

Với ảnh chụp màn hình như thế này, bạn không có lựa chọn nào khác ngoài để nêu lên câu hỏi :) –

+0

'@Wouter van Nifterick' xin lỗi, tôi không hiểu bạn, ý bạn là gì? – Ata

+0

GLScene là gì? Thông thường tôi muốn nói đơn giản chỉ cần làm glRotatef (góc, rot_axis.x, rot_axis.y, rot_axis.z), hoặc một số chuyển đổi tương đương. – datenwolf

Trả lời

3

Có thể bạn có thể sử dụng đối tượng "DummyCube" làm cha mẹ. Sau đó, bạn có thể xoay đầu tiên khối lập phương bên trong khối giả và sau đó là DummyCube.

+0

Cảm ơn bạn đã nâng cao. Có, bạn hoàn toàn đúng. – Ata

7

Bạn cần chuyển đổi góc xoay trục sang góc Euler. Dưới đây là một liên kết để giải thích quá trình này một cách chi tiết với mã:
http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToEuler/index.htm

Từ bài viết:

yaw = atan2(y * sin(angle)- x * z * (1 - cos(angle)) 
       , 1 - (y2 + z2) * (1 - cos(angle))) 

pitch = asin(x * y * (1 - cos(angle)) + z * sin(angle)) 

roll = atan2(x * sin(angle)-y * z * (1 - cos(angle)) 
      , 1 - (x2 + z2) * (1 - cos(angle))) 

EDIT: Đổi tên các biến để phù hợp với công ước pitch, yaw, cuộn đặt tên.

+0

@ Mikola, tôi đã kiểm tra trang web được đề xuất của bạn. Tôi nghĩ đoạn mã dưới đây là ý của bạn: 'tiêu đề = atan2 (y * sin (góc) - x * z * (1 - cos (góc)), 1 - (y2 + z2) * (1 - cos (angle))) '--- ' thái độ = asin (x * y * (1 - cos (góc)) + z * sin (góc)) '--- ' bank = atan2 (x * sin (góc) -y * z * (1 - cos (góc)), 1 - (x2 + z2) * (1 - cos (góc))) ' – Ata

+0

bạn có thể giải thích mã này không? – Ata

+2

Chào mừng bạn đến với 3d Geometry. –

1

Đây là một cheat bẩn, nhưng nếu đối tượng có nguồn gốc (0,0,0) và chỉ có một đối tượng trong cảnh, bạn có thể xoay camera (và nguồn ánh sáng) xung quanh đối tượng thay vì xoay đối tượng.

+0

Theo như tôi biết, chúng tôi nên sử dụng một số chuyển đổi giữa định hướng địa phương và định hướng toàn cầu. Vâng, bạn nói đúng. nhưng tôi muốn biết làm thế nào tôi có thể sử dụng thuật toán toán học để xoay đối tượng xung quanh định hướng toàn cầu. Tôi nghĩ rằng tôi nên sử dụng góc Euler. nhưng làm thế nào ... – Ata