2013-02-11 1 views
1

Je sais que la matrice de transformation normale est l'inverse de la transposition de la matrice modèle/vue/projection, mais il semble que "inverse" n'a été ajouté que dans GLSL 1.4 et je ne peux pas trouver "transpose". Dois-je simplement copier et coller un tas de maths dans mon GLSL? (Si c'est le cas, y a-t-il un bon endroit open source faisant autorité que je peux copier?)Étant donné la matrice de transformation modèle/vue/projection, comment puis-je calculer la matrice normale sans utiliser de fonctions obsolètes dans GLSL 1.2?

Pour être clair, ce que je demande est "Comment puis-je calculer gl_NormalMatrix sans utiliser d'API dépréciées"?

+0

BTW, il n'y a pas beaucoup de points à éviter " API obsolètes "si vous êtes confiné à GL 2.1. –

+1

N'est-il pas plus facile de rediriger le port vers des versions plus récentes d'OpenGL et OpenGL ES si vous vous en tenez aux choses qui fonctionnent sur un profil de base? – Glyph

Répondre

3

Ceci est normalement manipulé par le calcul de la transposée de la matrice inverse de la modelview

N = (M^-1)^T 

de la CPU, le téléchargement alors la matrice, tout comme le téléchargement de toute autre matrice.

+0

Oui, c'est ce que j'ai fini par faire. Plus précisément, j'ai fini par le faire en Python, en utilisant NumPy, où c'est 'transpose (M [: 3,: 3]) .I, mais je soupçonne que c'est un peu difficile à faire en C. – Glyph

0

juste pour clarifier il y a aussi transpose et si vous ne faites pas échelle la matrice normale est la sous-matrice 3x3, en GLSL vous pouvez faire

normal = mat3(model_matrix) * v_normal; 
+0

Cela devrait être évité, car il ne peut pas gérer tous les cas. Même s'il est vrai que vous mentionnez cette limitation explicitement, il est peu probable que les programmes soient modifiés ... et soudainement, quelqu'un met à l'échelle quelque chose et part à la recherche de problèmes dans le code de mise à l'échelle, alors qu'en fait pas là ... et puisqu'il n'y a pas de débogueur pas-à-pas pour les shaders dans le GPU, cela ne fait que poser des problèmes. – ray

Questions connexes