bimbo
12-04-2004, 15:52
Meine figur soll um beliebige achsen rotierbar sein, dazu hab ich 3 Richtungen definiert, (v_dir, v_updir, v_strafe) das alles sind normalisierte vektoren, die mir die rotation des objektes angeben. sie repräesentieren die Z-,Y- und X-Achse des Objektkoordinatensystems.
Spieltechnisch funktioniert das auch wunderbar, ich habe aber probleme OpenGL die gewünschten rotationsmatrizen mitzuteilen.
gedacht ist folgendes:
void draw()
{
glPushMatrix();
glTranslatef(posX,posY,posZ);
rotiereObjekt();
my_Model->render();
glPopMatrix();
}
das rotiereObjekt_mit_glRotate_aufrufen(void) hab ich mitlerweile auf 4 verschiedene Arten gemacht, aber keine funktioniert wie gewünscht.
Meine 2 favourites funktionieren so:
//Variante 1
void rotiereObjekt(void)
{
berechne Winkel zwischen v_dir und (0,0,1) // v_dir=Objektkoordinaten Z-Achse
rotAchse = normale von v_dir (0,0,1);
rotiere v_updir und v_strafe um (winkel,rotAchse);
glRotatef(Winkel,rotAchse.x,rotachse.y,rotachse.z) ;
...//und so weiter mit den anderen achsen
}
//Variante 2
void rotiereObjekt(void)
{
Vector a = projeziere v_dir in XZ-Ebene;
cos(A) = a.z;
winkel = Bogenmaß2Grad(cos(A));
glRotatef(winkel,0,1,0);
...//usw.
}
Ist es überhaupt klug, das was ich will so zu machen? welche Varianten gibts noch(ausser mir die drehwinkel immer zu merken)?
ich hock jetzt schon 3 tage vor dem sch* und komm nicht recht weiter.
lg, bimbo.
Spieltechnisch funktioniert das auch wunderbar, ich habe aber probleme OpenGL die gewünschten rotationsmatrizen mitzuteilen.
gedacht ist folgendes:
void draw()
{
glPushMatrix();
glTranslatef(posX,posY,posZ);
rotiereObjekt();
my_Model->render();
glPopMatrix();
}
das rotiereObjekt_mit_glRotate_aufrufen(void) hab ich mitlerweile auf 4 verschiedene Arten gemacht, aber keine funktioniert wie gewünscht.
Meine 2 favourites funktionieren so:
//Variante 1
void rotiereObjekt(void)
{
berechne Winkel zwischen v_dir und (0,0,1) // v_dir=Objektkoordinaten Z-Achse
rotAchse = normale von v_dir (0,0,1);
rotiere v_updir und v_strafe um (winkel,rotAchse);
glRotatef(Winkel,rotAchse.x,rotachse.y,rotachse.z) ;
...//und so weiter mit den anderen achsen
}
//Variante 2
void rotiereObjekt(void)
{
Vector a = projeziere v_dir in XZ-Ebene;
cos(A) = a.z;
winkel = Bogenmaß2Grad(cos(A));
glRotatef(winkel,0,1,0);
...//usw.
}
Ist es überhaupt klug, das was ich will so zu machen? welche Varianten gibts noch(ausser mir die drehwinkel immer zu merken)?
ich hock jetzt schon 3 tage vor dem sch* und komm nicht recht weiter.
lg, bimbo.