Parler de "bump", reflet spéculaire et ce genre de choses en OpenGL Shading Language (GLSL)
J'ai:
- Un tableau de sommets (par ex. {0.2,0.5,0.1, 0.2,0.4,0.5, ...})
- Un tableau de normales (par ex. {0.0,0.0,1.0, 0.0,1.0,0.0, ...})
- La position d'un point de lumière dans l'espace (par exemple, {0.0,1.0,-5.0})
- La position de l'observateur dans l'espace (par exemple, {0.0,0.0,0.0}) (suppose que le spectateur est au centre du monde)
Maintenant, comment puis-je calculer la Binormale et Tangente pour chaque sommet? Je veux dire, quelle est la formule pour calculer la Binormals, ce que j'ai à utiliser en se basant sur ces informations? Et à propos de la tangente?
Je vais construire l'ALCALINITÉ de la Matrice de toute façon, donc si vous connaissez une formule pour construire la matrice directement sur la base de ces informations va être sympa!
Oh, yeh, j'ai les coordonnées de texture trop, si nécessaire. Et comme je parle GLSL, serait bien une per-vertex solution, je veux dire, celui qui n'a pas besoin d'avoir accès à plus d'un sommet de l'information à la fois.
---- Mise à jour -----
J'ai trouvé cette solution:
vec3 tangente; vec3 binormale; vec3 c1 = cross(a_normal, vec3(0.0, 0.0, 1.0)); vec3 c2 = cross(a_normal, vec3(0.0, 1.0, 0.0)); si (longueur(c1)>longueur(c2)) { tangente = c1; } d'autre { tangente = c2; } tangente = normalize(tangente); la binormale = cross(v_nglNormal, tangente); la binormale = normalize(binormale);
Mais je ne sais pas si c'est correct à 100%.