我想出了一些代码,使用包含瓷砖的大 2D 纹理来模拟 3D 纹理查找。3D贴图为128x128x64,大2D贴图为1024x1024,分为64个128x128的贴图。
片段着色器中的查找代码如下所示:
#extension GL_EXT_gpu_shader4 : enable
varying float LightIntensity;
varying vec3 pos;
uniform sampler2D noisef;
vec4 flat_texture3D()
{
vec3 p = pos;
vec2 inimg = p.xy;
int d = int(p.z*128.0);
float ix = (d % 8);
float iy = (d / 8);
vec2 oc = inimg + vec2(ix, iy);
oc *= 0.125;
return texture2D(noisef, oc);
}
void main (void)
{
vec4 noisevec = flat_texture3D();
gl_FragColor = noisevec;
}
平铺逻辑似乎工作正常,这段代码只有一个问题。它看起来像这样:
体素层之间有奇怪的 1 到 2 像素宽的条纹。d
更改时,条纹仅出现在边界处。
我已经为此工作了 2 天,但仍然不知道这里发生了什么。