背景遮挡

时间:2012-12-07 14:09:58

标签: three.js

我正在尝试渲染2个场景。第一个场景只是一个2D背景平面。在第二个场景中,我设置了对象。第一个对象(头部)材质不透明度设置为1.我认为这是一种简单快速的方法来计算场景中第二个对象(太阳镜)的遮挡。事实上,这项工作完全像我想要的那样,但现在头部也遮挡了背景,即使他应该是透明的。 (我在渲染第二个场景之前清除了深度缓冲区并设置了renderer.autoClear = false

renderer.autoClear = false;
var headMaterial = new THREE.MeshBasicMaterial({ color: 0x000000, opacity: 1 });
...
//Renderloop
renderer.clear();
renderer.render( background, camera );
renderer.clear(false,true,false);
renderer.render( scene, camera);

2 个答案:

答案 0 :(得分:0)

渲染两个场景是否有令人信服的理由,而不仅仅是一个包含所有对象的场景?他们共用相同的相机,没有?

首先尝试渲染头部和太阳镜。用模板掩盖太阳镜。然后用模板测试渲染背景(但不进行深度测试)。您将渲染更少的背景像素,从而使整体渲染速度更快一些。

答案 1 :(得分:0)

如果说“背景”是指只有平面有一些纹理的场景 - 为什么不将背景设置为html背景?那就是你不必计算你的飞机正确的位置来填充所有的屏幕区域。

现在,对于透明度问题 - 以下是您的一些示例:http://jsfiddle.net/ajJmx/1/

了解如何将前立方体设置为半透明,并且可以看到立方体的另一面。如果你转动立方体45deg - 你会看到即使背景上还有其他物体 - 你的实体立方体两侧保持稳固。

您基本上想要做的是将transparent:true, opacity:0.6设置为您的太阳镜材料。而已!你也可以玩材料混合物,并根据你的太阳镜类型设置blending:THREE.AdditiveBlending