000
04.06.2004, 19:15 Uhr
~The Death
Gast
|
Hallo an alle!!
Ich habe ein problem
Undzwar habe ich ein programm geschrieben bei dem eine Linie gezeichnet wird und diese linie soll immer auf mich zeigen wenn ich mich bewege.
Ich habe dazu OpenGl benutzt! Mein problem ist: wenn ich versuche die Linie nun in z.b. x richtung zu bewegen hauts ma die ganzen berechnungen zusammen. Ich versuche nämlich eine Engine zu schreiben damit sich objekte auf mich zu drehen und los gehen (sozusagen verfolgen) wie bei ego shooter spielen.
Ich habe es mit Vektoren gemacht undzwar wird eine linie mit zwei punkten erzeugt dann wird auf einen punkt dieser gerade zwei normale vektoren dazu gezeichnet dann wird der vektor von punkt 1 zu mir berechnet dann vektor von punkt 1 zu punkt 2 (also gerade) dann wird der winkel berechnet und wenn er größer als 0 ist wird die gerade gedreht (mit der parameterdarstellung des kreises)
hier ist der code
Code: |
PPvx=px-p2x; /x von Vektor punkt 1 zu punkt 2 PPvz=pz-p2z; /z von Vektor punkt 1 zu punkt 2
p2x=sin(Winkel2)*(sqrt((PPvx*PPvx)+(PPvz*PPvz))); /Parameterdarstellung eines kreises p2z=cos(Winkel2)*(sqrt((PPvx*PPvx)+(PPvz*PPvz)));
Pmichx=Ichposx-px; /x von Vektor ich zu punkt1 Pmichz=Ichposz-pz; /z von Vektor ich zu punkt1 glPushMatrix();
//s+=0.0009f; //px+=s; //p2x+=s; //ah=-PPvz; //PPvz+=s;
glBegin(GL_LINES); glVertex3f(px,py,pz); // Gerade glVertex3f(p2x,p2y,p2z);
glVertex3f(px,py,pz); //Normale dazu glVertex3f(px+(-PPvz),p2y,pz+PPvx);
glVertex3f(px,py,pz); //Normale dazu in andere Richtung glVertex3f(px+(PPvz),p2y,pz+(-PPvx)); glEnd();
PPvl2x=Ichposx-(-PPvz); // Diese Codes sind da um zu wissen in welche Richtung sich dann die gerade drehen soll (Vektoren von den normalen zu mir werden berechnet)
PPvl2z=Ichposz-PPvx; PPvbl2=sqrt((PPvl2x*PPvl2x)+(PPvl2z*PPvl2z));
PPvl3x=Ichposx-PPvz; PPvl3z=Ichposz-(-PPvx);
PPvbl3=sqrt((PPvl3x*PPvl3x)+(PPvl3z*PPvl3z)); glPopMatrix();
Winkel=acos((Pmichx*PPvx+Pmichz*PPvz)/( (sqrt((Pmichx*Pmichx)+(Pmichz*Pmichz)))* (sqrt((PPvx*PPvx)+(PPvz*PPvz)))));
if(Winkel>0.01f) { Winkel-=0.01f; if(PPvbl2>PPvbl3) Winkel2+=0.01f; else Winkel2-=0.01f; } if(Winkel>0.01f) { Winkel-=0.01f; if(PPvbl2>PPvbl3) Winkel2+=0.01f; else Winkel2-=0.01f; } if(Winkel>0.01f) { Winkel-=0.01f; if(PPvbl2>PPvbl3) Winkel2+=0.01f; else Winkel2-=0.01f; }
|
Wenn ihr wisst wie ich das hinkriegen kann oder wie es besser geht oder wenn ihr schon code für sowas wisst bitte ich euch meldet euch
DANKE |