【发布时间】:2015-09-11 06:48:22
【问题描述】:
我有一个非常简单的 PNG 纹理:一个带有透明背景的灰色圆圈。
我将它用作map 的制服THREE.ShaderMaterial:
var uniforms = THREE.UniformsUtils.merge( [basicShader.uniforms] );
uniforms['map'].value = THREE.ImageUtils.loadTexture( "img/particle.png" );
uniforms['size'].value = 100;
uniforms['opacity'].value = 0.5;
uniforms['psColor'].value = new THREE.Color( 0xffffff );
这是我的片段着色器(只是其中的一部分):
gl_FragColor = vec4( psColor, vOpacity );
gl_FragColor = gl_FragColor * texture2D( map,vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) );
gl_FragColor = gl_FragColor * vec4( vColor, 1.0 );
我将材质应用于一些粒子(THREE.PointCloudmesh),效果很好:
但如果我将相机旋转超过 180 度,我会看到:
我了解片段着色器未正确考虑 PNG 纹理的 Alpha 值。
在这种情况下,获得正确的颜色和不透明度(来自自定义属性)并仍然从 PNG 中获得 alpha 的最佳方法是什么?
为什么它在一侧表现正确?
【问题讨论】:
标签: three.js png textures shader fragment-shader