Я использую Three.js и ShaderMaterial для рисования геометрии точек с помощью шейдера фрагмента.
Я хочу, чтобы у каждой точки был размытый край, но я не могу заставить альфу работать, она просто становится белой.
Я могу отбросить пиксели, когда они полностью прозрачны, чтобы сделать круг, но размытие становится белым, а затем резко обрезается.
Вот что я вижу на экране:
код Three.JS
var shaderMaterial = new THREE.ShaderMaterial( {
uniforms: uniforms,
vertexShader: document.getElementById( 'vertexshader' ).textContent,
fragmentShader: document.getElementById( 'fragmentshader' ).textContent,
blending: THREE.NormalBlending,
depthTest: true,
transparent: true,
clipping: true
});
var points = new THREE.Points(geometry, shaderMaterial);
Фрагмент шейдера:
//translate gl_PointCoord to be centered at 0,0
vec2 cxy = 2.0 * gl_PointCoord - 1.0;
//calculate alpha based on distance from centre
//(I'm doubling it to get a less gradual fade)
float newAlpha = (1.0-distance(cxy, vec2(0.0,0.0))) * 2.0;
if (newAlpha < 0.01)
{
//discard pixels that have ~0 alpha
discard;
}
gl_FragColor = vec4( newR, newG, newB, newAlpha);
Заранее благодарен за любую помощь :) Меня это озадачивает для AGES.
Редактировать: Включение и выключение изображений глубины. Мне кажется, что тест глубины помещает их в правильном порядке?
deepTest false:
deepTest true: