渲染具有 alpha 通道的纹理时,不透明部分周围会出现白色边框(边框似乎是 alpha > 0 和 < 1 的像素):
原始纹理在 illustrator 中创建并导出为 png。这里是:
(好吧,似乎stackoverflow改变了图像,调整了不完全不透明/透明的像素,所以这是一个链接)
这可能是混合,虽然我不知道设置有什么问题:
gl.enable(gl.BLEND);
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
[更新]
这是一个渲染版本,我在纹理的左侧添加了一个 alpha 渐变(所以它从 0 不透明度变为 1 直到一半)
此纹理是在此位置渲染的唯一纹理。它似乎在 a=0.5 附近是最白的。真的很奇怪。背景只是一种清除的颜色:
gl.clearColor(0.603, 0.76, 0.804, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
// render objects here
深度函数看起来像:
gl.enable(gl.DEPTH_TEST);
gl.depthFunc(gl.LEQUAL);
有任何想法吗?多谢。
[更新 2]
回答我自己的问题:当画布的背景颜色或 html 页面的主体为白色时,效果就会出现。不过,我没有解释。