[c++] OpenGL rotatie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BartBlackMagic
  • Registratie: December 2003
  • Laatst online: 06-05 19:24
Ik heb twee puntenwolken waarvan de eerste 0° is gedraaid en de tweede 60°.
Als ik de tweede puntenwolk roteer met een simpele glRotatef geeft dit het gewenste resultaat.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
glDisable(GL_LIGHTING);
      glPushMatrix();
            glRotatef(60, 0.0f, 1.0f, 0.0f);
            glBegin(GL_POINTS);
                for (int i=2;i<numberOfVerticesTest2*3;i+=3)
                {
                    glColor3f(colorsTest2[i-2], colorsTest2[i-1], colorsTest2[i]);
                    glVertex3f(verticesTest2[i-2], verticesTest2[i-1], verticesTest2[i]);
                }
            glEnd();
      glPopMatrix();
glEnable(GL_LIGHTING);

Wanneer ik de punten op voorhand roteer voor 'k ze teken bekom ik (afhankelijk van het aantal graden) een redelijk tot fel vervormde puntenwolk:
C++:
1
2
3
4
posX = posX *  cos((double) 60)
        + posZ *  sin((double) 60);
posZ = posX * -sin((double) 60)
        + posZ *  cos((double) 60);

Weet iemand wat de juiste code is om de puntenwolk te roteren?

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 08-05 21:06
Twee dingen. Ten eerste werken de functies uit de C library met radialen, en niet met graden. Vermenigvuldig je hoeken dus eens met M_PI/180.

Ten tweede is het waarschijnlijk je bedoeling om de punten om de Y-as te roteren. Dat kun je inderdaad doen met:
C:
1
2
x_nieuw = x_oud*cos(hoek) + z_oud*sin(hoek);
z_nieuw = z_oud*cos(hoek) - x_oud*sin(hoek);

Jij doet echter:
C:
1
2
x = x*cos(hoek) + z*sin(hoek);
z = z*cos(hoek) - x*sin(hoek);

Dit werkt niet, want om de nieuwe waarde van z te berekenen heb je de oude waarde van x nodig, maar die heb je het statement hiervoor overschreven.

[ Voor 5% gewijzigd door Soultaker op 19-06-2011 02:33 ]


Acties:
  • 0 Henk 'm!

  • BartBlackMagic
  • Registratie: December 2003
  • Laatst online: 06-05 19:24
Ik liep letterlijk rood van schaamte door dat foutje ivm nieuwPosX & oudPosX :X Wijn en programmeren gaat niet samen ;-) (net is er weer een fles opengetrokken, pa zijn hobby is wijn).
Bedankt voor je hulp, het gebruik van radialen ipv graden was idd ook een fout. Het werkt!