私はメッシュのテクスチャにフィルタを提供するために、MeshBasicMaterialからShaderMaterialに切り替えています。 ShaderMaterialはMaterialから継承されるため、不透明度パラメータが存在します。しかし、このパラメータを変更しても、オブジェクトの不透明度は変わりません。私は、アルファ値を設定しないTHREE.HueSaturationShaderを使用しています。THREE.ShaderMaterial不透明ではない
私は状況を示すために非常に簡単なフィドルを追加しました
http://jsfiddle.net/thenectorgod/89aahytL/1/
// BufferGeometry Tester
var hostDiv, scene, renderer, camera;
var WIDTH = 500;//window.innerWidth,
HEIGHT = 500;//window.innerHeight,
FOV = 35,
NEAR = 1,
FAR = 1000;
function init() {
hostDiv = document.createElement('div');
document.body.appendChild(hostDiv);
scene = new THREE.Scene();
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(WIDTH, HEIGHT);
renderer.setClearColor(0x888888, 1);
hostDiv.appendChild(renderer.domElement);
camera = new THREE.PerspectiveCamera(FOV, WIDTH/HEIGHT, NEAR, FAR);
camera.position.z = 50;
camera.lookAt(scene.position);
var geometry = new THREE.PlaneBufferGeometry(20,20);
var material = new THREE.ShaderMaterial({
transparent: true,
depthTest: false
});
material.opacity = 0;
var mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
scene.add(camera);
animate();
}
function render() {
renderer.render(scene, camera);
}
function animate() {
requestAnimationFrame(animate);
render();
}
init();
不透明度を0に設定しても、オブジェクトは引き続き表示されます。
どのようにして不透明度パラメータとシェーダパラメータを追加しなくても、両方を使うことができますか?
私はTHREE.HueSaturationシェーダを私のプログラムのシェーダとして使用しています。均一なパラメータとして不透明度を取らないシェーダがたくさんあります。そのような場合、どのように不透明度を設定しますか?また、複数のシェーダパスを追加するシステムはありません。では、すべてのシェーダを不透明度を含むように変更する必要がありますか? –
はい。そのシェーダの 'gl_FragColor'に書かれているものは、スクリーン(またはテクスチャ)で終わるものです。 'gl_FragColor.w == 1.0'ならば、透明が真であっても不透明はありません。残念ながら、複数のシェーダパスを追加するシステムはありませんが、 'onBeforeRender'を見ることができます。そのプルリクエストを行う際には、文字通りそのユースケースを念頭に置いています。オブジェクトをレンダリングすると、別のシェーダを使用してオブジェクトをレンダリングします。 – pailhead