Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 背景遮挡_Three.js - Fatal编程技术网

Three.js 背景遮挡

Three.js 背景遮挡,three.js,Three.js,我正在尝试渲染两个场景。第一个场景只是一个二维背景平面。在第二个场景中,我已设置为“对象”。第一个对象(头部)材质不透明度设置为1。我认为这是一种简单快速的方法来计算场景中第二个对象(太阳镜)的遮挡。事实上,这和我想要的完全一样,但是现在头部也遮挡了背景,即使他应该是透明的。(我在渲染第二个场景之前清除了深度缓冲区,并设置了renderer.autoClear=false) 渲染两个场景,而不是只渲染一个包含所有对象的场景,是否有令人信服的理由?他们共用一个摄像头,不是吗 首先尝试渲染头部和太阳

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


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

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

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

现在,关于透明度问题,这里有一些例子:

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


基本上,您要做的是为您的太阳镜材质设置
透明:true,不透明度:0.6
。就这样!你也可以尝试使用材质混合,并尝试设置
混合:三。AdditiveBlend
,具体取决于你的太阳镜类型。

好的,但我真的不知道怎么做,我找不到任何关于如何使用模具遮罩的示例。此外,我不知道如何指定对象的渲染顺序…如果可能的话,我希望有任何示例和链接。谢谢好的,我让它工作了。在主体中设置背景,而不是在平面纹理上渲染,这样做了。这并不是我想要的工作方式,但它确实起作用了。对于正确的遮挡,我将heads材质设置为transparent:false、opacity:0和color:0x000000。不知道为什么,但它只能通过将颜色设置为黑色来工作。谢谢亚历克斯,不客气!继续学习,我们将一起建设一个更好的网络!)
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);