2011-06-22 20 views
7

w GLScene mamy trzy parametry (RollAngle, PitchAngle i TurnAngle) dla obrotu wokół orientacji lokalnej. na obrazku poniżej, w jaki sposób mogę obrócić sześcian wokół orientacji globalnej (oś pomarańczowa)?Global Rotation

enter image description here

+3

Z tym zrzutem ekranu nie pozostawia mi innego wyboru, jak tylko odpowiedzieć na pytanie :) –

+0

'@Wouter van Nifterick' przepraszam, nie rozumiem cię, co masz na myśli? – Ata

+0

Co to jest GLScene? Normalnie powiedziałbym po prostu glRotatef (angle, rot_axis.x, rot_axis.y, rot_axis.z), lub jakąś równoważną transformację. – datenwolf

Odpowiedz

3

Może mógłbyś użyć obiektu "DummyCube" jako obiektu nadrzędnego. Następnie możesz obrócić najpierw kostkę wewnątrz kostki manekina, a następnie DummyCube.

+0

Dzięki za Advanced. Tak, masz całkowitą rację. – Ata

7

Trzeba by przekształcić Kąt obrotu osi do kątów Eulera. Oto link wyjaśnienia tego procesu w niektórych szczegółach z kodem:
http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToEuler/index.htm

Z artykułu:

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: przemianowany na zmienne być zgodne z konwencją pitch, yaw, rolka nazewnictwa.

+0

@ Mikola, sprawdziłem twoją sugerowaną stronę. Myślę, że poniższy kod to: 'heading = atan2 (y * sin (kąt) - x * z * (1 - cos (kąt)), 1 - (y2 + z2) * (1 - cos (kąt))) '--- ' attitude = asin (x * y * (1 - cos (kąt)) + z * sin (kąt)) '--- ' bank = atan2 (x * sin (kąt) -y * z * (1 - cos (kąt)), 1 - (x2 + z2) * (1 - cos (kąt))) " – Ata

+0

Czy możesz wyjaśnić ten kod? – Ata

+2

Witamy w 3d geometrii. –

1

To jest brudny cheat, ale jeśli obiekt jest na początku (0,0,0) i jest tylko jeden obiekt w scenie, można obrócić kamerę (i źródło światła) wokół obiektu, zamiast obracanie obiektu.

+0

O ile mi wiadomo, powinniśmy użyć konwersji między orientacją lokalną a orientacją globalną. Tak masz rację. ale chcę wiedzieć, w jaki sposób mogę użyć algorytmu matematycznego, aby obrócić obiekt wokół orientacji globalnej. Myślę, że powinienem użyć kątów Eulera. ale jak ... – Ata