osg环境搭建与使用

目录

环境安装

案例一:

案例二:

案例三:

案例四:


我的vs2022,window11

环境安装

看这个文章即可,博客很详细,按照这个没问题的

(5条消息) 【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)_osg环境配置_bailang_zhizun的博客-CSDN博客

我的osglogo没有地球,不过无所谓,反正vs代码运行牛和logo都正常。应该是资源路径问题。

补充文章:(5条消息) OSG-OpenSceneGraph在WIN10与VS2022下的部署(OSG3.6.5+VS2022+Win10_x64)个人笔记详细_vs2022 osg_食月的博客-CSDN博客 

最快的入门方式就是实操案例

案例一:

牛在vs中的代码(release,x64)

(1)设置WIN32

osg环境搭建与使用_第1张图片

 否则可能报错,这个案例可能不报错,下面的不加WIN32肯定报错。下图是不加WIN32

osg环境搭建与使用_第2张图片

(2)设置include库

D:\CPlusProject\ThirdParty\OSG\build\include

(3)设置链接器

D:\CPlusProject\ThirdParty\OSG\build\lib



osg.lib;osgDB.lib;osgUtil.lib;osgGA.lib;osgViewer.lib;osgText.lib;%(AdditionalDependencies)

(4)代码

#include 
#include 
#include 

using namespace osg;
using namespace osgViewer;
using namespace osgDB;

int main(int argc, char* argv[])
{
	osgViewer::Viewer viewer;
	viewer.setSceneData(osgDB::readNodeFile("D:/CPlusProject/ThirdParty/OSG/Data/OpenSceneGraph-Data/cow.osg"));
	return viewer.run();

}

(5)展示 

osg环境搭建与使用_第3张图片

案例二:

 一个初步的带lod的案例


#include 
#include 

#include 
#include 
#include 
#include 
#include 
#include 
#include 


using namespace std;


int main() {
	osg::ref_ptr lod = new osg::LOD();
	lod->addChild(osgDB::readNodeFile("D:/CPlusProject/ThirdParty/OSG/Data/OpenSceneGraph-Data/glider.osg"), 0.0f, 20);
	lod->addChild(osgDB::readNodeFile("D:/CPlusProject/ThirdParty/OSG/Data/OpenSceneGraph-Data/cessna.osg"), 20, 100);
	lod->addChild(osgDB::readNodeFile("D:/CPlusProject/ThirdParty/OSG/Data/OpenSceneGraph-Data/clock.osgt"), 100, FLT_MAX);
	
	osg::ref_ptr viewer = new osgViewer::Viewer;
	osg::ref_ptr sceneRoot = new osg::Group;

	sceneRoot->addChild(lod.get());
	viewer->setSceneData(sceneRoot);
	
	return viewer->run();

}

 运行结果:这是层级为二的飞机osg环境搭建与使用_第4张图片

参考文档:(10条消息) 基于OSG讲解一下LOD_osg lod_微小的鱼的博客-CSDN博客

案例三:

两种lod显示方式


#include 
#include 

#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include 

osg::ref_ptr CreateNode() {
	osg::ref_ptr _root = new osg::Group;
	//创建牛模型
	osg::ref_ptr node1 = osgDB::readNodeFile("D:/CPlusProject/ThirdParty/OSG/Data/OpenSceneGraph-Data/cow.osg");
	//创建滑翔机模型
	osg::ref_ptr node2 = osgDB::readNodeFile("D:/CPlusProject/ThirdParty/OSG/Data/OpenSceneGraph-Data/glider.osg");
	//创建一个细节层次的节点LOD
	osg::ref_ptr lode = new osg::LOD;
	//添加子节点,在0到30的范围显示牛
	lode->addChild(node1.get(), 0.0f, 30.0f);
	//添加子节点,在30到100显示滑翔机
	lode->addChild(node2.get(), 30.0f, 100.0f);


	//创建一个细节层次节点LOD
	osg::ref_ptr lode1 = new osg::LOD;
	//按照像素大小来判断
	lode1->setRangeMode(osg::LOD::PIXEL_SIZE_ON_SCREEN);
	lode1->addChild(node1.get(), 0.0f, 1000.0f);
	lode1->addChild(node2.get(), 1000.0f, 2000.0f);
	//创建一个位置
	osg::ref_ptr pat1 = new osg::PositionAttitudeTransform();
	pat1->setPosition(osg::Vec3(-20.0f, 0.0f, 0.0f));
	pat1->addChild(lode1.get());


	_root->addChild(lode.get());
	_root->addChild(pat1.get());
	return _root.get();
	

}

using namespace std;




int main() {


	osg::ref_ptr node=CreateNode();

	osgViewer::Viewer viewer;
	viewer.setSceneData(node);
	return viewer.run();

	return 0;
}

osg环境搭建与使用_第5张图片

可能有用的文章:

[原][osg][oe]分析一块倾斜摄影瓦片的数据 - 南水之源 - 博客园 (cnblogs.com)

OSG中距离转像素公式(PIXEL_SIZE_ON_SCREEN) - 代码天地 (codetd.com) 

案例四:

osg::LOD会一次性载入所有模型进入内存,只是进行有选择的绘制而已。为了避免这种一次性加入内存的浪费行为,OpenSceneGraph提供了另外一种细节层次节点:分页细节层次节点osg::PagedLOD,PagedLOD继承自osg::LOD,可实现动态分页加载,可根据需要来加载模型文件,加载过程中有单独的线程负责实时调度和加载。


#include 
#include 

#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include 

osg::ref_ptr CreateNode() {
	osg::ref_ptr _root = new osg::Group;
	//创建牛模型
	osg::ref_ptr node1 = osgDB::readNodeFile("D:/CPlusProject/ThirdParty/OSG/Data/OpenSceneGraph-Data/cow.osg");
	//创建滑翔机模型
	osg::ref_ptr node2 = osgDB::readNodeFile("D:/CPlusProject/ThirdParty/OSG/Data/OpenSceneGraph-Data/glider.osg");
	//创建一个细节层次的节点PageLOD
	osg::ref_ptr lode = new osg::PagedLOD;
	//添加子节点,在0到30的范围显示牛
	lode->addChild(node1.get(), 0.0f, 30.0f);
	//添加子节点,在30到100显示滑翔机
	lode->addChild(node2.get(), 30.0f, 100.0f);


	_root->addChild(lode.get());
	return _root.get();
	

}

using namespace std;




int main() {


	osg::ref_ptr node=CreateNode();

	osgViewer::Viewer viewer;
	viewer.setSceneData(node);
	return viewer.run();

	return 0;
}


osg环境搭建与使用_第6张图片

 

你可能感兴趣的:(图像算法与c++,c++,算法,图像处理)