Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Glsl 在另一个纹理上重复纹理的一部分_Glsl - Fatal编程技术网

Glsl 在另一个纹理上重复纹理的一部分

Glsl 在另一个纹理上重复纹理的一部分,glsl,Glsl,所以我试图在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

所以我试图在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;

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

除非是矩形纹理(因为您使用的是
texture2D
),否则纹理坐标是标准化的。这意味着范围[0,1]映射到纹理的整个范围。0.5始终表示一半,无论是256大小的纹理还是8192大小的纹理


因此,需要停止传递非规格化纹理坐标(texel值)。传递标准化纹理坐标并调整它们。

是的,我认为没有意识到gl_TexCoord[0]是0-1是我的主要问题。这是否意味着我可以将其非规范化,然后再重新规范化?我试过amtCoord=vec2((int(gl_-TexCoord[0].s)*2048)%512)/2048,((int(gl_-TexCoord[0].t)*2048)%512)/2048);但还是不起作用。@jfbguy:那是因为你一直在把它们转换成整数。将小于2048的整数除以2048将始终得到零。或者,您不能对它们进行非规范化:
texture2D(textures,gl_TexCoord[0].st/2.0)
.Whoops:)。我总是忘了在末尾加.0f。我同意,这将是一个很好的保持一切规范化,但我想不出一种方法来使用没有整数的模,因为我的大纹理,我需要保持一切在0到.25f之间,因此我是调制512使用大小2048的纹理。虽然将2048改为2048.0f,但我还是让它工作了。@jfbguy:你不需要使用模数。只需将纹理坐标除以4.0,而不是像我那样除以2.0。实际上,您可能应该在顶点着色器中执行此操作。