1

そのため、GLSL でテクスチャの一部を別のテクスチャに置き換えようとしています。これは、壮大なスキームの最初のステップです。2048x2048 の画像があり、左上にそれぞれ 512x512 の 3 つのテクスチャがあります。テスト目的で、最初のものを繰り返し描画しようとしています。

//get coord of smaller texture
coord = vec2(int(gl_TexCoord[0].s)%512,int(gl_TexCoord[0].t)%512);

//grab color from it and return it 
fragment = texture2D(textures, coord);
gl_FragColor = fragment;

同じピクセルしか取得していないようです。テクスチャから 1 つの色が返されます。すべてが灰色で終わります。何がオフなのか誰か知っていますか?

4

1 に答える 1

3

それが長方形のテクスチャでない限り (を使用しているのでそうではありませんtexture2D)、テクスチャ座標は正規化されます。つまり、範囲 [0, 1] がテクスチャの範囲全体にマップされます。0.5 は、256 サイズのテクスチャでも 8192 サイズのテクスチャでも、常に中間を意味します。

したがって、正規化されていないテクスチャ座標 (テクセル値) の受け渡しを停止する必要があります。正規化されたテクスチャ座標を渡し、それらを調整します。

于 2012-04-15T22:35:15.197 に答える