2016-04-17 63 views
0

previous question之后,我正在处理BufferGeometry中的构建模型,并意识到transparent标志会影响渲染顺序:具有透明材质的对象将在非透明材质之后渲染。在Thee.js中渲染BufferGeometry的顺序

此外,我从thread读取,做了JSFiddle的实验,并且实现了BufferGeometry中面的渲染顺序与它们在缓冲区中指定的顺序相同,但距离相机不远。 (在上面的实验中,我首先在缓冲区中指定了一个更接近的三角形,并在其后面指定了一个更接近的三角形。)

所以我的问题是:是否可以在BufferGeometry中手动设置渲染顺序? 就我而言,我可能需要动态改变建筑元素的透明度。 (我读过thread表示我们可以设置Object3D的renderOrder。)

谢谢。

回答

0

表面按它们在BufferGeometry中出现的顺序呈现。

如果您必须动态更改场景元素的透明度,我建议您维护单独的几何图形,每个图形都与自己的材质配对。

渲染器将首先渲染具有transparent = false的对象。然后它将渲染具有transparent = true的对象。

你可能会发现你有较少的文物,如果您使用以下设置为您的透明材料:

material.transparent = true; 
material.opacity = 0.5; // or as desired 
material.depthTest = true; // the default 
material.depthWrite = false; // use for transparent materials only 

此外,自透明度是特别棘手。一个例子是半透明的立方体(或建筑物)。在这种情况下减少伪影的一种方法是将对象渲染两次:首先使用material.side = THREE.BackSide,然后再使用material.side = THREE.FrontSide。您可以使用object.renderOrder强制对象之间的特定渲染顺序。

three.js r.75