OpenGL - Abstandsberechnungen
-
Hallo, ich habe hier zwei Würfel gezeichnet und möchte deren Abstand bestimmen, wi geht das?
in etwa: glPushMatrix() glRotate() glTranslate() ... mehr Transformationen drawCube() glPopMatrix() glTransalate() glRotate() ... mehr lustige Transformationen drawSecondCube()
Was ich möchte ist der Abstand der beiden Würfel,
gibt es einen Weg ohne obigem Code einen Würfel zu zeichnen um evt leichter Abstandsberechnungen durchführen zu können?
(shader oder ähnliches?)
-
Das hat nicht direkt etwas mit OpenGL zu tun... was verstehst du unter dem Abstand zwischen zwei Würfeln?
-
Also...
ich gehe davon aus dass der "Mittelpunkt" eines Körpers stets im lokalen Nullpunkt liegt.
glTranslate3f( 1.0, 0., 0.); drawCube();
dann ist der Würfel sozusagen um 1 in x-Richtung verschoben.
Die Frage ist nun wie ich bei verschiedenen Objekten und vorherigen verschiedenen Transformationen die Position in einem "globalen" Koordinatennetz hätte.
Daraus den Abstand zu berechnen sollte kein Problem mehr sein, solange ich eben Koordinaten habe mit denen ich rechnen kann.
Wahrscheinlich ists wieder sehr einfach, aber ich komm einfach nicht drauf...
-
kleiner push...
mir fällt bisher nichts anderes ein, als die Matrix nach den Transformationen per Hand zu berechnen und den 0-Punkt damit zu multiplizieren.
Das dürften dann "absolute" koordinaten sein.Soweit ich mich entsinne gibt es keine Möglichkeit sich OpenGLs Matrix anzeigen zu lassen?
Oder eine komplett andere Variante?
-
glGetMatrix
du multiplizierst also mit 0 0 0 und 1, ja?
-
Ja also im Grunde genommen brauche ich die letzte Spalte ^^
Mit shadern habe ich mich bisher noch nicht ausführlich beschäftigt, aber als kleiner Spoiler vielleicht:
Shader können ja soviel ich weiß ebenfalls Transformationen durchführen (ich erinner mich an einen lustigen LSD-Shader)
wie bekomme ich die Werte aus dem Shader in normale Variablen?(Allein die Frage beweist wahrscheinlich dass ich davon keine Ahnung habe ^^)
Oder nochmal anders:
wenn ich Abstände in OpenGL benötige, ist das was ich vorhabe der richtige Weg oder liegt da ein Denkfehler oder gehts einfacher?