Czy da się zrobić rotację w funkcji?

0

Da się zrobić rotację w funkcji czy trzeba robić klase lub strukture? Mam takie coś:

void kule(GLfloat srednica, GLfloat odl)
{
    glPushMatrix();
    glPushMatrix();
    glTranslatef(0, 0.0, 0);
    glRotatef(0, 0.0f, 1.0f, 0.0f);
    glPopMatrix();
            glTranslatef(odl, 0.0, 0);
            gluSphere(quadric, srednica, 500.0, 500);
    glPopMatrix();

ale nie działa.

1

Da się.

Ale to co robisz teraz nie będzie miało efektu na rysowanie kuli, ponieważ:

  • rotację trzymasz między glPushMatrix(), glPopMatrix(),
  • do rotacji nie przekazujesz żadnego kąta.

Zakładam, że chcesz zrobić coś jakby planetę kręcącą się wokół słońca:

void kule(GLfloat srednica, GLfloat odl, GLfloat angle)
{
    glPushMatrix();
    glTranslatef(0, 0.0, 0); // pozycja srodka obrotu w przestrzeni 3D
    glRotatef(angle, 0.0f, 1.0f, 0.0f); // obrot wzgledem srodka obrotu
    glTranslatef(odl, 0.0, 0); // przesuniecie wzgledem srodka obrotu
    gluSphere(quadric, srednica, 500.0, 500); // rysowanie wyprzesuwanej, wyobracanej kuli
    glPopMatrix();

Jeśli kula ma się obracać, to trzeba jako parametr angle podawać kąt (zadeklarowany globalnie, żeby nie tracił wartości z każdym obrotem pętli), który gdzieś poza funkcją jest zwiększany.

0

glPushMatrix();
glTranslatef(0, 0.0, 0);
glRotatef(0, 0.0f, 1.0f, 0.0f);
glPopMatrix();

To nie ma sensu, bo translate/rotate tracisz przy PopMatrix.

Zazwyczaj stosuje się kolejność:

glPushMatrix();
    // transformacje: Translate / Rotate / Scale
    // obiekty (Vertex, gluSphere itp.)
glPopMatrix();

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