|
osgOcean海洋效果非常好,更难为可贵的是,还可以给海洋设置海平面高度及风速。
为了更好地展现osgOcean的效果,程序中动态加载卸载osgOcean,展现不同高度,不同风速的海洋。
现在遇到osgOcean无法卸载!
加载海洋的方法:
osgOcean::ShaderManager::instance().enableShaders(!disableShaders);
m_pOceanSceneNode = new OceanSceneModel(sky_type,windDirection, windSpeed, depth, reflectionDamping, scale, isChoppy, choppyFactor, crestFoamHeight);
m_pOceanSceneNode->getOceanScene()->setOceanSurfaceHeight(fOceanHeight);
m_pOceanSceneNode->getOceanScene()->setNodeMask( m_pOceanSceneNode->getOceanScene()->getNormalSceneMask() |
m_pOceanSceneNode->getOceanScene()->getReflectedSceneMask() |
m_pOceanSceneNode->getOceanScene()->getRefractedSceneMask() );
m_pRoot->addChild( m_pOceanSceneNode->getScene() );
海洋就可以再场景中正常显示,可以改变天空类型,风向、海平面高度等。
卸载海洋的方法:
bool bUnLoadSkyFlag=m_pOceanSceneNode->getOceanScene()->removeChild(m_pSkyDome);
bool bUnLoadOceanFlag=m_pRoot->removeChild(m_pOceanSceneNode->getScene());
if (bUnLoadOceanFlag&&bUnLoadSkyFlag)
{
m_pSkyDome=NULL;
m_pOceanSceneNode=NULL;
bLoadSkyFlag=false;
bLoadOceanFlag=false;
cout<<"removed ocean and sky success!"<<endl;
return true;
}
else
cout<<"removed ocean and sky failed!"<<endl;
return false;
第一次加载海洋,内存占用300M,
第二次加载海洋,内存占用403M,
第三次加载海洋,内存占用515M,
实验证明,卸载函数是失败的。
怎样才可以把海洋成功卸载?
|
|