我在自定义材质THREE.ShaderMaterial中有一个要用作alpha贴图纹理的png图像(16x16)。这是图像:

javascript - 如何在Three.js中的ShaderMaterial中使用Alpha贴图纹理?-LMLPHP

这是我预加载的Texture对象的设置:

alphaMap.magFilter = THREE.NearestFilter
alphaMap.wrapT = THREE.RepeatWrapping
alphaMap.repeat.y = 10
alphaMap.needsUpdate = true


在ShaderMaterial的属性中,我添加了:

transparent: true


然后添加defines

USE_ALPHAMAP: true,
ALPHATEST: 0.5


最后是uniform

alphaMap: { type: 't', value: alphaMap }


我没有任何错误,但网格不可见。如果我将其设置为diffuseColor.rgb,则网格全为黑色。遗漏或错了什么?

最佳答案

解决此问题(未记录)的方法是:

uniforms['alphaMap'].value.needsUpdate = true


这样做是行不通的:

alphaMap.needsUpdate = true


可能应该在这里添加它:How to update things(实际上存在needsUpdate标志需要纹理,但尚不清楚如何处理ShaderMaterial和制服)。

关于javascript - 如何在Three.js中的ShaderMaterial中使用Alpha贴图纹理?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46859276/

10-11 05:03