所以我试图在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;
它似乎只抓取相同的像素,我从纹理中得到一种颜色返回给我。一切都变灰了。有谁知道什么是关闭的?
答案 0 :(得分:3)
除非那是一个矩形纹理(因为你使用的是texture2D
),否则你的纹理坐标是规范化。这意味着范围[0,1]映射到纹理的整个范围。 0.5总是意味着中途,无论是256尺寸的纹理还是8192纹理。
因此,您需要停止传递非规范化纹理坐标(纹素值)。传递标准化纹理坐标并调整它们。