2017-10-11 4 views
1

J'ai cet uniforme en GLSLOpenGL ES: changer une partie de la matrice-vecteur dans GLSL du côté client

uniform mat4 u_MVPMatrix[64]; 

qui est rempli de 64 matrices

son utilisé pour transformer 64 formes dans mon jeu. Cela fonctionne bien !!!

Ma question s'il est possible de changer une partie de ce vecteur-matrice si je veux par exemple faire pivoter ou redimensionner une certaine image-objet? Pourrais-je utiliser la méthode:

glUniformMatrix4fv(int location, int count, boolean transpose, float[] value, int offset) 

?

Je ne comprends pas l'argument offset, je pensais qu'il était utilisé comme un offset dans la matrice-vec dans glsl mais évidemment pas?

GLES30.glUniformMatrix4fv(mMVPMatrixHandleEyes, 1, false, mMVPMatrixEyes, 1); 

Si je change l'argument offset je reçois une exception:

java.lang.IllegalArgumentException: length - offset < count*16 < needed 
                       at android.opengl.GLES20.glUniformMatrix4fv(Native Method) 

Quelle est la solution à ce problème? Devrais-je plutôt me concentrer sur le côté GPU? Mais pourrait-on changer d'uniforme?

Répondre

2

Les réseaux uniformes de glsl sont garantis avoir des emplacements consécutifs. L'uniforme u_MVPMatrix[i] a donc l'emplacement mMVPMatrixHandleEyes + i. Cet emplacement peut être utilisé pour définir une seule matrice (ou plusieurs matrices consécutives) en la passant à glUniformMatrix4fv.

Le paramètre offset, en revanche, est un décalage dans le tableau float [] transmis, pas dans le tableau glsl.

+0

merci je vais regarder dans ce dès que possible :-) Peut accepter un upvote si cela fonctionne – java

+0

bien ... MERCI !!!!!!!!!!!!!!!!! – java