Hey, cerchiamo di rallentare un po 'qui :) Sì, è vero che si riceve la matrice da glGetFloatv(GL_MODELVIEW_MATRIX, ptr)
. .. Ma non è assolutamente quello che dovresti fare qui!
Mi spiego:
In GLSL, built-in variabili come gl_ModelViewProjectionMatrix
o funzioni come ftransform()
sono deprecate - che è di destra, ma è solo perché l'intero stack matrice è deprecato in GL 3.x e dovresti usare il tuo matrix stack (o usare qualsiasi altra soluzione, uno stack matrix è utile ma non è obbligatorio!).
Se si utilizza ancora lo stack matrix, si fa affidamento sulla funzionalità da OpenGL 2.xo 1.x. Va bene visto che tutto questo è ancora supportato su schede grafiche moderne a causa del profilo di compatibilità GL - è bene passare a una nuova versione GL, ma per ora puoi stare con questo.
Ma se si utilizza una versione precedente di OpenGL (con stack matrix), utilizzare anche una versione precedente di GLSL. Prova 1.2, perché le versioni superiori (incluso la 1.5) sono progettate per essere compatibili con OpenGL3, dove cose come le matrici di proiezione o modelview non esistono più in OpenGL e dovrebbero essere passate esplicitamente come variabili personalizzate, definite dall'utente uniform
se necessario .
La corrispondenza tra le versioni di OpenGL e GLSL usato per essere un po 'complicato (prima ripulito la versione di numerazione per abbinare), ma dovrebbe essere più o meno simile a:
GL GLSL
4.1 - 4.1
4.0 - 4.0
3.3 - 3.3
3.2 - 1.5
3.1 - 1.4
3.0 - 1.3
2.x and lower - 1.2 and lower
Insomma, per farla short - le uniformi built-in shader sono deprecate perché anche la funzionalità corrispondente in OpenGL è deprecata; o vai per una versione più alta di OpenGL o una versione precedente di GLSL.
+1 Questo è un punto eccellente che hai sollevato! – Stringer
Quindi, con lo stack matriciale svalutato, non sono sicuro di quale dovrebbe essere il nuovo approccio. Nel nostro vecchio codice abbiamo applicato le trasformazioni agli oggetti istanziati e resi ciascuno da una funzione comune. Quindi sembra che ora per farlo funzionare avrei bisogno di aggiornare manualmente la matrice modelView dopo ogni trasformazione. Qual è il nuovo paradigma per fare questo? – Nigel
Se si desidera uno stack matrix in GL3 +, creare un 'std :: vector' e passare l'oggetto matrice più in alto con 'glUniformMatrix4fv'. Puoi averne parecchi e sei in grado di decidere come utilizzare ognuno dei tuoi ombreggiatori. –
Kos