opengl matrix transformationen fuer andere sachen verwenden
-
Hi,
wie kann ich opengl nutzen, um die matrixtransformationen fuer mich zu machen. Ich wollte es so in der art verwenden(pseudo code):
float objectpos[]={ox,oy,oz}; objectorientation={pan,tilt,roll}; glMatrix thetransform = glMultMatrix( glGetTranslateMatrix(0,0,1),glGetRotMatrix(objectOrientation) ); glVecTransform(objectpos, thetransform); //objectpos sollte jetzt eine einheit nach vorne in blickrichtung bewegt worden seindie kommandos sind erfunden, aber ich denke es macht klar, was ich suche.
Geht das mit opengl oder muss ich meinen eigenen matrixcode schreiben?gruss
fatzge
-
ja, das geht mit opengl, bei nehe findest du tutorials zu den verschiedenen transformationen bzw in irgendeiner reference ( http://www.google.com/search?q=opengl+reference )
die matrix kannst du mit
float ViewMatrix[ 16 ]; glGetFloatv(GL_MODELVIEW_MATRIX,ViewMatrix[ );abfragen.
erwarte aber nicht dass es schneller ist als es selbst zu machen, opengl macht das auch nur auf cpu.
-
Diese NeHe seite scheint allgemein sehr hilfreich zu sein - danke dafür. Leider konnte ich nichts für mein Problem finden. Und was du geschriben hast werkelt ja an der Modelview Matrix rum. Aber mit der will ich ja gar nichts machen. Eigentlich würde ich opengl gerne einen eignen vektor und eine eigene matrix geben und den transformierten vektor zurückbekommen. geht das nicht?
oder schlägst du implizit vor, die modelview matrix zweckzuentfremden? wie bekomme ich dann den resultierenden vertex?
-
eignen vektor [...] eigene matrix [...] den transformierten vektor bekommen
wenn du die matrix doch schon hast... warum machst du die multiplikation nicht selbst?
-
naja weil ich dachte das opengl die für mich basteln könnte und ich nur noch sowas sagen muss wie:
Matrix rm = glGetRotMatrix(x,y,z,angle);
Matrix tm = glGetTranslateMatrix(x2,y2,z2);
Matrix final = glMultMatrix(rm, tm);und so weiter... den ganzen kram für shear, projektion und was man alles braucht hat opengl ja vermutl schon, aber ich kanns dummerweise nicht finden. wollte das rad nicht neu erfinden.
-
Einfach irgendwelche Matrizenrechnungen durchzuführen funktioniert mit OpenGL so nicht, da OPenGL eben nur 3 Matrizen (Modelview, Projection, Texture) besitzt. Du kannst das aber so machen, wie rapso beschrieben hat, vorher einfach die Modelview-Matrix pushen und dann wieder pop-en. Evtl. hast du dadurch sogar einen Geschwindigkeitsgewinn, da der Treiber die Matrixoperationen durch SSE/3DNow optimieren kann...
Grüße
Martin
-
ich wuerde dir empfehlen irgend eine fertige matrix/vector lib zu nehmen. bisher seh ich keinen zwingenden grund weshalb du opengl nutzen solltest.
das koennte dir das leben um einiges einfacher machen.