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);
4

2 回答 2

0

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

现在,对于透明度问题 - 这是给你的一些例子:http: //jsfiddle.net/ajJmx/1/

看看你是如何将立方体正面设置为半透明的,你可以看到立方体的其他侧面。如果你将立方体旋转 45 度 - 你会看到即使背景上有其他物体 - 你的立体立方体边仍然是固体。

您基本上想要做的是设置transparent:true, opacity:0.6您的太阳镜材料。而已!您还可以尝试混合材料并尝试blending:THREE.AdditiveBlending根据您的太阳镜类型进行设置。

于 2012-12-09T00:11:16.973 回答
0

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

尝试先渲染头部和太阳镜。用模板遮住太阳镜。然后使用模板测试(但不是深度测试)渲染背景。您将渲染更少的背景像素,从而加快整体渲染速度。

于 2012-12-07T17:30:20.317 回答