Rotacja względem ruszającego się obiektu.

0

Witam, otóż mam (chyba) prosty problem z program graf. w opengl. Chce zasymulować ruch skrzydeł. Podzieliłem je na 2 części tak aby mogły one poruszać się niezależnie. I tak z rotacją pojedynczej części nie mam problemu. Problem pojawia się gdy chcę wychylić drugą część względem wychylonej już części pierwszej. Nie mam pojęcie jak obliczyć pkt względem którego mam dokonać rotacji. Prosty schemat problemu :

-- ( pozycja początkowa)
_/ ( to jest OK )
_
  \ ( to jest OK )

 /
/

\
 \  ( przy tych przypadkach pojawia się problem)

Może trochę źle to wygląda bo akurat sytuacją na tym rysunku umiem zrealizować ( przesunięcie obu obiektów wokół tej samej osi razem ). Jednak ja chcę aby tą drugą część wychylić o inny kąt niż tą pierwszą.
Próbowałem czegoś takiego :

 
glTranslatef(0,1.15+cos(a),sin(a));
glRotatef(2*a,1,0,0);
glTranslatef(0,-1.15-cos(a),-sin(a));

gdzie a to kąt wychylenia pierwszej części a 1,15 to przesunięcie jakiego muszę dokonać przy zerowym wychyleniu części pierwszej.
Mam nadzieję, że w miare jasno to wyjaśniłem. Proszę o pomoc i pozdrawiam.

0

Nie mam pojecia co chcesz osiagnac, ale jesli chodzi Ci o cos takiego:

C
\
 \
  \B______A
  • A obraca sie wzgledem B. - aktualna pozycja: theta1
  • B obraca sie wzgledem C (ciagnac ze soba A) - aktualna pozycja: theta2
  • |CB|=r2
  • |BA|=r1

to wykonujesz operacje w takiej kolejnosci:

  • wstawiasz obiekt A
  • przesuniecie o r1
  • rotacja o theta1
  • wstawiasz obiekt B (lub przed rotacja, zalezy od Ciebie)
  • przesuniecie o r2
  • rotacja o theta2

nigdzie w zadnej pozycji nie musisz obliczac wspolrzednych za pomoca funkcji trygonometrycznych, openGL obliczy za Ciebie

0

Od tego jest PushMatrix/PopMatrix żeby przekształcenia robić lokalnie (względem poprzedniego obiektu, nazwijmy to).

1 użytkowników online, w tym zalogowanych: 0, gości: 1