Como calcular Tangente e Binormal?

Falando sobre mapeamento de relevo, destaque especular e esse tipo de coisa no OpenGL Shading Language (GLSL)

Eu tenho

Uma matriz de vértices (por exemplo, {0,2,0,5,0.1, 0,2,0,4,0,5, ...})Uma matriz de normais (por exemplo, {0.0,0.0,1.0, 0.0,1.0,0.0, ...})A posição de uma luz pontual no espaço do mundo (por exemplo, {0,0,1,0, -5,0})A posição do visualizador no espaço do mundo (por exemplo, {0.0,0.0,0.0}) (suponha que o visualizador esteja no centro do mundo)

Agora, como posso calcular o Binormal e o Tangent para cada vértice? Quero dizer, qual é a fórmula para calcular os Binormais, o que eu tenho que usar com base nessas informações? E sobre a tangente?

Construirei a matriz TBN de qualquer maneira, por isso, se você souber uma fórmula para construir a matriz diretamente com base nessas informações, será bo

Ah, sim, também tenho as coordenadas de textura, se necessário. E, como estou falando do GLSL, seria uma solução agradável por vértice, quero dizer, uma que não precise acessar mais de uma informação de vértice por ve

---- Atualização -----

Encontrei esta solução:

vec3 tangent;
vec3 binormal;

vec3 c1 = cross(a_normal, vec3(0.0, 0.0, 1.0));
vec3 c2 = cross(a_normal, vec3(0.0, 1.0, 0.0));

if (length(c1)>length(c2))
{
    tangent = c1;
}
else
{
    tangent = c2;
}

tangent = normalize(tangent);

binormal = cross(v_nglNormal, tangent);
binormal = normalize(binormal);

Mas não sei se é 100% correto.

questionAnswers(3)

yourAnswerToTheQuestion