Cocos3D - 通过网格显示的背景

时间:2014-12-16 03:20:16

标签: blender cocos3d

我导入了从Blender创建的.pod文件,蓝色背景通过睫毛和眉毛网格显示。有谁知道为什么我遇到这个?

没有其他材料(除头发根部外看起来很正常)。 enter image description here

在她的左肩上添加了新的绿色材料,眉毛和睫毛开始显示背景 enter image description here

1 个答案:

答案 0 :(得分:0)

此问题是由场景中呈现节点的顺序引起的。

在第一个模型中,首先绘制头发,然后绘制皮肤,然后绘制眉毛和睫毛。在第二个模型中,头发,眉毛和睫毛都在皮肤之前绘制。当绘制头发或睫毛下的皮肤时,深度缓冲器指示已经绘制了更接近相机的东西,并且引擎不会渲染那些皮肤像素。但由于睫毛,眉毛和头发都含有透明度,我们最终会将它们透过它们看到背景上。

这种深度缓冲设计的使用是所有3D渲染的关键。它是引擎如何知道不会渲染被另一个对象视觉遮挡的像素,否则我们所看到的就是最后一个要渲染的对象。但是,当渲染包含透明度的重叠对象时,它和#39;使渲染顺序正确是很重要的,这样就可以首先渲染更接近透明对象的更远的物体。

Cocos3D 中,您可以使用多种工具订购透明对象进行渲染:

  1. 第一个主要工具是由drawingSequencer管理的CC3Scene。您可以配置几种不同类型的绘图顺控程序。默认音序器足够智能,可以先渲染所有不透明对象,然后渲染包含距离摄像机距离递减顺序的透明度的对象(首先渲染更远的对象)。这对于大多数场景最有效,特别是在物体四处移动并且可以不可预测地在彼此前面移动的情况下。不幸的是,在您的自定义CC3Scene初始化代码(您根据问题注释发送给我)中,您将默认的绘图序列器替换为不根据距离对透明对象进行排序的序列。如果删除该更改,一切正常。

  2. 未按距离显式排序的对象(如上面的第1部分所示)按照它们添加到场景的顺序进行渲染。因此,您还可以通过确保按照您希望它们呈现的顺序将对象添加到场景中来定义渲染顺序。这适用于静态模型,例如您的第一个角色(如果您更改它以在皮肤后添加头发)。

  3. CC3Node还具有zOrder属性,允许您显式覆盖渲染顺序,以便在zOrder值较小的对象之前呈现zOrder值较小的对象。 1}}值。如果您的静态模型的组件无法按渲染顺序添加,或临时覆盖可能相互传递的两个透明对象的渲染顺序,则此功能非常有用。使用zOrder属性取决于使用使用它的drawingSequencer(默认的绘图序列器)。

  4. 最后,您可以在渲染特定节点时暂时关闭深度测试或屏蔽,方法是在这些节点上将shouldDisableDepthTestshouldDisableDepthMask属性设置为YES