osg读取自定义格式插件

osg读取自定义格式文件 osg通过插件形式读取文件。 新建工程,输出为dll。 #include <sstream> #include <osg/Image> #include <osg/Group> #include <osg/Notify> #include <osg/Geode> #include <osg/Shape> #include... 阅读详情
#include <sstream>
#include <osg/Image>
#include <osg/Group>
#include <osg/Notify>
#include <osg/Geode>
#include <osg/Shape>
#include <osg/ShapeDrawable>

#include <osgDB/FileNameUtils>
#include <osgDB/FileUtils>
#include <osgDB/fstream>
#include <osgDB/Registry>
#include <osgDB/Input>
#include <osgDB/Output>
#include <iostream>

using namespace osg;
using namespace osgDB;


class FSReaderWriter :public ReaderWriter
{
public:
	FSReaderWriter()
	{
		supportsExtension("fs", "FreeSouth's format");
	}
	virtual const char* className() const
	{
		return "FSReaderWriter";
	}
	virtual ReadResult readNode(const std::string& file, const Options* opt) const
	{
		std::string ext = osgDB::getLowerCaseFileExtension(file);
		if (!acceptsExtension(ext))
			return ReadResult::FILE_NOT_HANDLED;
		std::string fileName = osgDB::findDataFile(file, opt);
		if (fileName.empty())
			return ReadResult::FILE_NOT_FOUND;
		osgDB::ifstream fin(fileName.c_str());
		if (fin)
			return readNode(fin, opt);
		return 0L;
	}
	
	
	virtual ReadResult readNode(std::istream& fin, const Options* opt) const
	{
		Input fr;
		fr.attach(&fin);

		osg::ref_ptr<osg::Geode> gnode = new osg::Geode;
		osg::Vec3 center;
		float radius;

		while (!fr.eof())
		{
			std::cout << "out" << std::endl;
			if (fr.matchSequence("%f %f %f %f"))
			{
				std::cout << "in" << std::endl;
				fr.readSequence(center);
				fr.readSequence(radius);
				std::cout << "Center is :" << center.x() << "" << center.y() << " " << center.z() << " " << std::endl;
				std::cout << "Radius is " << radius << std::endl;
				gnode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(center, radius)));
			}
			else
			{
				std::cout << "fr is NULL" << std::endl;
				++fr;
			}
		}
		return gnode;
	}
};

REGISTER_OSGPLUGIN(fs, FSReaderWriter)//注册

命名为osgdb_fs.dll,复制到OSG3.4\bin\osgPlugins-3.4目录下。

#include <osgViewer/Viewer>
#include <osgDB/ReadFile>

int main()
{
	osgDB::Registry::instance()->addFileExtensionAlias("fs", "fs");//将文件扩展名与dll名关联起来

	osg::ref_ptr<osg::Group> group = new osg::Group;
	group->addChild(osgDB::readNodeFile("D://data//osg_study//test.fs"));

	osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
	viewer->setSceneData(group.get());
	viewer->run();
	return 0;
}

 

osg探究补充:osg数据加载原理(插件机制简介) 前言 我们接着昨天的继续,昨天主要是讲解了DatabasePager类中的特定的成员变量以及run函数的第一部分,对所要请求加载的数据按照是否是网络数据进行分类加载模式。今天我们就看看数据是怎们加载到osg环境中的。 还是在DatabasePager::DatabaseThread::run()函数中,首先我们保证了databaseRequest是线程安全的,因为run()函数是创建一个唯... 阅读详情

相关推荐

osg读取stl_osg探究补充:osg数据加载原理(插件机制简介)

前言我们接着昨天的继续,昨天主要是讲解了DatabasePager类中的特定的成员变量以及run函数的第一部分,对所要请求加载的数据按照是否是网络数据进行分类加载模式。今天我们就看看数据是怎们加载到osg环境中的。还是在DatabasePager::DatabaseThread::run()函数中,首先我们保证了databaseRequest是线程安全的,因为run()函数是创建一个唯一的写入_l...

weixin_39855634的博客 874

osg实现自定义插件读取自定义格式的模型文件到场景

osg提供了很多插件来读取模型文件到场景中,这些插件支持大约70种格式类型的文件,但现实中的文件是各式各样,osg不可能囊括所有类型文件,当osg不支持某种类型格式文件时,就需要自己根据文件的格式开发插件来对这些文件定制解析、读取。本文讲解在osg中,如何实现自定义插件读取自定义格式的模型文件到场景。在读本博文之前,强烈建议先看博文,该篇博文对osg读取文件的核心函数osgDB::readNodeFile的源码及原理机制进行了深入的剖析,看完并理解后,更加深对本博文的理解。

danshiming的博客 1260

OSG资料汇总

介绍OSG渲染引擎架构——整体认识读取其他文件模型主要使用osgDB::ReaderWriter OSG读取模型插件的单独使用 osgDB插件机制 osg读取文件的原理(插件工作机制) osgDB的加载机制,使用3DS插件做参考(转,整理现有osgDB资料)安装相关 OSG+VS2013+Win7 环境搭建,osgvs2013 OSG3.40 编译时,无法打开输入文件“optimized.l

_Mr_Feng的博客 4114

编译osg程序遇到ifstream和ofstream库多重定义错误

因为osgDB有自定义的ifstream和ofstream,和std标准库,所以我的一个程序报了错 错误 LNK2005 "public: __cdecl std::basic_ifstream<char,struct std::char_traits<char> >::basic_ifstream<char,struct std::char_trait...

tankweight的博客 1601

OSG编程指南<十九>:OSG插件的工作机制和自定义插件编写

OSG插件的工作机制和自定义插件编写示例

欧特GO 1854

OSG开发笔记(二十九):OSG加载模型文件、加载3DMax三维型文件Demo

Osg深入之后需要打开模型文件,这些模型文件是已有的模型文件,加载入osg之后可以在常见中展示模型文件,该节点可以操作,多个逼真的模型的节点就实现了基本的场景构建。自定义文件插件主要是自定义一个插件读写类,继承osgDB::ReaderWriter类,然后根据需求重写如readNode等函数方法即可。

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 1万+

C++错误:不允许使用不完整的类型

写了下面这个代码,结果在ifstream处提示“不允许使用不完整的类型”     string from,to;     cin>>from>>to;     ifstream is(from.c_str());     istream_iterator ii(is);     istream_iterator eos;     vector b(ii,eos);    

大强 8万+

OSG中osgDB库

如果你有自定义的文件格式,可以为osgDB编写自己的读写插件。你需要继承特定的基类(如)并实现readNodewriteNodereadImagewriteImage等虚函数,然后将代码编译成动态库放入 OSG 插件路径即可。自定义插件本质上是一个动态链接库.dll.soon Linux,.dylibon macOS)。这个库需要实现并导出一个继承自的类,该类包含了识别文件扩展名、读取文件和写入文件的逻辑。OSG 在运行时会在其插件路径(由环境变量。

深之JohnChen的专栏 314

C++ ofstream和ifstream详细用法

转自:http://soft.chinabyte.com/database/460/11433960.shtml ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;   在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:   1、插入器(&lt;&lt;...

架构设计 189

OSG 3D模型格式插件

这些 DLL 文件是 OpenSceneGraph 的模型格式插件功能:每种插件负责一种特定的3D模型文件格式的导入和导出自动加载:当调用时,OSG 会根据文件扩展名自动加载对应的插件重要性:这些插件是 OSG 与各种3D建模软件之间的桥梁:通用静态模型交换:兼容老旧3D Studio格式:专业动画和复杂场景:开放标准,学术研究:3D打印和纯几何数据。

深之JohnChen的专栏 639

OSG开发笔记(一):OSG介绍、编译

需要用到三维立体变换、三维球体等三维开发,之前准备使用opengl,但是opengl较为底层,综合考量选型osg。

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 8万+

osg文件读写插件创建注意事项

在自己自定义一个osg文件读写机制时,需要注意几点: 1、在构造函数中需要指定文件后缀名; 例如:A(){supportsExtension(“1111”,“Load @.1111文件”);} 2、在源文件中注册插件: 例如:A.cpp REGISTER_OSGPLUGIN(1111,A) 3、osg读取文件机制是通过调用readNodeFile()形式调用,最终将会进入readNode()函数中; 那么 在自定义的readNode()中,首要的就要先判断文件后缀是否为该插件要加载的文件,如果不判断见将会导

yyyyyyview的博客 463

OSG读取模型插件的单独使用

OSG读取模型插件的单独使用 OSG读取模型插件的单独使用

[原][资料整理][osg]osgDB文件读取插件,工作机制,支持格式,自定义插件

参考: osgPlugins相关 osg读取文件的原理(插件工作机制) 当使用osgDB读取文件时,会自动根据文件的扩展名来到插件目录中寻找相应的插件,来实现。 比如: osgviewer cow.osg 调用了osgdb_osg插件去读*.osg文件。 osgviewer model.flt 调用了osgdb_flt插件去读*.flt文件。 使用代码我...

weixin_30673611的博客 1344

机械臂算法设计MATLAB|运动学动力学|轨迹规划|路径规划|Simulink

RRT为最常用的路径规划算法,还有其变种(RRT*,RRT-connect等)。RRT是一种多维空间中高效的规划方法。它以一个初始点作为根节点,通过随机采样增加叶子节点的方式,生成一个随机扩展树。随机扩展树不断增长,直到到达目的位置。**Step1:**构建多维状态空间(joint space),**Step2:**构建joint space的障碍检测算法**Step3:**在joint space应用RRT。

qq_35997213的博客 4476

PowerBI启动故障排查:环境变量与兼容性设置全指南

本文详细解析了PowerBI启动故障的常见问题,如空白界面和闪退,并提供了环境变量修改与兼容性设置的全方位解决方案。通过调整WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS环境变量和设置兼容模式,有效解决PowerBI启动问题,提升软件运行稳定性。

weixin_29255731的博客 471

【OSG : 原理】osg读取文件的原理(插件工作机制)

一、osg读取文件的原理(插件工作机制)【重要】 二、osg的readnodefile一直返回空指针 三、osgPlugins相关 【重要】 四、附件: 我们可以直接使用osgDB::readNodeFile("cow.osg")来读取不同格式的模型,osgDB库允许用户程序加载、使用和写入3D数据库,它采用插件管理的架构,可以支持大量常见的2D图形和3D图形文件格式。osgDB负责...

weitaming1的博客 2261

S7-1200控制S120变频器

②:硬件目录下,添加实物S120设备进行组态(其它现场设备--PROFINET IO--DRIVES......②:双击S120进行IP地址和设备名称设置(注:此处要与STATER软件设置S120一致)M10.0接通时,电机开始运行,M10.0断开,电机停止,调试完成。①:将S7-1200与S120进行通讯连线。④:STATER软件下设置与组态一致的报文。①:点击添加新设备,按实物进行设备组态。②:打开OB1,编写启动停止程序。①:查看S120报文地址。②:模块下添加DO矢量。③:子模块下添加报文。

weixin_38261173的博客 4868

给osg::Geometry(自己绘制的几何体)添加纹理(二)

osg给osg::Geometry(自己绘制的)添加纹理

danshiming的博客 3107

BEVFusion实战:从零搭建LiDAR-Camera融合的3D目标检测环境(附避坑指南)

本文提供了BEVFusion实战指南,详细讲解如何从零搭建LiDAR-Camera融合的3D目标检测环境。内容涵盖环境配置、数据预处理、模型训练与性能优化等关键步骤,并附有实用的避坑技巧,帮助开发者高效部署这一先进的BEV感知算法。

p4q5r6s7t的博客 514

pytorch中的wheel文件

whl 文件是 Python 的一个软件包分发格式,用于在 Python 中安装软件包。它是 Python Wheel 的缩写,也被称为 wheel 文件。这种文件格式旨在简化 Python 软件包的安装和分发。对于 PyTorch 而言,它提供了预编译的 .whl 文件,您可以通过 pip 安装这些文件来快速方便地安装 PyTorch。这些 .whl 文件是已经编译好的二进制分发文件,可以直接安装在您的 Python 环境中,而无需再进行编译。

bj_zhb的博客 3127

osg20讲(读文件)

osg

qq970767225的博客 546

POWER(十一)charge pump原理

电荷泵是一种基于电容充放电原理的DC-DC转换电路,通过开关控制实现电压转换,包括升压、降压和负压输出。其核心是利用电荷守恒原理,通过电容存储和转移电荷来改变输出电压。典型拓扑结构包括倍压电路和多阶升压电路,具有结构简单、体积小等优势。关键参数包括转换效率、输出电流能力和开关频率,适用于芯片供电、显示屏驱动等低功耗场景。LVDS部分补充说明了自举电路在驱动电路中的应用及其自同步特性。

zhlwsh的博客 2824

osgPotree:基于OSG的插件,支持Potree点云读取

Potree 是一种高效的点云数据可视化框架,广泛应用于三维建模、测绘和虚拟现实等领域。osgPotree 是基于 OpenSceneGraph(OSG)开发的插件,支持直接加载 PotreeConverter 2.0 生成的点云数据,为 OSG 用户提供便捷的点云渲染方案。本文介绍该插件的功能特性及使用方法。目录。

CPWWHSU的博客 1852

Python爬虫selenium验证-中文识别点选+图片验证码案例

环境对模型进行训练,参考:https://github.com/sml2h3/dddd_trainer。能识别,但是发现默认识别率有点低,想要提升识别率,可以搭建。截图每个字符,并基于ddddocr识别。根据坐标,在验证码上进行点击。

dme.的博客 2165

在RStudio中使用GitHub Copilot:代码自动生成,从此告别手敲!

可以通过自定义提示词来引导Copilot生成符合自己需求的代码。再看一个做统计分析的。

Codewar的博客 333
上一篇: visual studio 2017使用OCCI连接oracle数据库
下一篇: OSG屏幕坐标——相机坐标——世界坐标之间的转换
HelloEarth_
博客等级 码龄9年 38粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值