1

そのため、Cg のピクセル/フラグメント シェーダー内からテクスチャを球体にマップする必要があります。

すべてのパスで「入力」として持っているのは、テクスチャをサンプリングする球上のポイントのデカルト座標 x、y、z です。次に、これらの座標を球面座標に変換し、次のように角度 Phi と Theta をそれぞれ U 座標と V 座標として使用します。

u = atan2(y, z)
v = acos(x/sqrt(x*x + y*y + z*z))

この単純なマッピングが球の極に継ぎ目を生成​​することはわかっていますが、現時点では、テクスチャが球全体で数回繰り返されるという問題があります。私が望んでいて必要としているのは、テクスチャ全体が球の周りを一度だけラップされることです。

シェーダーをいじって何時間も検索しましたが、解決策が見つかりません。どこかに何らかのスケーリングを適用する必要があると思いますが、どこですか? または、私は完全に間違った方向に進んでいるのかもしれません.Cgとシェーダープログラミング全般に非常に慣れていません...助けてくれてありがとう!

4

1 に答える 1

0

逆三角関数の結果は角度であるため、それらは賛成と賛成になります[-Pi, Pi]uただし[0, Pi]v学校から取得した三角関数の基本的な知識があれば、何時間も検索することはできません)。したがって、それらを適切にスケーリングする必要があります。テクスチャ座標ラッピングモード(説明のように聞こえます)として(またはD3Dに相当するもの)があるu /= 2*Piv /= Pi仮定して、実行する必要があります。GL_REPEAT

于 2012-06-08T19:39:08.680 に答える