仅显示透明对象后面的不透明对象

时间:2016-09-09 19:52:52

标签: graphics three.js transparency

我正在使用three.js和WebGl。我想让场景中的某些对象透明,只显示透明对象后面的不透明对象,而不是其他透明对象。

目前,当我使对象透明时,我可以看到其后面的其他透明物体,我不想要。

这就是现在发生的事情:

enter image description here

这就是我想要的:

enter image description here

这种透明度渲染是否有术语?看起来我可以用多个渲染过程完成这个任务。

我正在使用three.js和WebGl,但我还没有找到任何语言的解决方案,所以我愿意接受任何通用提示。

2 个答案:

答案 0 :(得分:1)

如果你要找的只是渲染最前面的透明物体层,你可以试试这个:

gl.enable(gl.DEPTH_TEST); 

// dont write to color buffer, only to depth
gl.depthFunc(gl.LEQUAL); 
gl.colorMask(false, false, false, false); 

drawTransparentObjects();

// only draw to front most layer
gl.depthFunc(gl.EQUAL); 
gl.colorMask(true, true, true, true); 

drawTransparentObjects();

// switch back to normal depth testing 
gl.depthFunc(gl.LEQUAL); 

答案 1 :(得分:0)

只是猜测,但我认为这会起作用

// at init time
renderer.autoClear = false;

// at render time
renderer.clear(true, true, true);
renderer.render( sceneOfObjectsYouWantInBack, camera)
renderer.clear(false, true, true);
renderer.render( sceneOfObjectsYouWantInMiddle, camera)
renderer.clear(false, true, true);
renderer.render( sceneOfObjectsYouWantInFront, camera)
renderer.clear(false, true, true);