Obracanie obiektu w opengl.

0

Utworzyłem sobie szlaban - sama belka rysuje się osobną funkcją. Chciałbym animować to tak, żeby się otwierał tak jak szlaban. Jednak przy glRotatef obraca się cała belka według wybranego wektora, a chciałbym żeby jej oś obrotu nie była na środku czy gdzie tam teraz jest, ale przy jednym z jej końców. Gdzie szukać błędów?

glPushMatrix();
    glRotatef(-obrot, 0, 0, 0.6);
    szlaban_anim();
    glPopMatrix(); 
0

Wystarczy poszukać w Google opengl rotate origin. Trzeba najpierw użyć glTranslatef a dopiero potem glRotatef.

0

Obraca się w końcu miejscu w którym chcę, ale od razu jest inny problem.

 
if (obrot < 90 && start == true){
    glPushMatrix();
    glTranslatef(1.15,0.46,0);
    glRotatef(-obrot, 0, 0, 1);
    glTranslatef(-1.15,-0.46,0);
    szlaban_anim();
    glPopMatrix();}

szlaban_anim() czyli funkcja rysująca belkę znika po skończeniu obrotu, bo jest w ciele if-a, jeśli dam ją poza nim, to na koniec obrotu przeskakuje do pozycji początkowej. Jak to naprawić, żeby pamiętała swoją ostatnią zmianę położenia?

0
glPushMatrix();
    glTranslatef(1.15,0.46,0);
    glRotatef(start && obrot < 90 ? -obrot : 90, 0, 0, 1);
    glTranslatef(-1.15,-0.46,0);
    szlaban_anim();
glPopMatrix();

skoro jej nie rysujesz to jak ma się pojawić?

0
     if (obrot < 80){              
    glTranslatef(1.15,0.46,0);
    glRotatef(-obrot, 0, 0, 1);
    glTranslatef(-1.15,-0.46,0);
    szlaban_anim();}
    else {glTranslatef(1.15,0.46,0);
    glRotatef(-80, 0, 0, 1);
    glTranslatef(-1.15,-0.46,0);
    szlaban_anim();}

Taki kod działa tak jak chcę : )

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