osg环境搭建与使用

news/2024/7/21 6:38:47 标签: c++, 算法, 图像处理

目录

环境安装

案例一:

案例二:

案例三:

案例四:


我的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

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

(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 <Windows.h>
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>

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)展示 

案例二:

 一个初步的带lod的案例


#include <string>
#include <iostream>

#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
#include <osgDB/WriteFile>
#include <osg/Node>
#include <osg/Geode>
#include <osg/Group>
#include <osg/PagedLOD>


using namespace std;


int main() {
	osg::ref_ptr<osg::LOD> 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<osgViewer::Viewer> viewer = new osgViewer::Viewer;
	osg::ref_ptr<osg::Group> sceneRoot = new osg::Group;

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

}

 运行结果:这是层级为二的飞机

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

案例三:

两种lod显示方式


#include <string>
#include <iostream>

#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
#include <osgDB/WriteFile>
#include <osg/Node>
#include <osg/Geode>
#include <osg/Group>
#include <osg/PagedLOD>

#include <osg/PositionAttitudeTransform>

osg::ref_ptr<osg::Node> CreateNode() {
	osg::ref_ptr<osg::Group> _root = new osg::Group;
	//创建牛模型
	osg::ref_ptr<osg::Node> node1 = osgDB::readNodeFile("D:/CPlusProject/ThirdParty/OSG/Data/OpenSceneGraph-Data/cow.osg");
	//创建滑翔机模型
	osg::ref_ptr<osg::Node> node2 = osgDB::readNodeFile("D:/CPlusProject/ThirdParty/OSG/Data/OpenSceneGraph-Data/glider.osg");
	//创建一个细节层次的节点LOD
	osg::ref_ptr<osg::LOD> 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<osg::LOD> 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<osg::PositionAttitudeTransform> 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<osg::Node> node=CreateNode();

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

	return 0;
}

可能有用的文章:

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

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

案例四:

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


#include <string>
#include <iostream>

#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
#include <osgDB/WriteFile>
#include <osg/Node>
#include <osg/Geode>
#include <osg/Group>
#include <osg/PagedLOD>

#include <osg/PositionAttitudeTransform>

osg::ref_ptr<osg::Node> CreateNode() {
	osg::ref_ptr<osg::Group> _root = new osg::Group;
	//创建牛模型
	osg::ref_ptr<osg::Node> node1 = osgDB::readNodeFile("D:/CPlusProject/ThirdParty/OSG/Data/OpenSceneGraph-Data/cow.osg");
	//创建滑翔机模型
	osg::ref_ptr<osg::Node> node2 = osgDB::readNodeFile("D:/CPlusProject/ThirdParty/OSG/Data/OpenSceneGraph-Data/glider.osg");
	//创建一个细节层次的节点PageLOD
	osg::ref_ptr<osg::PagedLOD> 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<osg::Node> node=CreateNode();

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

	return 0;
}


 


http://www.niftyadmin.cn/n/444575.html

相关文章

设计模式之单例模式笔记

设计模式之单例模式笔记 说明Singleton(单例)目录单例模式之饿汉式-静态成员变量写法测试类 单例模式之饿汉式-静态代码块写法测试类 单例模式之懒汉式-线程不安全写法和线程安全写法测试类 单例模式之懒汉式-双重检查锁方式(推荐使用的方式)单例模式之懒汉式-静态内部类方式(推…

【大学计算机技术】第七章 测试4

文章目录 选择题 选择题 实现无线上网方式的计算机内不需要安装网卡。 A. 正确 B. 错误 正确答案&#xff1a; B WWW是Internet上最广泛的一种应用&#xff0c;WWW浏览器不仅可以下载信息&#xff0c;也可以上传信息。 A. 正确 B. 错误 正确答案&#xff1a; A 因特网是一个庞…

微信小程序开发之获取用户头像昵称

本文是对另一篇文档 https://blog.csdn.net/duke_ding2/article/details/130674320 的补充。 环境 微信开发者工具 Stable 1.06.2306020调试基础库 2.32.2 背景 在较低版本&#xff08;2.27.0及以下&#xff09;的基础库中&#xff0c;在小程序里可以使用 wx.getUserProfil…

AI工程化的“基座能力”?—— 聊聊GPT Function Calling

点击↑上方↑蓝色“编了个程”关注我~ 这是Yasin的第 94 篇原创文章 最近AI大模型火出了圈&#xff0c;很多人惊叹它的智能程度。但大多数人都以为它的能力主要在“聊天”、“写文案”这方面。然而实际它能做的远远更多。 Chat GPT是当今世界上最智能的模型&#xff0c;它前段时…

【CompletableFuture事件驱动异步回调】

文章目录 CompletableFuture事件驱动异步回调小故事 CompletableFuture事件驱动异步回调 CompletableFuture 是 Java 8 提供的一个强大的异步编程框架&#xff0c;它提供了一种基于事件驱动的回调方式&#xff0c;可以让我们非常方便地实现异步操作&#xff0c;并在操作完成后…

英语学习:V开头

vacant 空缺的 vacation 假期 vague 含糊的 vain 自负的 valid 有效的 valley 山谷 valuable 值钱的 value 价值 vanilla 香草 variety 种种 various 各种各样的 vase 花瓶 vast 巨大的 veal 小牛肉 vegetable 蔬菜 vehicle 交通工具 version 变体 ve…

Ribbon LoadBalanced底层机制源码探秘

&#x1f34a; Java学习&#xff1a;社区快速通道 &#x1f34a; 深入浅出RocketMQ设计思想&#xff1a;深入浅出RocketMQ设计思想 &#x1f34a; 绝对不一样的职场干货&#xff1a;大厂最佳实践经验指南 &#x1f4c6; 最近更新&#xff1a;2023年6月18日 &#x1f34a; 点…

15-3.自定义组件的生命周期函数

目录 1 组件自身的生命周期函数 1.1 使用lifetimes声明生命周期函数 1.2 不使用lifetimes声明生命周期函数 2 组件所在页面的生命周期函数 1 组件自身的生命周期函数 created 组件实例刚刚被创建后执行&#xff0c;可以理解为 html模板刚刚搞好attached 组件被放入节…