我有一個非常簡單的PNG紋理:帶有透明背景的灰色圓圈。Three.js,具有透明度的自定義着色器和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.PointCloud
網格),它工作得很好:
但是,如果我打開相機的超過180度,我看到這一點:
據我所知,片段着色器沒有正確考慮到PNG的Alpha值質地。
在這種情況下,爲了獲得正確的顏色和不透明度(來自自定義屬性)並仍然從PNG獲得alpha權利,最佳方法是什麼?
爲什麼它的一面表現正確?
太棒了,我試過'textureColor.a <0.3',看起來很完美。還要感謝細節,我現在更瞭解PointCloud的工作原理。 – taseenb
呃......實際上看起來比較好用'<0.5' – taseenb