あなたはベクターにOrthogonalizeする必要があります。 Orthogonalizationの一般的な方法はGram–Schmidt Orthonormalizationです。
このアルゴリズムは、2つのベクトルのドット製品は両方のベクトルの大きさ(な長さ)を乗じ2つのベクトル間の角度の余弦等しい状況を使用します。
dot(N, T) == length(N) * length(T) * cos(angle_N_T)
これは単位ベクトルの長さが1
あるため、2つの単位ベクトル(正規化ベクトル)の
ドット製品は、2つのベクトル間の角度の余弦
等しいことを、以下の
uN = normalize(A)
uT = normalize(B)
cos(angle_T_N) == dot(uT, uN)
は、正規化ベクトルrealNormal
である場合(その長さは1)とtangent
とbinormal
は、次いでrealTangent
直交しrealBinormal
このように計算することができる。tangent
とbinormal
があまりにも正規化ベクトルである場合
realTangent = normalize(tangent - realNormal * dot(tangent, realNormal));
realBinormal = binormal - realNormal * dot(binormal, realNormal);
realBinormal = normalize(realBinormal - realTangent * dot(realBinormal, realTangent));
、次いでnormalize
関数は、ソース・ベクトルのドット積で割ることによって置換することができますそして本当ベクトル:
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);
はさらにHow to calculate Tangent and Binormal?を参照してください。
[グラムシュミットOrthonormalization](https://en.wikipedia.org/wiki/Gram%E2%80%93Schmidt_process) 't =正規化(正接 - 実数正規*ドット(タンジェント、実数正規)); ' – Rabbid76
明らかだった...ありがとう –