说明
- OSG 入门看的,大佬绕道
- 示例来源于《OSG程序设计教程》
- 没有此电子书的小伙伴们,我已上传至CSDN
1. 最简单的显示
#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
void main() {
osgViewer::Viewer viewer;
viewer.setSceneData(osgDB::readNodeFile("cow.osg"));
viewer.realize();
viewer.run();
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7625f888ae7aa25296c886e5377d20d5.png)
2. 添加人机交互状态
#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>
#include <osgGA/StateSetManipulator>
void main() {
osgViewer::Viewer viewer;
viewer.setSceneData(osgDB::readNodeFile("cow.osg"));
viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));
viewer.addEventHandler(new osgViewer::WindowSizeHandler);
viewer.addEventHandler(new osgViewer::StatsHandler);
viewer.realize();
viewer.run();
}
3. 设置操作器
#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>
#include <osgGA/StateSetManipulator>
#include <osgGA/TrackballManipulator>
#include <osgGA/FlightManipulator>
#include <osgGA/DriveManipulator>
#include <osgGA/KeySwitchMatrixManipulator>
#include <osgGA/StateSetManipulator>
#include <osgGA/AnimationPathManipulator>
#include <osgGA/TerrainManipulator>
void main() {
osgViewer::Viewer viewer;
viewer.setSceneData(osgDB::readNodeFile("cow.osg"));
viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));
viewer.addEventHandler(new osgViewer::WindowSizeHandler);
viewer.addEventHandler(new osgViewer::StatsHandler);
osg::ref_ptr<osgGA::KeySwitchMatrixManipulator> keyswitchManipulator = new osgGA::KeySwitchMatrixManipulator;
keyswitchManipulator->addMatrixManipulator('1', "Trackball", new osgGA::TrackballManipulator());
keyswitchManipulator->addMatrixManipulator('2', "Flight", new osgGA::FlightManipulator());
keyswitchManipulator->addMatrixManipulator('3', "Drive", new osgGA::DriveManipulator());
keyswitchManipulator->addMatrixManipulator('4', "Terrain", new osgGA::TerrainManipulator());
viewer.setCameraManipulator(keyswitchManipulator.get());
viewer.addEventHandler(new osgViewer::RecordCameraPathHandler);
viewer.realize();
viewer.run();
}
4. osgViewer
命令 | 功能 |
---|
-image | 读取纹理文件,比如:osgViewer --image Images/skymap.jpg |
-dem | 以高程图的形式渲染一个镜像/DEM 比如 osgViewer --dem a.img |
-h 或–help | 命令行参数功能帮助 |
-help-env | 所有可用的环境变量帮助 |
-help-keys | 所有可用键帮助 |
-help-all | 展示所有帮助信息 |
-SingleThreaded | 为 viewer 选择单线程模式 |
-CullDrawThreadPerContext | 为 viewer 选择 CullDrawThreadPerContext 线程模式 |
-DrawThreadPerContext | 为 viewer 选择 DrawThreadPerContext 线程模式 |
-CullThreadPerCameraDrawThreadPerContext | 为 viewer 选择 —CullThreadPerCameraDrawThreadPerContext 线程模式 |
按键 | 功能 |
---|
1 | 选择 TrackBall 操作器 |
2 | 选择 Flight 操作器 |
3 | 选择 Driver 操作器 |
4 | 选择 Terrain 操作器 |
< | 在窗口模式下减少分辨率 |
> | 在窗口模式下增大分辨率 |
Driver:Down | 在 Driver 操作器下,光标向下移代表向下看 |
Driver:Space | 空格代表重置视口,回到原点 |
Driver:Up | 在 Driver 操作器下,光标向上移代表向上看 |
Driver:a | 用鼠标中键和右键加速 |
Driver:q | 用鼠标右键控制速度 |
S | 输出状态到控制台 |
Z | 切换播放与否视口录像 |
b | 切换背面锡除与否 |
e | 切换是否限制帧速与否,一般 60 帧就够了,最少 30 也差不多 |
f | 在全屏与不全屏之间切换 |
h | 输出帮助信息 |
l(小写的 L) | 在打开与关闭灯光之间切换 |
m | 切换线程模式 |
s | 在显示帧速,显示场景时间信息与什么都不显示之间来回切换 |
t | 在有无纹理之间切换 |
w | 在实体模式,多边形模式,点集模式之间来回切换 |
z | 在记录路径与否之间切换 |
5. osgVersion
6. osgArchive 数据归档器
- 为众多 OSG 文件以及 IVE 文件打包提供了一个工具
- 它所生成的 OSGA 文件是整个文件,可以为海量数据的存放提供良好的支持
- 你可以先把数据的结点组织好,然后压在一起,最后读一下就可以了
- osgArchive 是一个压缩工具,它就像是 ZIP 一样,是个可以压缩与解压的工具
- 剩下的遇到再补充
7. osgConv 格式转换与压缩
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b126c4f6be6fb29e28ce3cfa73139f97.png)
- 有好多重要的函数接口,自己去看吧,一定要仔细看看,写的很详细
7. 一些类参考,自行看之