Im próbuje zrobić prosty obrót sześcianu o xi osi y:OpenGL kwaterniony obrotu matryca
Chcę zawsze obracać sześcian nad osi x o kwotę x i obracać sześcian nad yAxis przez niezależny ilość y osi obrotu x
pierwszy naiwny tak:
glRotatef(x,1,0,0);
glRotatef(y,0,1,0);
następnie
ale że najpierw obraca OV er x następnie obraca się nad y Chcę obrócić nad y niezależnie od dostępu x.
zacząłem patrząc kwaterniony, więc próbowałem:
Quaternion Rotation1;
Rotation1.createFromAxisAngle(0,1, 0, globalRotateY);
Rotation1.normalize();
Quaternion Rotation2;
Rotation2.createFromAxisAngle(1,0, 0, globalRotateX);
Rotation2.normalize();
GLfloat Matrix[16];
Quaternion q=Rotation2 * Rotation1;
q.createMatrix(Matrix);
glMultMatrixf(Matrix);
że właśnie robi prawie dokładnie to, co zostało osiągnięte robi 2 kolejne glRotates ... więc myślę, że im brakuje krok lub 2.
to jest kwaternictwo, czy powinienem użyć czegoś innego? ORAZ jeśli w kwaterach głównych chodzi o to, jakie kroki mogę dodać, aby kostka obracała się niezależnie od każdej osi. Myślę, że ktoś inny ma ten sam problem: Rotating OpenGL scene in 2 axes
ok powiem to w ten sposób ... to, co chcę zrobić, to obracać sześcian za pomocą myszki. Chcę w lewo, aby kontrolować ekrany obrotu osi Y, a następnie w górę, aby sterować obrotami osi x ekranów. Chcę, aby obracały się niezależnie od innej osi, ale obracały się tylko na globalnej osi ekranu. Jeśli wykonam 2 glRotacje, nie otrzymam takiego zachowania, ponieważ obrót jednej osi mutlikuje drugi. – yeahdixon
Na przykład obracanie kostki: żadne operacje obracania nie pokazują tylko jednej strony następnie robię glRotatef (90, 1, 0, 0); \t glRotatef (45,0,1,0); \t gives daje mi przechyloną kostkę (diament), gdy chcę sześcian, który miał swój narożnik skierowany w stronę kamery, który byłby faktycznie wynikiem zamiany operacji: \t glRotatef (45,0,1,0); \t glRotatef (90,1,0,0); Po prostu zamieniłabym polecenia rotacji, ale to działa na te same problemy, gdy wartości kątów są odwracane. – yeahdixon