2012-12-07 96 views
2

我想渲染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); 

回答

0

是否有令人信服的理由,使两个场景,而不是包含全部的对象只是一个场景?他们共享相同的相机,不是吗?

尝试先渲染头部和太阳眼镜。用模板掩盖太阳镜。然后用模板测试渲染背景(但不是深度测试)。你会渲染更少的背景像素,导致整体渲染速度更快。

+0

好的,但我真的不知道如何做到这一点,我找不到任何例子来如何用模具蒙版。另外我不知道如何指定对象的渲染顺序......如果可能,我将不胜感激任何示例和链接。谢谢! – Draxas

0

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

,透明度的问题 - 这里是你一些例子:http://jsfiddle.net/ajJmx/1/

看你们还怎么你前面的立方体侧设置为半透明,你可以看到多维数据集的行吟诗人两侧。如果你打开立方体45度 - 你会发现即使背景上有其他物体 - 你的立方体立方体保持稳定。

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

+0

好吧,我得到它的工作。在背景中设置背景,而不是在平面纹理上渲染它的技巧。它不是真的如何让它工作,但它的工作原理。对于正确的遮挡,我将头部材质设置为透明:false,不透明度:0 AND颜色:0x000000。不知道为什么,但它只能通过将颜色设置为黑色来起作用。感谢Alex。 – Draxas

+0

欢迎您!继续研究,一起我们将建立一个更好的网站!)) –