Einfache Aufgabe, großes Problem
-
Moin! Ich benutze OGL. Nun habe ich 2 Punkte, welche durch einen cylinder mit einander verbunden werden sollen (gluCylinder). Naja, ich habs mit gluLookAt versucht, jedoch ohne Erfolg... kann mir jemand mal nen Lösungsansatz geben?
MfG DasPinsch
-
Nimm den Vector von den 2 Punkten, und rechne dir zum 0 Punkt die rotation aus. Dann rotierst du wie gewohnt mit glRotatef oder einer eigenen Matrix func.
-
hmmm und wie? sorry, habe mich vorher noch nicht mit 3d beschäftigt...
-
*push*
-
Ich würde auch eine Welt Matrix für den Zylinder berechnen. Die Position ist enfach:
VEKTOR punktMitte = ( punkt1 + punkt2 ) * 0.5f;
Ich geh mal davon aus, dass Du weißt wie Du die Matrix aufbauen musst. (Ich kenn mich in OGL nicht aus, und vielleicht ist es da ja anderst als in D3D )
Für die Winkel brauchst Du den Verbindungvektor der beiden Punkte:
VEKTOR vVerbindung = punkt1 - punkt2;
Jetzt kann man für jede Dimension den Winkel mit dem Scalarprodukt berechnen. Also vVerbindung * [1,0,0] als Beispiel für die X-Achse.
Die drei Ergebnisse in die Matrix einrechnen, fertig.
-
Ich habe es immer noch nicht hingekriegt, kann denn keiner vielleicht ein wenig code posten?
Habs mit glRotatef versucht, werde es morgen genauer erleutern, gehe jetzt pennen, n8
-
Hatte deine Frage schon ganz vergessen. Aber in einem Anderen Forum hab ich gerade eine Vectoren Frage gesehen, und poste dir mal den Link: http://www.flipcode.com/geometry/
Weitere Grundlagen gibts auf www.gamedev.net
Hope this helps
Sven
-
Original erstellt von SnorreDev:
**Hatte deine Frage schon ganz vergessen. Aber in einem Anderen Forum hab ich gerade eine Vectoren Frage gesehen, und poste dir mal den Link: http://www.flipcode.com/geometry/Weitere Grundlagen gibts auf www.gamedev.net
Hope this helps
Sven**Ok, werde das dann mal durcharbeiten, ist ja besser das zu verstehen als nur dumpf abzutippen... Das Problem ist halt dass ich erst inner 8ten bin und man da sowas noich nicht macht :o
-
Ja sauber, ich habs geschafft!!!
Sollte es jemanden Interessieren:
// Dies Wird Einmal Berechnet for(int l=0;l<lineCount;++l) { float dx=abs(lines[l].x2-lines[l].x1), dy=abs(lines[l].y2-lines[l].y1), dz=abs(lines[l].z2-lines[l].z1); if(lines[l].z1<lines[l].z2) { float tX=lines[l].x1, tY=lines[l].y1, tZ=lines[l].z1; lines[l].x1=lines[l].x2; lines[l].y1=lines[l].y2; lines[l].z1=lines[l].z2; lines[l].x2=tX; lines[l].y2=tY; lines[l].z2=tZ; } lines[l].rotX=360.0f/myPi2*asin(dy/sqrtf(pow(dx, 2)+pow(dy, 2)+pow(dz, 2))); lines[l].rotY=(dx==0&&dz==0) ? 0.0f : 360.0f/myPi2*(asin(dx/sqrtf( pow(dx, 2)+pow(dz, 2)))); if(lines[l].x1>lines[l].x2) lines[l].rotY*=-1.0f; if(lines[l].y1>lines[l].y2) lines[l].rotX*=-1.0f; lines[l].length=sqrtf(pow(dx, 2)+pow(dy, 2)+pow(dz, 2)); } // In jedem Frame Wird Dann Aufgerfufen: GLUquadricObj *quadratic; quadratic=gluNewQuadric(); gluQuadricNormals(quadratic, GLU_SMOOTH); for(int l=0;l<lineCount;++l) { glColor3f(lines[l].color.r, lines[l].color.g, lines[l].color.b); glPushMatrix(); glTranslatef(lines[l].x1, lines[l].y1, lines[l].z1); glRotatef(180.0f, 1.0f, 0.0f, 0.0f); glRotatef(lines[l].rotY, 0.0f, 1.0f, 0.0f); glRotatef(lines[l].rotX, 1.0f, 0.0f, 0.0f); gluCylinder(quadratic, 0.15f, 0.15f, lines[l].length, 8, 1); glPopMatrix(); } gluDeleteQuadric(quadratic);
[ Dieser Beitrag wurde am 10.06.2003 um 16:24 Uhr von DasPinsch editiert. ]