1

因此,我试图在 GLSL 中将纹理的一部分替换为另一个纹理,这是宏伟计划的第一步。所以我有一个图像,2048x2048,左上角有 3 个纹理,每个 512x512。出于测试目的,我试图重复绘制第一个。

//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;

似乎它只抓取相同的像素,我从返回给我的纹理中得到一种颜色。一切都以灰色告终。有谁知道怎么回事?

4

1 回答 1

3

除非那是一个矩形纹理(因为你正在使用它不是texture2D),否则你的纹理坐标是归一化的。这意味着范围 [0, 1] 映射到纹理的整个范围。0.5 总是意味着一半,无论是 256 大小的纹理还是 8192 大小的纹理。

因此,您需要停止传递非归一化纹理坐标(纹素值)。通过归一化纹理坐标并调整它们。

于 2012-04-15T22:35:15.197 回答