1

球の一部だけにテクスチャを入れようとしています。イタリアの衛星地図など、地球の一部の地形と地形テクスチャを備えた地球を表す球があります。イタリアがある球の一部の上にその地形を表示したいと思います。

一連の三角形ストリップを描画する球を作成しています。私が理解している限りでは、テクスチャを使用したい場合は、頂点ごとにテクスチャ座標を指定する必要があります (glTexCoord2*)。しかし、私はそれらすべてに有効なテクスチャを持っていません。では、これらの頂点のテクスチャをスキップするように OpenGL に指示するにはどうすればよいでしょうか?

4

1 に答える 1

2

球体の残りの部分 (「イタリアではない」) には 2 つのテクスチャまたは色属性があると仮定します。

これを行う最も簡単な方法は、球全体をカバーするテクスチャを作成することですが、アルファ チャネルを使用します。たとえば、alpha=1"not italy" とalpha=0for "italy" を使用します。次に、フラグメントシェーダーで次のようなことを行うことができます (疑似コード、私は何もテストしませんでした):

...
uniform sampler2D extra_texture;
in vec2 texture_coords;
out vec3 final_color;
...
void main() {
    ...
    // Assume color1 to be the base color for the sphere, no matter how you get it (attribute/texture), it has at least 3 components.
    vec4 color2 = texture(extra_texture, texture_coords);
    final_color = mix(vec3(color2), vec3(color1), color2.a);
}

mix の色は次のように結合されますmix(x,y,a) = x*(1-a)+y*a。これはベクトルのコンポーネントごとに行われます。alpha=1したがって、 if ("not Italy")color1が選択され、 の場合はその逆であることがわかりますalpha=0

テクスチャ配列などを使用してこれを複数のレイヤーに拡張できますが、最初は単純な 2 レイヤーのままにします。

于 2012-09-10T14:00:47.793 に答える