V3.6的引擎,用了3D粒子
由于要在UI之上显示3D粒子,所以为3D粒子做了个自定义相机:
auto winSize = cocos2d::CCDirector::getInstance()->getWinSize();
auto zeye = cocos2d::Director::getInstance()->getZEye();
auto camera1 = cocos2d:
:createPerspective(60, winSize.width / winSize.height, 10, zeye + winSize.height / 2.0f);
camera1->setDepth(1);
camera1->setCameraFlag(cocos2d::CameraFlag::USER1);
cocos2d::Vec3 eye(winSize.width / 2, winSize.height / 2.0f, zeye), center(winSize.width / 2, winSize.height / 2, 0.0f), up(0.0f, 1.0f, 0.0f);
camera1->setPosition3D(eye);
camera1->lookAt(center, up);
addChild(camera1);
这样3D粒子就完美呈现了,
然后用RenderTexture把带3D粒子的整个scene截图:
auto runningScene = cocos2d::Director::getInstance()->getRunningScene(); auto spriteSize = runningScene->getContentSize();
auto renderTexture = cocos2d::RenderTexture::create(spriteSize.width, spriteSize.height,
cocos2d::Texture2D::PixelFormat::RGBA8888, GL_DEPTH24_STENCIL8);
auto texture = renderTexture->getSprite()->getTexture();
texture->setAntiAliasTexParameters();
renderTexture->begin();
runningScene->visit();
renderTexture->end();
然后这个visit crash了,挂在: CCPURender.cpp:106
void PUParticle3DQuadRender::render(Renderer* renderer, const Mat4 &transform, ParticleSystem3D* particleSystem)里面:
auto camera = Camera::getVisitingCamera();
auto cameraMat = camera->getNodeToWorldTransform();
这个camera拿不到,直接返回nullptr
麻烦问下,这个是引擎bug还是哪里用错了?求解决方案,谢谢。