キューブ マップを使用して球体をテクスチャリングしたいと考えています。これまでの私の研究では、OpenGL がテクスチャ座標を自動生成するようにすることを含む Google で多くの結果が得られましたが、独自の座標を生成したいと考えています。
0,0,0 を中心とする不完全な球体 (高さはマッピングされていますが、本質的には球体) の頂点を構成する座標の配列が与えられた場合、キューブ マップのテクスチャ座標をどのように生成しますか?
キューブ マップを使用して球体をテクスチャリングしたいと考えています。これまでの私の研究では、OpenGL がテクスチャ座標を自動生成するようにすることを含む Google で多くの結果が得られましたが、独自の座標を生成したいと考えています。
0,0,0 を中心とする不完全な球体 (高さはマッピングされていますが、本質的には球体) の頂点を構成する座標の配列が与えられた場合、キューブ マップのテクスチャ座標をどのように生成しますか?
GLSL経由でこれを行っていますか? その場合、textureCube は vec3 をテクスチャ座標として受け入れます。これは、球上の単位ベクトルです。あなたの場合、球の中心に対するフラグメントの座標を取得し、それを正規化し、座標として渡します。6 つの 2 次元テクスチャとしての内部表現について心配する必要はありません。
uniform samplerCube cubemap;
varying vec3 pos; // position of the fragment w.r.t. the center of the sphere
/* ... */
vec4 color = textureCube(cubemap, normalize(pos).stp);
固定パイプライン OpenGL でも同様に機能します。
ちなみに座標は内部ではこんな風に使われていて、絶対値で最大の座標を使って6つのテクスチャのうちどれから読み込むかを選択します(符号は正負を選択します)。他の 2 つの座標は、最大の座標で割った後、選択したマップ内のテクセルを検索するために使用されます。