Cocos2dx 3.7 正式版依然无法使用 setGlobalZOrder 来排序3D模型和UI对象的渲染层级关系!!!

Cocos2dx 3.7 正式版依然无法使用 setGlobalZOrder 来排序3D模型和UI对象的渲染层级关系

代码:
gWorldScene = cc.Scene:create()
cc.Director:getInstance():runWithScene(gWorldScene)

local sprite3D = cc.Sprite3D:create(“Sprite3DTest/tortoise.c3b”)
gWorldScene:addChild(sprite3D)
sprite3D:setPosition(cc.p(200, 200))
sprite3D:setGlobalZOrder(1)
sprite3D:setScale(0.2)

local button = ccui.Button:create()
gWorldScene:addChild(button)
button:loadTextures(“cocosui/animationbuttonnormal.png”, “cocosui/animationbuttonpressed.png”, “”)
button:setPosition(cc.p(250, 230))
button:setGlobalZOrder(200)
local imageView = ccui.ImageView:create(“cocosui/CloseSelected.png”)
gWorldScene:addChild(imageView)
imageView:setPosition(cc.p(250, 230))
imageView:setGlobalZOrder(200)

结果:

可以看到尽管UI对象的GlobalZOrder设置为200,仍然渲染在3D模型的下面!!

还有,不使用DEMO里面的Camera方式,是应为Camera个数不够做场景层级排序用,所以只好使用 setGlobalZOrder 函数。

想把一个3D模型显示在两个UI对象之间,除了设置多个Camera就没有其他方法了么???

目前3d-2d混合使用没有太好的解决方案。
目前有两个不太好的方法,

  1. 多个相机,参考cpp-tests中的Scene3D
  2. 就是Global z order
    sprite3D:setGlobalZOrder(0)
    2d ui global z < 0,在3d物体下面, 2d ui global z > 0 在3d物体上面。
    3D、2D同时大于0的时候可能由于材质系统的引入,对深度测试做了修改,由于打开了深度测试导致3D物体始终在上面。

:10: :10: :10: :10: :10: :10: :10: :10: :10: :10:

真是头疼啊,由于场景是2D的,Camera的个数根本不够用来分层。想用globalZOrder做分层,结果还无法显示在两个UI的中间。

建议使用camera来实现类似的效果
在3.7版本里面,已经可以通过3D空间的方式来组织场景了
比如UI+3D+UI这样的结构
可以把最底层的UI用默认的摄像机来做
中间的3D和其对应的摄像机放到3D空间的一个位置
最上层的UI和对应摄像机又放到另外的位置