THREE.ShaderMaterial
には、アルファ値のカスタム頂点属性を使用できます。ここでは、ステップバイステップガイドです。
1)頂点シェーダでアルファ値を取るattribute float
と宣言します。また、頂点シェーダとフラグメントシェーダの両方にvarying float
と宣言します。
頂点シェーダ:
attribute float alphaValue;
varying float vAlphaValue;
フラグメントシェーダ:
varying float vAlphaValue;
2)頂点シェーダで変化する値にアルファ属性値を割り当てます。
頂点シェーダ:すべての計算が行われている
vAlphaValue = alphaValue;
3)後、gl_FragColorのアルファ値にアルファ変化する値を割り当てます。
フラグメントシェーダ:
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)ジオメトリのアルファ値のカスタム属性を追加し、作成された配列で更新 -
geometry.addAttribute('alphaValue', new THREE.BufferAttribute(new Float32Array(alphaArray), 1));
6)THREE.ShaderMaterialの作成 -
var mesh = new THREE.Mesh(geometry, material);
-
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)の形状および材料を有するメッシュを作成します