diff --git a/Source/src/scene/OEScene.cpp b/Source/src/scene/OEScene.cpp index dd910c80..0adf2df9 100644 --- a/Source/src/scene/OEScene.cpp +++ b/Source/src/scene/OEScene.cpp @@ -23,21 +23,10 @@ OEScene::OEScene() { osgDB::FilePathList& pathList = osgDB::Registry::instance()->getDataFilePathList(); const std::string& basePath = RecourceHelper::Get().GetBasePath().toStdString(); pathList.push_back(basePath + "/resources/earth/"); - pathList.push_back(basePath + "resources/textures/"); + pathList.push_back(basePath + "/resources/textures/"); - earthRootNode_ = osgDB::readNodeFile("triton.earth"); - if (!earthRootNode_) { - LOG_ERROR("read earth node(triton.earth) failed"); - return; - } - - earthMapNode_ = osgEarth::MapNode::get(earthRootNode_); - LOG_INFO("earth map node get success: {}", earthMapNode_.valid()); - - entityRoot_ = new osg::Group; - if (earthMapNode_) { - earthMapNode_->addChild(entityRoot_); - } + + logarithmicDepthBuffer_ = std::make_unique(); } @@ -68,19 +57,66 @@ void OEScene::AttachView(OsgView* view) { //mt->setMatrix(osg::Matrix::translate(eye)/* * osg::Matrix::scale(osg::Vec3(10, 10, 10))*/); //////mt->getOrCreateStateSet()- - //osg::Node* node = view->GetView()->getSceneData(); - //if (nullptr == node) { - // LOG_INFO("view scene data is nullptr, root valid:{}", scene_.valid()); - // view->GetView()->setSceneData(scene_); - //} else { - // osg::Group* group = node->asGroup(); - // if (nullptr != group) { - // LOG_INFO("node is group"); - // group->addChild(scene_); - // } else { - // LOG_INFO("node is not group"); - // } - //} + earthRootNode_ = osgDB::readNodeFile("triton.earth"); + if (!earthRootNode_) { + LOG_ERROR("read earth node(triton.earth) failed"); + return; + } + + earthMapNode_ = osgEarth::MapNode::get(earthRootNode_); + LOG_INFO("earth map node get success: {}", earthMapNode_.valid()); + + entityRoot_ = new osg::Group; + if (earthMapNode_) { + earthMapNode_->addChild(entityRoot_); + } + + + skyDome_ = osgEarth::SkyNode::create(); + if (!earthMapNode_) { + LOG_WARN("eart map node is nullptr"); + return; + } + + skyDome_->addChild(earthMapNode_); + + osg::Node* node = view->GetView()->getSceneData(); + if (nullptr == node) { + LOG_INFO("view scene data is nullptr, root valid:{}", skyDome_.valid()); + view->GetView()->setSceneData(earthRootNode_); + } else { + osg::Group* group = node->asGroup(); + if (nullptr != group) { + LOG_INFO("node is group"); + group->addChild(skyDome_); + } else { + LOG_INFO("node is not group"); + } + } + + //osg::Group* parent = earthMapNode_->getParent(0); + /*osg::Group* parent = earthMapNode_->getParent(0); + if (nullptr == parent) { + skyDome_->addChild(earthMapNode_); + parent->addChild(skyDome_); + parent->removeChild(earthMapNode_); + } else { + + }*/ + + /* skyDome_->attach(view->GetView()); + + skyDome_->setAtmosphereVisible(true); + skyDome_->setSunVisible(true); + skyDome_->setMoonVisible(true); + skyDome_->setStarsVisible(true); + + skyDome_->setDateTime(osgEarth::DateTime(2024, 12, 24, 12)); + skyDome_->setSimulationTimeTracksDateTime(true);*/ + + logarithmicDepthBuffer_->install(view->GetView()->getCamera()); + + //view->GetView()->setRealizeOperation(new osgEarth::GL3RealizeOperation()); } void OEScene::DetachView(OsgView* view) { @@ -90,7 +126,9 @@ void OEScene::DetachView(OsgView* view) { parent->removeChild(earthRootNode_); } } + logarithmicDepthBuffer_->uninstall(view->GetView()->getCamera()); view->GetView()->setSceneData(nullptr); + } #define USE_CUSTOM_SHADER diff --git a/Source/src/scene/OEScene.h b/Source/src/scene/OEScene.h index d3ea478d..7039fb02 100644 --- a/Source/src/scene/OEScene.h +++ b/Source/src/scene/OEScene.h @@ -5,8 +5,10 @@ #include #include +#include +#include -#include "scene/SkyDome.h" +//#include "scene/SkyDome.h" class OsgView; @@ -36,4 +38,6 @@ private: osg::ref_ptr earthRootNode_; osg::ref_ptr earthMapNode_; osg::ref_ptr entityRoot_; + osg::ref_ptr skyDome_; + std::unique_ptr logarithmicDepthBuffer_; }; diff --git a/Source/src/viewer/OsgViewer.cpp b/Source/src/viewer/OsgViewer.cpp index 2aa15d68..3af2dcb8 100644 --- a/Source/src/viewer/OsgViewer.cpp +++ b/Source/src/viewer/OsgViewer.cpp @@ -4,6 +4,7 @@ #include #include +#include #include "common/SpdLogger.h" #include "viewer/OsgView.h" @@ -55,6 +56,7 @@ OsgView* OsgViewer::CreateView(int x, int y, int width, int height, void* winHan view->InitGraphiceWindow(x, y, width, height, reinterpret_cast(winHandle), "dytView"); OnAddView(view, x, y, width, height); + //compositeViewer_->setRealizeOperation(new osgEarth::GL3RealizeOperation()); return view; } @@ -81,7 +83,11 @@ OsgView* OsgViewer::GetView() const { } bool OsgViewer::Initialize(void) { + if (initalized_) { + return initalized_; + } initalized_ = true; + compositeViewer_->setRealizeOperation(new osgEarth::GL3RealizeOperation()); return initalized_; } diff --git a/Source/src/workspace/WorkSpace.cpp b/Source/src/workspace/WorkSpace.cpp index a3cd8a61..0f6af669 100644 --- a/Source/src/workspace/WorkSpace.cpp +++ b/Source/src/workspace/WorkSpace.cpp @@ -59,9 +59,9 @@ bool WorkSpace::CreateScene(const std::string& scene) { activeScene_->InitEventHandle(view_); #else activeScene_ = new OEScene; - activeScene_->UseShadows(false); + //activeScene_->UseShadows(false); - activeScene_->ChangeScene(OsgScene::CLOUDY); + //activeScene_->ChangeScene(OsgScene::CLOUDY); activeScene_->AttachView(view_); activeScene_->InitEventHandle(view_);