2 votes

Y a-t-il un inconvénient à utiliser l'ordre de prémultiplication pour les matrices en GLSL ?

L'ancienne pile matricielle d'OpenGL dictait que l'ordre de multiplication de la matrice devait être post-multiplié. L'OpenGL moderne reporte ces opérations matricielles vers le shader, où nous sommes maintenant libres de choisir d'utiliser operator*(vec4,mat4) au lieu de operator*(mat4,vec4) . Il se trouve que je préfère la pré-multiplication, car je trouve qu'elle rend le code plus lisible. Par exemple, avec la post-multiplication, nous avons

mat4 mvp = vp * m;

alors qu'avec la pré-multiplication, il devient

mat4 mvp = m * vp;

ce qui est plus logique pour moi.

Quoi qu'il en soit, ma question est la suivante : y a-t-il un inconvénient à cela ? A part le fait que les utilisateurs d'OpenGL n'y sont pas habitués ? Il ne semble pas y avoir de changement dans les performances.

3voto

datenwolf Points 85093

L'ancienne pile matricielle d'OpenGL dictait que l'ordre de multiplication de la matrice devait être post-multiplié.

Non, pas du tout. La pile de matrices à fonction fixe aurait tout aussi bien fonctionné avec une multiplication associative à gauche (par ex. glRotate :: M = R · M ) en supposant des matrices majeures de ligne et des vecteurs de ligne, c'est-à-dire en écrivant tout transposé. En fait, mathématiquement, cela ne fait aucune différence, c'est exactement la même chose.

Il ne semble pas y avoir de changement dans les performances.

Il ne s'agit pas d'une question de performance, mais de commodité. La plupart des mathématiciens (informaticiens, physiciens, mathématiciens) sont habitués à utiliser des vecteurs colonnes et à lire les expressions de droite à gauche. C'est une notation courante et c'est pourquoi elle est utilisée de cette façon.

2voto

dinony Points 489

Eh bien, vous pouvez faire ce que vous voulez La plupart des gens pensent aux vecteurs en colonnes mais vous pouvez utiliser des vecteurs en lignes Cependant, vous devriez calculer des choses comme :

mat4 modelView = view * model

dans l'application. Si vous le calculez dans le vertex shader il est évalué pour chaque vertex.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X