我在WebGL中进行体积光线投射的应用程序已基本完成。但我发现了一个问题。 我必须通过2D纹理模拟3D纹理。这不是问题。我正在从小切片创建一个巨大的纹理。巨大质感的尺寸约为4096x4096px。问题是,在某些例子中(它取决于切片的数量)有创造......就像在下面的图像上(我将巨大的纹理填充到白色,使得片段更加明显)。
我知道数量的条纹取决于巨大纹理中的行数。我生成的纹理接近4096x4096px(但不完全是)。它可能是4080x4060等。我认为,问题是,Three.js将我的纹理加载到gpu,但是不要将它缩放到4096x4096 ..所以我在纹理边框上读取片段着色器黑色,因为webgl只能用于平方纹理(512x512,1024x1024 ......等)。它在渲染图像中造成黑色条纹。
问题是,我的Three.js应用程序无法使用WebGL Inspector。所以我不确定。
知道如何解决这个问题吗?
感谢。
托马什
编辑:
好的,我发现问题......和“解决方案”......但解决方案并没有奏效。我有2个数据集。 一个是好的,第二个仍然是同样的错误。
2个代码变体(每个代码适用于一个数据集但不适用于第二个):
首先)
dx = mod(slice, numColsInTexture) / numColsInTexture;
dy = 1.0 - (floor(slice / numColsInTexture) / numRowsInTexture);
二)
dx = 1.0 - (mod(slice, numColsInTexture) / numColsInTexture);
dy = (floor(slice / numColsInTexture) / numRowsInTexture);
我真的不知道,为什么它对两个数据集都不起作用...我试图转储GPU(WebGL检查器)。两种纹理在GPU上都是有效的(相同方向,相同尺寸)。一切都是一样的。
请帮帮我......谢谢。
答案 0 :(得分:0)
纹理的MIN和MAX滤镜是否设置为NEAREST?你的WRAP [ST]设置为CLAMP_TO_EDGE?