您可以将THREE.ShaderMaterial 与alpha 值的自定义顶点属性一起使用。这是一步一步的指南 -
1) 在您的顶点着色器中,声明一个attribute float,它将采用 alpha 值。同时在顶点和片段着色器中声明varying float。
顶点着色器:
attribute float alphaValue;
varying float vAlphaValue;
片段着色器:
varying float vAlphaValue;
2) 将 alpha 属性值赋给顶点着色器中的可变值。
顶点着色器:
vAlphaValue = alphaValue;
3) 完成所有计算后,将 alpha 变化值赋给 gl_FragColor 的 alpha 值。
片段着色器:
gl_FragColor.a = vAlphaValue;
4) 从主机端,添加一个总顶点长度的数组。这是代码示例 -
var geometry = new THREE.BufferGeometry();
geometry.addAttribute('position', new THREE.BufferAttribute(vertices, 3));
var alphaArray = [];
var alphaArrayLength = vertices.length / 3;
for(var i = 0; i < alphaArrayLength; i++) {
alphaArray.push(0.5);
}
5) 为几何图形中的 alpha 值添加自定义属性,并使用创建的数组对其进行更新 -
geometry.addAttribute('alphaValue', new THREE.BufferAttribute(new Float32Array(alphaArray), 1));
6) 创建一个 THREE.ShaderMaterial -
var material = new THREE.ShaderMaterial({
vertexColors: THREE.VertexColors,
side: THREE.DoubleSide,
transparent: true,
vertexShader: document.
getElementById('vertex_shader_for_face').text,
fragmentShader: document.
getElementById('fragment_shader_for_face').text
});
7) 使用几何和材质创建网格 -
var mesh = new THREE.Mesh(geometry, material);