getOrthogonalBasis
#正規直交基底 #ベクトル #幾何 #回転 #数学 #シェーダー
a.k.a. orthBas
ベクトル1本から正規直交基底を生成する関数
即ち、normalを渡すとbinormalとtangentを適当に決めて mat3 を作ってくれるやつ
Cyclic Noise の座標系回転で初めて見た
その他、カメラの回転・レイ方向の決定・重点サンプリングでの方向ベクトルの生成など色々使えます
Ref: https://www.shadertoy.com/view/3tcyD7
code:glsl
mat3 getOrthogonalBasis(vec3 z) {
z = normalize(z);
vec3 up = abs(z.y) < 0.99 ? vec3(0.0, 1.0, 0.0) : vec3(0.0, 0.0, 1.0);
vec3 x = normalize(cross(up, z));
return mat3(x, cross(z, x), z);
}
up の求め方はいろいろ択アリ