0

私はこの例を実行しています、

しかし変化する:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);

に:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);

そして、右上と右上で少し違う画像が出ました。

ここに画像の説明を入力してください

しかし、コードからわかるように:

glBegin(GL_QUADS);
//lower left
glTexCoord2f(0, 0); 
glVertex2f(-1.0, -1.0);
//upper left
glTexCoord2f(0, 1.0);
glVertex2f(-1.0, 1.0);
//upper right
glTexCoord2f(1.0, 1.0);
glVertex2f(1.0, 1.0);
//lower right_
glTexCoord2f(1.0, 0); 
glVertex2f(1.0, -1.0);
glEnd();

テクスチャが範囲外になることはありませんが、なぜGL_CLAMPが重要なのでしょうか。

4

1 に答える 1

1

フラグメント シェーダーでは、色は現在のテクセルの右上の色と混合されます。vec2(0.0625, 0.0625)テクスチャ座標にが追加されます。GL_CLAMPしたがって、 (1.0 - 0.0625) = 0.9375 以上のテクスチャ座標を検索するときに、常に同じ値を取得します。

void main() {
    vec4 s1 = texture2D(tex0, gl_TexCoord[0].st);
    vec4 s2 = texture2D(tex1, gl_TexCoord[0].st + vec2(0.0625, 0.0625));
    gl_FragColor = mix(vec4(1, s1.g, s1.b, 0.5), vec4(s2.r, s2.g, 1, 0.5), 0.5);
}
于 2012-07-16T10:15:27.597 に答える