Positionierungen im Raum (OpenGL)
-
Hallo zusammen !
Ich hab da folgendes Problem, also..
Ich arbeite mit ODE und OpgenGL, ich möchte um einige Quader erstellen und diese dann mit einer Partikelhülle umhüllen, die Partikel sollen dabei auf der Weltmatrix operieren, also ihre Flugrichtung soll sich nicht mit den objekt mitdrehen (Feuer effekt).
Mein jetztiges Hauptproblem ist das ich die Feuerhülle nicht um die Quader bekomme...
Ich versuch mal die wichtigsten Teile meines Codes aufzulisten:
void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); dSpaceCollide(Space, 0, &nearCallback); dWorldQuickStep(world, 0.015); dJointGroupEmpty(contactgroup); ... //Hier geht das zeichnen los, davor wurde die Weltmatrix nicht geändert, //es wird ein quader gezeichnet, davor bestimme ich seine Position und Rotation anhand der Matrix m. glPushMatrix(); const dReal *p = dBodyGetPosition(o->body); const dReal *r = dBodyGetRotation(o->body); float m[16]; m[ 0] = r[ 0];m[ 1] = r[ 4];m[ 2] = r[ 8];m[ 3] = 0; m[ 4] = r[ 1];m[ 5] = r[ 5];m[ 6] = r[ 9];m[ 7] = 0; m[ 8] = r[ 2];m[ 9] = r[ 6];m[10] = r[10];m[11] = 0; m[12] = p[ 0];m[13] = p[ 1];m[14] = p[ 2];m[15] = 1; glMultMatrixf(m); dVector3 lengths; dGeomBoxGetLengths(o->geom,lengths); glScalef(lengths[0],lengths[1],lengths[2]); glutSolidCube(1.0f); // Nun lade ich die Identitäts Matrix multiplizier sie wieder mit m und speicher sie ab. //Dies mache ich weil ich "mat" später als weltmatrix für die Partikelhülle brauche. (Ich vermute hier irgendwo liegt der Fehler) glLoadIdentity(); glMultMatrixf(m); glGetFloatv( GL_MODELVIEW_MATRIX, mat ); glPopMatrix(); .... Particle->draw(); //Partikel wird gezeichnet .... if (Particle->lifeover){ //Wenn Partikel ausgebrannt, start er er neu auf der Oberfläche der Hülle GLfloat T[3]; //Zufallspunkt auf der Hülle (Zylinder) T[0] = (float (rand()% (int) ((quaderlänge)*100) ))/ 100 ; T[1] = ywert*radius; T[2] = zwert*radius; vec[3] = transform(mat,T); //Transformation mit vorher gespeicherten Weltmatrix Particle = new Particle(vec[0],vec[1],vec[2]); //Partikel entsteht auf dieser stelle } }So, nun hab ich das Problem das die Hülle nicht um den Quader ist, sondern irgendwo anders im Raum (meist irgendwo daneben) mit völlig anderen Winkeln und bei Bewegung des Quaders bewegt sie sich zwar auch aber in ganz andere Richtungen.
Ich vermute ich hab mit der Matrix Multiplikation irgendwas falsch gemacht, leider komm ich drauf was... hoffe jemand kann mir einen Tip geben

mfg Mari2k