Ich habe im Orange Book und auf OpenGL.org gelesen, dass ich die Matrix per glGetUniform auslesen kann, jedoch nur Spaltenweise. Aber weiss nicht genau wie. Und wie ersetze ich das cgGLSetMatrixParameter?
In OpenGL 2.x gibt es noch die eingebauten Uniforms, in diesem Fall brauchst du wohl gl_ModelViewProjectionMatrix. Diese Matrix kommt ganz normal vom OpenGL-Matrixstack. Aus dem CG_GL_MATRIX_IDENTITY schließe ich mal das hier die Einheitsmatrix gesetzt wird, also das wohl ca. das hier:
Code:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
In dem Zusammenhang siehe natürlich auch glLoadMatrix. Im Shader ist das dann wie gesagt gl_ModelViewProjectionMatrix.
Alternativ kannst du natürlich auch ein eigenes Uniform vom Typ mat4 definieren und dort die Matrix entsprechend übergeben. Ab OpenGL 3.3 (?) musst du das sogar. Ein solches lässt sich dann via glUniformMatrix setzen.
Nachtrag/Edit: glGetUniform ist zum auslesen der Uniform-Variable da. Wegen dem "Set" nehme ich an du willst schreiben, nicht lesen.
http://http.developer.nvidia.com/Cg/cgG ... meter.html So wie ich das verstehe (ohne den geringsten Peil von Cg zu haben) übernimmt dein Aufruf von cgGLSetStateMatrixParameter die ModelviewProjection-Matrix von OpenGL und übergibt sie an die Uniformvariable mit dem Namen "ModelViewProj". Hier wird also gar nicht, wie ich im ersten Post vermutet hatte die Matrix direkt gesetzt, sondern eben nur die Anweisung gegeben die Matrix von OpenGL zu übernehmen.
Der einfachste Weg ist entsprechend sämtliche Vorkommen von "ModelViewProj" im Shader durch "gl_ModelViewProjectionMatrix" zu ersetzen. Auf Seiten des Clients, also in deinem normalen Code musst du nichts weiter machen. Dieses Vorgehen funktioniert solange es den OpenGL-Matrixstack noch gibt. Wie zuvor erwähnt wurde dieser mit OpenGL 3.0 als deprecated eingestuft und mit OpenGL 3.3. entfernt.
Für den Fall das du mit einer neueren OpenGL-Version arbeitest (würdest du wissen weil du das explizit angeben musst): Dort wird die ModelViewProjection-Matrix von deinem eigenen Code verwaltet, eben nicht mehr von OpenGL! Das liegt daran das die meisten professionellen Entwickler (wenn nicht alle) die OpenGL-Mathefunktionen eh durch eigene ersetzt hatten.
Code:
// hier ModelViewProjectionMatrix sinnvoll setzen
// an Shader übergeben
loc := glGetUniformLocation(ProgObject,PAnsiChar('ModelViewProj'));
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.