osg环境搭建与使用

2023-11-07

目录

环境安装

案例一:

案例二:

案例三:

案例四:


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


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

osg环境搭建与使用 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • Attention! No symbol directories found - please check your native debug configuration</font>

    我出现问题的版本是Android Studio2 2 3 之前项目是正常的 可以调试JNI代码 但是突然有一次不知道什么原因就无法调试 断点无法断下 调试时有这样的警告 Now Launching Native Debug Session
  • java进阶篇--TCP 为什么需要三次握手?

    TCP 协议是我们每天都在使用的一个网络通讯协议 因为绝大部分的网络连接都是建立在 TCP 协议上的 比如你此刻正在看的这篇文章是建立在 HTTP Hypertext Transfer Protocol 超文本传送协议 应用层协议的基础上的
  • 手把手教你微信第三方平台开发

    本文适合想接入第三方平台开发的同学 通过真实经验大致讲解一下相关业务 建议收藏以备不时之需 一 什么是微信开放平台 微信开放平台地址 微信开发平台实际上就是给微信外部人员提供微信能力的平台 我们可以在这个平台创建相关的应用 管理对应的认证
  • React服务端渲染框架Next.js入门之旅三:路由跳转和参数传递

    不带参数 静态路由 带参数 根据参数不同显示不同内容 动态路由 一 路由跳转 标签式跳转 在pages下新建juanA js以及juanB js作为两个跳转页面 juanA js import Link from next link exp
  • Vue => Vue监听组件滚动事件

    在dom元素上加ref 利用this refs recordwrapper获取到元素 添加滚动监听事件 希望得到的结果是滚动触发事件handleScroll 现在情况是失效 并没有监听到滚动动作 或者说滚动动作并没有出发事件 问题 监听事件
  • hadoop之hdfs分布式文件

    架构 HDFS是一个主从 Master Slaves 架构 由一个NameNode和一些DataNode组成 面向文件包含 文件数据 data 和文件元数据 metadata NameNode 负责存储和管理文件元数据 并维护了一个层次型的
  • 动态的为实体字段添加注解/注解属性

    可以动态的给实体添加注解 比如 导出表格的时候 根据条件决定是否导出该字段的列等使用 本例子将所有代码都放入工具类中 实际上有些不能实例化到内存中 只能作为一部分代码放在逻辑中 此种代码以再程序中标注 另一部分是可以持久化到内存 使用完工具
  • 移动端750怎么做响应式

    minimum scale 1 0 这个是同时设置最小缩放比例为1 0 在这里不写 user scalable no 禁用用户缩放功能 这样做的目的是为了确保网页在各种设备上都能够有合适的展示效果 缩放比例的限制可以避免用户过度缩放导致页面
  • JAVA IDEA中sout无法正常弹出,System.out.print,和System.out.println以及其他语句标红报错的问题。

    问题 在写代码时发现sout无法正常识别 println方法和println方法标红报错显示无法解析 问题分析 使用输出函数属于代码 而类中只能容纳变量以及方法 代码应该放在代码块 即方法 中 解决方法 在类中写一个方法 将代码放入方法中
  • macOS下 anaconda 虚拟环境及依赖包管理

    文章目录 环境管理 适用mac 1 2 创建虚拟环境失败后 排查问题 并再次成功创建虚拟环境的过程 依赖包管理 环境管理 适用mac 检查conda版本或是否已经安装 base lzh mac conda version conda 4 1
  • Yolo5の网络结构训练策略

    搬来的可能还是熟人的 抱歉啊 为了自己学习 讲解yolov5模型结构 数据增强 以及训练策略 官方地址 https github com ultralytics yolov5 yolov5模型训练流程 https blog csdn net
  • qt 编译时提示error: multiple definition of

    今天在用QT 5 4 1 编译程序时 提示error multiple definition 错误 以下红色字体为错误提示 D Wind PLT Projects BCS tmp moc Cntrlane cpp 156 error mul
  • 《Graph learning》

    上周发布的 图传播算法 上 中讲了关于图传播算法的基本范式和PageRank算法 本文将延续上周的文章 继续讲解剩下的三个算法 2 HITS HITS Hyperlink Induced Topic Search 另一个典型的图传播算法 其
  • 图形用户界面工具:Tkinter库

    Tkinter是Python默认的图形用户界面 Graphical User Interface GUI 库 Tkinter是T看interface 的缩写 意为Tkinter库是 Tkinter Tcl Tk的pathon接口 Tk它基于
  • 1.GAN生成mnist

    1 GAN Generative Adversarial Network 2 生成器 随机生成一个一维的100个随机数 latent dim 作为输入生成mnist图片 def build generator self model Sequ
  • matlab怎么定义矩阵变量_MATLAB01:基本的数学运算与矩阵运算

    若微信排版有问题 请点击阅读原文查看 MATLAB01 基本的数学运算与矩阵运算 MATLAB基本语法变量变量名保留变量不适合做变量名变量不应当覆盖内置函数变量类型数字型变量的显示格式MATLAB命令行使用MATLAB进行数字运算使用MAT
  • 【C语言】之实现大小写字母转换

    文件名 字母大小写转换 c 功能描述 输入一个字符判断其是否为字母 如果是字母则将大写转换为小写或将小写转换为大写 编写人 王廷云 编写日期 2017 1 10 include
  • Unreal Engine UE4虚幻引擎,生成Cubemap(HDR高动态范围贴图)

    1 在场景中添加Scene Capture Cube场景捕获立方体 2 在Scene Capture Cube细节面板中创建 Cube Render Target 立方体渲染目标 打开创建的 Cube Render Target 立方体渲染
  • Docker 学习笔记(九)-- Dockerfile 构建Tomcat 实战测试

    1 准备镜像文件 Tomcat 压缩包 Apache Tomcat Welcome 依赖的 JDK 压缩包 Java Downloads Oracle https www aliyundrive com s YzH6o5G5QUu 下载 后
  • osg环境搭建与使用

    目录 环境安装 案例一 案例二 案例三 案例四 我的vs2022 window11 环境安装 看这个文章即可 博客很详细 按照这个没问题的 5条消息 OSG OSG环境部署 OSG3 6 5 vs2017 win10 x64 超详细 osg