2013-03-06 5 views
3

J'ai une coordonnée 3D que je veux transformer par la matrice modelVeiw pour entrer dans l'espace de vue dans un shader GLSL. Le point est défini dans le shader et n'est pas affecté par les transformations d'OpenGL. Est-il possible de faire quelque chose comme gl_ModelViewMatrix * (nom vec3)?Multiplier une matrice vec3 par modelview

+0

Code postal s'il vous plaît – GreenGuerilla

+0

Normalement un vertex shader fait 'void main() {gl_position = glMatrix * aVertex; } 'où aVertex est un attribut et glMatrix est un uniforme. Les deux peuvent être générés dans un shader. Fais-le! –

+0

@AkiSuihkonen Lorsque je lance le code vec3 tfLightPos = (gl_ModelViewMatrix * lightPos); J'obtiens l'erreur 0 (8): erreur C1101: référence de fonction surchargée ambiguë "mul (mat4, vec3)" – Abaab

Répondre

6

n ° gl_ModelViewMatrix est un mat4. Vous devez le multiplier par un vec4 (avec 1 dans w).

+0

Merci !! Je voterais ceci, mais je suis un tel noob je n'ai pas assez de réputation ... – Abaab

+1

Le contenu de w devrait être déterminé par le but du point - est-ce un vertex normal à transformer ou un normal (auquel cas w = 0 et on pourrait aussi bien multiplier le vec3 par la matrice supérieure 3x3 de MVM.) –

+1

Toutes nos sémantiques ont été sommaires. Je pensais que "coordonner" était synonyme de "point", et ne pouvait pas signifier un vecteur, mais je viens de le chercher et j'avais tort. Vous utilisez "point" pour désigner "point" ou "vecteur/direction", ce qui n'est pas correct non plus. Vous ne devriez pas techniquement faire mat3 (MVM) * normal; vous devriez faire normal * inverseOfMVM. http://en.wikibooks.org/wiki/GLSL_Programming/Applying_Matrix_Transformations#Transforming_Normal_Vectors – Jessy

Questions connexes