Je suis novice dans l'utilisation de GLSL et d'openGL. Actuellement je travaille avec webgl et je modifie les shaders (vsglsls et fs.glsl) pour comprendre le GLSL et la programmation graphique. J'ai un modèle que je veux mettre à l'échelle, faire pivoter et traduire. La mise à l'échelle et la rotation fonctionnent bien mais quand je multiplie la matrice de traduction, le résultat est bizarre. Je sais que c'est une question très simple, mais il me manque quelque chose et je dois le découvrir. mon modèle est infiniment étiré à travers l'axe y. Toute aide serait appréciée.La traduction de la matrice dans GLSL est infiniment étirée
ceci est mon code de vertex shaders:
mat4 rX = mat4 (
1.0, 0.0, 0.0, 0.0,
0.0, 0.0, -1.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 0.0, 1.0
);
mat4 rZ = mat4 (
0.0, 1.0, 0.0, 0.0,
-1.0, 0.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0
);
mat4 eyeScale = mat4 (
.50,0.0,0.0,0.0,
0.0,.50,0.0,0.0,
0.0,0.0,.50,0.0,
0.0,0.0,0.0,1.0
);
mat4 eyeTrans = mat4(
1.0,0.0,0.0,0.0,
0.0,1.0,0.0,4.0,
0.0,0.0,1.0,0.0,
0.0,0.0,0.0,1.0
);
mat4 iR = eyeTrans*rZ*rX*eyeScale;
gl_Position = projectionMatrix * modelViewMatrix *iR* vec4(position, 1.0);
}
Qu'est-ce que cela signifie "résultat est bizarre"? Notez que les multiplications matricielles ne sont pas commutatives. Essayez 'mat4 iR = eyeScale * rX * rZ * eyeTrans;'. Peut-être [Rotation d'un objet multi-parties] (https://stackoverflow.com/questions/46720166/rotating-a-multipart-object/46722875#46722875) ou [Déplacer un objet OpenGL et conserver la transformation] (https://stackoverflow.com/ questions/46720166/rotary-a-multipart-object/46722875 # 46722875) peut aussi aider. – Rabbid76
@ Rabbid76 Je l'ai essayé à nouveau et le même résultat. au lieu de traduire le modèle, il étire le modèle. Je vais ajouter une image à la question afin que vous puissiez voir le résultat. – femchi