トライプラナー
忘れてください:これは投影アルゴリズム(UV 座標を提供するアルゴリズム) ではなく、そこから UV 座標を取得する方法はありません。これは、各 XYZ 平面投影を個別に使用して得られる色をブレンドして得られる色を与えるレンダリング アルゴリズムです。
円筒形、球形
平面と同様に、他の頂点との接続を考慮せずに、XYZ 値から直接 UV 値を与える非常に単純な投影アルゴリズムです。
- 円柱の場合: (x, y, z) を円柱座標 (ρ, φ, z) に変換し、UV 座標として u = φ および v = z を使用します。
- 球面の場合: (x, y, z) を 球面座標(r, θ, φ) に変換し、UV 座標として u = θ および v = φ を使用します。
もちろん、X、Y、Z の役割を切り替えて別の軸を使用して投影したり、移動/回転/スケーリングを実行してより詳細に制御したりできます (使用する平面のサイズと方向を制御できるのと同じ方法です)。平面投影の場合)。
キュービック
まず、メッシュの各面をどの「投影面」に割り当てるかを決定する必要があります。下の図のように、投影面に X、-X、Y、-Y、Z、-Z という名前を付けます (ここでは、X、Y、Z 軸の色はそれぞれ赤、緑、青であると想定しています)。

このためには、法線 (nx、ny、nz) のどの座標が最大の絶対値を持つかを見つけ、それをこの軸と符号に対応する面に割り当てます。例えば:
- n = (0.8, 0.5, 0.3) の場合、対応する面は X (|nx| が最大で nx が正)
- n = (0.3, 0.8, 0.5) の場合、対応する面は Y (|ny| が最大で ny が正)
- n = (0.3, -0.8, 0.5) の場合、対応する面は -Y (|ny| が最大で ny が負)
次に、メッシュのすべての面を割り当てる投影面がわかったら、対応する平面投影をこの面の周りの頂点に適用して、一時的な値 (u_temp, v_temp) ∈ [0,1] x [0, 1]。
次のステップは、この値 uv_temp ∈ [0,1] x [0,1] を、上の画像 A に示すように、より小さい正方形に含まれる値 uv に変換することです。たとえば、投影 "X" を適用した場合、uv ∈ [2/3, 3/3] x [2/4, 3/4] が必要な場合は、次のようにします。
u = 2./3. + u_temp/3.;
v = 2./4. + v_temp/4.;
最後に、最後のステップは、平面投影が異なる 2 つの面に属する UV 頂点を複製することを忘れないことです (図の異なる色の間の境界線)。実際、メッシュの一部の頂点は、適切な結果を得るために、UV マップ内のいくつかの位置に分割できます (ほとんどの場合は分割する必要があります)。