关于3.0版本,3d场景中绘制顺序的问题

在游戏测试时,发现了一个奇怪的现象,不明白是什么原因造成的,发上来,请大家看一下

出现的场景:

创建一个人物模型,然后在其脚下放一个光环图案并让图案转动。

注:用“-------- ”来表示节点的child
模型的结构(Node)
-------- sprite3D(人物模型)
---------sprite3D(空的sprite3D)
----------- sprite(光环图片)

怪异的状况,闯将两个这样的模型,然后让他们接近,让光环部分相交

然后保持不动,让光环持续转动,发现左边的光环一会显示在右边光环的上面,一会显示在下面

详细请看截图

深度测试 的问题!

你可以让2d和3D精灵都在一个3D节点下。

测试了一下,发现依然有这个问题的存在

我现在将所有的2D精灵都放在一个3D的精灵下面,依然观测到zorder不正确的现象。

为了方便观测,我还增加了一个阴影图片在光环图片下面,并复制了一份做了偏移。

然后移动精灵观测到:

1.当精灵面朝上方时,阴影在光环下面,且人脚下的光环在旁边的光环上面
2.当精灵面朝下方时,阴影在光环上面,且人脚下的光环在旁边的光环下面

查了一下深度测试测资料,说是如果zbuffer的精度不够时,可能会产生随机效果,会是这个原因吗?

但是多走动了几圈发现,这种现象不是随机的,只跟精灵的朝向有关,就是只会出现上面2种状态,难道是跟摄像机有关系?

继续测试了一下

2D和3D的精灵放在同一个节点下面不会出问题,

但是多个2D精灵放在同一个节点下面,2D精灵之间会出现Zorder混乱的情况

简单跟踪了一下,render的顺序是没有错的,难道是shader里面出问题了吗?

我本来是想用billboard来做血条的,需要一个血条背景,和血条来组合,因为都是2个2D精灵所以经常会出现血条闪烁的情况,有的时候血条还会被背景覆盖掉
这个问题有什么解决方案吗?

再实验了一下,建立一个4个顶点的模型,来创建一个sprite3D就不会出问题。

按理说,sprite2D也是4个顶点构成的结构,看来还是2者的shader不一样导致的,或许可以考虑提供一个sprite的3D版本来解决这个问题吧

“meshes”:
{
“attributes”: {
“size”: 3,
“type”: “GL_FLOAT”,
“attribute”: “VERTEX_ATTRIB_POSITION”
}, {
“size”: 3,
“type”: “GL_FLOAT”,
“attribute”: “VERTEX_ATTRIB_NORMAL”
}, {
“size”: 2,
“type”: “GL_FLOAT”,
“attribute”: “VERTEX_ATTRIB_TEX_COORD”
}],
“vertices”:
100.000000, -100.000000, 0.000000, 0.000000, 0.000000, -1.000000, 0.000000, 0.000000,
-100.000000, -100.000000, 0.000000, 0.000000, 0.000000, -1.000000, 1.000000, 0.000000,
100.000000, 100.000000, 0.000000, 0.000000, 0.000000, -1.000000, 0.000000, 1.000000,
-100.000000, 100.000000, 0.000000, 0.000000, 0.000000, -1.000000, 1.000000, 1.000000
],
“parts”:
{
“id”: “shape1_part1”,
“type”: “TRIANGLES”,
“indices”:
0, 1, 2, 1, 3, 2
]
}
]
}