背景和 模型 不在同一个层内 为何会被挡住 一部分

 auto visibleSize = Director::getInstance()->getVisibleSize();
    auto origin = Director::getInstance()->getVisibleOrigin();  
    auto sprite = Sprite::create("3D/Sea.jpg");
    sprite->setPosition(Vec2(visibleSize / 2) + origin);
    auto spr3d = Sprite3D::create();
    spr3d->addChild(sprite);
    //创建背景所在的层
    Layer * bgLayer = Layer::create();
    bgLayer->addChild(spr3d);
    addChild(bgLayer);
    //创建鱼所在的层
    m_FishLayer = FishLayer::create();
    m_FishLayer->retain();
    addChild(m_FishLayer);


```

背景和 模型 不在同一个层内  为何会被挡住 一部分

人呢 :3::3::3::3::3::3::3:

你把背景用作Sprite3D,两个3D精灵的Z轴太近所以这样,背景直接作为2D来用

直接做2d的用的话 3d模型 会整个被挡住 无论怎么设置ZOrder都没用

 auto visibleSize = Director::getInstance()->getVisibleSize();
    auto origin = Director::getInstance()->getVisibleOrigin();  
    auto sprite = Sprite::create("3D/Sea.jpg");
    sprite->setPosition(Vec2(visibleSize / 2) + origin);
    addChild(sprite);
    sprite->setZOrder(-100);
    //auto spr3d = Sprite3D::create();
    //spr3d->addChild(sprite);
    //spr3d->setPositionZ(-1);
    //创建背景所在的层
    //Layer * bgLayer = Layer::create();
    //bgLayer->addChild(spr3d);
    //bgLayer->setPositionZ(-50);
    //addChild(bgLayer);
    //创建鱼所在的层
    m_FishLayer = FishLayer::create();
    addChild(m_FishLayer);
```

3D中cocos2d有个和Unity Camera相同的概念叫相机的深度(Depth),cocos2d默认深度是0, 深度越小越渲染优先。

设置深度 Camera::setDepth()

相机深度不是用来区别多个相机的渲染优先级的吗? 可这里只有一个相机啊

搞明白了, cocos 除了自己定义的相机外 还有默认的 一个相机(depth = 0 那个),cocos会优先 使用自定义的的相机渲染 然后使用默认的相机有渲染,只要 把 上面的代码中的 背景(2d) 和 模型(3d) 分别绑定不同的相机就可以 就需要自定义一个 depth < 0 的相机 去 渲染背景

auto visibleSize = Director::getInstance()->getVisibleSize();
auto origin = Director::getInstance()->getVisibleOrigin();
auto sprite = Sprite::create(“3D/Sea.jpg”);
sprite->setPosition(Vec2(visibleSize / 2) + origin);
addChild(sprite);
Camera * mycamera = …;
mycamera->setCameraFlag(CameraFlag::USER1);
mycamera->setDetph(-1);
sprite->setCameraMask((unsigned short)CameraFlag::USER1);
//创建鱼所在的层
m_FishLayer = FishLayer::create();
addChild(m_FishLayer);

设置global

正解 简洁明了 方便 快捷 有效
sprite->setGlobalZOrder(-1);