Sie müssen Orthogonalize die Vektoren. Ein üblicher Weg für die Orthogonalization ist die Gram–Schmidt Orthonormalization.
Dieser Algorithmus verwendet den Umstand, daß das Punkt Produkt von 2 Vektoren ist gleich der Kosinus des Winkels zwischen den Vektoren 2 durch die Größe (Länge) der beiden Vektoren multipliziert.
dot(N, T) == length(N) * length(T) * cos(angle_N_T)
Dies ergibt sich, dass der Punkt Produkt von 2 Einheitsvektoren (normierte Vektoren), die gleich 1 ist Cosinus des Winkels zwischen den Vektoren 2, da die Länge eines Einheitsvektors gleich
uN = normalize(A)
uT = normalize(B)
cos(angle_T_N) == dot(uT, uN)
Wenn realNormal
ein normalisierter Vektor (seine Länge 1) und tangent
und binormal
orthogonal sind, dann ist die realTangent
und die die realBinormal
kann wie folgt berechnet werden:
realTangent = normalize(tangent - realNormal * dot(tangent, realNormal));
realBinormal = binormal - realNormal * dot(binormal, realNormal);
realBinormal = normalize(realBinormal - realTangent * dot(realBinormal, realTangent));
Wenn tangent
und binormal
normalisierten Vektoren sind auch dann die normalize
Funktion durch Division mit dem Skalarprodukt des Quellenvektors ersetzt werden kann und die echte Vektor:
realTangent = tangent - realNormal * dot(tangent, realNormal);
realTangent /= dot(tangent, realTangent);
realBinormal = binormal - realNormal * dot(binormal, realNormal);
realBinormal = realBinormal - realTangent * dot(realBinormal, realTangent);
realBinormal /= dot(binormal, realBinormal);
sehen Sie weitere How to calculate Tangent and Binormal?.
[Gramm-Schmidt Orthonormierung] (https://en.wikipedia.org/wiki/Gram%E2%80%93Schmidt_process) 't = normalisieren (tangential - realNormal * Punkt (tangential, realNormal));' – Rabbid76
dass war offensichtlich ... danke –