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);
```
背景和 模型 不在同一个层内 为何会被挡住 一部分
人呢 






你把背景用作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);