【发布时间】:2017-05-05 22:31:26
【问题描述】:
我想使用THREE.ShaderMaterial 而不是THREE.PointMaterial。
并且对粒子的大小或绘图有问题。
如果我使用THREE.PointMaterial,那么粒子的大小取决于粒子位置的 z 坐标(换句话说:粒子的深度)。
但是,如果我使用THREE.ShaderMaterial,那么我将失去所需的效果。
左边是THREE.ShaderMaterial
正确的shpere是THREE.PointMaterial
你怎么看,有很大的不同。
也许有人知道如何使用THREE.ShaderMaterial 获得相同的渲染结果?
marials 代码:
THREE.ShaderMaterial
const shaderPoint = THREE.ShaderLib.points
const uniforms = THREE.UniformsUtils.clone(shaderPoint.uniforms)
uniforms.map.value = /*set some texture*/
uniforms.size.value = 60
material = new THREE.ShaderMaterial({
uniforms: uniforms,
defines: {
"USE_MAP": ""
},
transparent: true,
// alphaTest: .4,
depthWrite: false,
// depthTest: false,
// blending: THREE.AdditiveBlending,
vertexShader: shaderPoint.vertexShader,
fragmentShader: shaderPoint.fragmentShader
}))
THREE.PointMaterial
let material = new THREE.PointsMaterial({
size: 60,
// color: "#f0f",
map: uniforms.map.value,
depthWrite: false,
transparent: true
})
【问题讨论】:
-
看看this SO answer 和this comment。这会给你一些想法。
-
@WestLangley 感谢您的评论。真的我找到了决定!!!如果使用
uniforms.scale.value = 350和USE_SIZEATTENUATION: ""我有相同的结果:) 非常感谢!