osg20讲(读文件)
- 读取文件
由调用关系可知需要继承OsgDB::readerWriter,重写其中的readNode;模型数据无非是点集,解析即可,具体调用关系如下:
OSG在DoRead层区分文件类型,不同类型使用不同的Osgdb_xx.dll,每个dll在进入时需要注册到一个list表中,在读取文件是循环列表,查看能否读取成功,我们需要做的就是自定义编写dll库,此库继承OsgDB::readerWriter,其中重要的为注册REGISTER_OSGPLUGIN(ttt, FSReaderWriter)与ReadNode;`
#include <sstream>
#include "OsgCommon.h"
#include <osg/Image>
#include <osg/Group>
#include <osg/Notify>
#include <osg/Version>
#include <Windows.h>
#include <osgDB/FileNameUtils>
#include <osgDB/FileUtils>
#include <osgDB/fstream>
#include <osgDB/Registry>
#include <osgDB/Input>
#include <osgDB/Output>
#include <osg/Shape>
#include <osg/Geode>
#include <osg/ShapeDrawable>
#include <osg/ref_ptr>
#include <iostream>
using namespace osg;
using namespace osgDB;class FSReaderWriter : public ReaderWriter
{public:FSReaderWriter(){supportsExtension("ttt", "freex");}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* options) const{fin.imbue(std::locale::classic());Input fr;fr.attach(&fin);osg::ref_ptr<osg::Geode> geode= new osg::Geode();osg::Vec3 center;float radius;while (!fr.eof()){if (fr.matchSequence("%f%f%f%f")){fr.readSequence(center);fr.readSequence(radius);geode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(center, radius)));}else{++fr;}}return geode;}
};// now register with Registry to instantiate the above
// reader/writer.
REGISTER_OSGPLUGIN(ttt, FSReaderWriter)
osg20讲(读文件)相关推荐
- 从fread和mmap 谈读文件的性能
[原文] 1. https://www.byvoid.com/blog/fast-readfile/ 2. http://blog.csdn.net/jwh_bupt/article/details/ ...
- (87)FPGA读文件激励(readmemb)
(87)FPGA读文件激励(readmemb) 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA读文件激励(readmemb) 5)结语 1.2 FPGA简介 F ...
- (86)FPGA读文件激励(readmemh)
(86)FPGA读文件激励(readmemh) 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA读文件激励(readmemh) 5)结语 1.2 FPGA简介 F ...
- python2读文件,python之文件的读写(2)
小R昨天因为在研究weblogic的漏洞就没来得及学习python(好吧,这都是借口,懒了,大家可不能像我这样.要坚持每天都学). 这个进度是有点慢呀.哎呀,没事没事,我还年轻,才20岁. 哈哈 ...
- spring batch 通过配置文件的方法读文件
spring batch提供了多种方式读数据,比如读文件,读数据库,读xml等,提供了丰富了实现类操作,也可以根据自己的需求实现接口ItemReader去自定义. 工作中我们常用的是读文件(.csv. ...
- 为什么读文件操作一次读取字节数组最大是8192
为什么读文件操作一次读取字节数组最大值是8192 ? 最近做项目遇到将服务器上的文件下载到本地操作.其中用到了一个方法Files.copy 调试过程中查看源码发现一个很有意思的事 // buffer ...
- Python零基础速成班-第8讲-Python文件操作File IO、高级文件处理模块shutil、CSV、JSON、多线程基础
Python零基础速成班-第8讲-Python文件操作File I&O.高级文件处理模块shutil.CSV.JSON.多线程基础 学习目标 文件操作File I/O 高级文件处理模块shut ...
- Java多种方式读文件,追加文件内容,等对文件的各种操作
一.多种方式读文件内容.1.按字节读取文件内容 2.按字符读取文件内容 3.按行读取文件内容 4.随机读取文件内容 import java.io.BufferedReader;import java. ...
- 读一个文件的java程序_java 读文件的几种方法(一)
先前使用一直很混乱的使用过这些方法,但都没有好好做过总结. 这两天趁有空,小结一下. 1.输入输出流 说起 java的 读写文件不得不说java中的输入输出流对象, 被读取的对象为输入流(如某个文件, ...
- c++ 读文件 文件指针 继续读_FatFs文件系统使用笔记
关于FatFs文件系统的指引 关于FATFS的使用记录一.提前说明二.各文件说明三.使用说明 3.1 diskio.c函数的编写 3.2 f_open读写性质说明 ...
最新文章
- trinosql_prestosql问题
- (一)深入浅出图解Git,入门到精通(保姆级教程)
- 程序员最害怕的5件事,你中招了吗?
- 《集体智慧编程》数学公式
- pythonif有多个条件怎么办,Python if有多个条件怎么办
- 第6章 循环、批量传送和条件转移-1.34h
- Mysql问题 ERROR 1054 (42S22): Unknown column ‘password‘ in ‘field list‘
- 不会框架不要紧,我带你自定义框架
- 虚拟化试题1-网络和存储
- 机器学习实验一: 简易knn模型
- matlab 内存不足
- SpringMVC 通过Map、Model和ModelMap向页面传值
- iOS 屏幕尺寸、分辨率、适配
- opencv滤镜-素描
- 基因-药物相互作用数据库 DGIdb 介绍
- 后台管理项目开发流程
- 数组排序函数 从小到大排序 C语言
- ActivePerl shellcode
- java框架的利与弊_Java编程的利与弊
- 记录一次C# 使用FFmpeg提取音频文件