着色器问题

问题描述

[在此处输入图片说明][1]

错误对齐 [1]:https://i.stack.imgur.com/LvzS1.png

我在使用着色器时遇到了一些问题。我正在制作一个带有大型六边形图块的游戏。我正在使用着色器来确定每个十六进制的 UV 坐标。

基本上,我创建了一个与我的地图尺寸相同的“计算图像”。如果是 50 x 50 十六进制,则计算图像将为 50 x 50 像素。然后我将每个像素的颜色设置为 (x,y,0),其中 x 和 y 是图集中相应十六进制的中心坐标。

我将网格中的每个顶点颜色设置为 (r,g,b,a),其中 r 和 g 是该顶点所属的六边形坐标,(因此第一个六边形将为 (0,0), etc) 和 (b,a) 是这个顶点到六边形中心的偏移量。

然后我使用以下着色器从计算图像中读取每一帧并相应地设置片段颜色:

shader_type canvas_item;
uniform sampler2D computeTexture; 
uniform float atlasHeight;
void vertex()
{
    vec2 computeTextureCoords = vec2(COLOR.r,COLOR.g);
    vec4 samplePoint4 = texture(computeTexture,computeTextureCoords);
    vec2 samplePoint = vec2(samplePoint4.r,samplePoint4.g);
    
    vec2 offset = vec2(COLOR.b,COLOR.a);
    UV = vec2(samplePoint.x / atlasHeight,samplePoint.y / atlasHeight) + offset;
}
void fragment()
{
    COLOR = texture(TEXTURE,UV);
}

然后可以实时更改计算图像以更新纹理,而无需重建整个网格。

我让整个系统运行良好,除了一个关键方面。只要所有的六边形都设置为相同的纹理,它就会顺利进行,但是当计算图像中有两种不同的颜色彼此相邻时,采样基本上被破坏了。上面着色器中返回的“samplePoint4”是两种不同颜色的插值,而不是我尝试访问的像素的实际颜色。这意味着当不同的地形彼此相邻时,图形叠加就不合适了。我附上了一张图片,希望能更好地说明这意味着什么。

尽管我努力通过向 ​​(r,g) 添加适当的偏移量来采样像素的“中心”而不是边缘,但还是会发生这种情况。我尝试让计算纹理在每个十六进制的正方形中使用 9 个像素,然后对中心像素进行采样,但问题并未由此解决

这是着色器中浮点精度的不可避免的限制,还是有办法在从计算纹理采样时避免这种混合?非常感谢您对此的任何帮助

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)