OSG 之学习一:OSG 基础

说明


  • OSG 入门看的,大佬绕道
  • 示例来源于《OSG程序设计教程》
  • 没有此电子书的小伙伴们,我已上传至CSDN

1. 最简单的显示


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

void main() {

    // 创建窗口
    osgViewer::Viewer viewer;

    // 加载数据
    viewer.setSceneData(osgDB::readNodeFile("cow.osg")); // glider.osg 是牛

    // 渲染前的最后一步,会检查和设置图形上下文
    viewer.realize();

    // 进行渲染
    viewer.run();
}

在这里插入图片描述

2. 添加人机交互状态


#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers> // 新加的头文件
#include <osgGA/StateSetManipulator> // 新加的头文件

void main() {

    // 创建窗口
    osgViewer::Viewer viewer;

    // 加载数据
    viewer.setSceneData(osgDB::readNodeFile("cow.osg")); // glider.osg 是牛

    // 添加状态事件
    viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));

    // 窗口大小变化事件
    viewer.addEventHandler(new osgViewer::WindowSizeHandler);

    // 添加一些常用状态设置
    viewer.addEventHandler(new osgViewer::StatsHandler);

    // 设置完以上后,可以实现以下功能
    // 点击 S 时会显示帧速
    // 点击 W 时会显示网格
    // 点击 F 时会从大化与最小化之间来回的变化
    // 点击 L 键时会显灯光

    // 渲染前的最后一步,会检查和设置图形上下文
    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")); // glider.osg 是牛

    //添加状态事件
    viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));

    //窗口大小变化事件
    viewer.addEventHandler(new osgViewer::WindowSizeHandler);

    //添加一些常用状态设置
    viewer.addEventHandler(new osgViewer::StatsHandler);

    // 设置完以上后,可以实现以下功能
    // 点击 S 时会显示帧速
    // 点击 W 时会显示网格
    // 点击 F 时会从大化与最小化之间来回的变化
    // 点击 L 键时会显灯光

    //添加一些操作器
    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);

    // 设置完上述的后
    // 键下 2 或者 3 键可以发现可以换操作器了
    // 先按 Z 再换过来按小写 Z,发现可以记录路径了,
    // 会在 main.cpp 目录下生成一个路径文件,saved_animation.path

    // 渲染前的最后一步,会检查和设置图形上下文
    viewer.realize();

    // 进行渲染
    viewer.run();
}

4. osgViewer


  • 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 线程模式
  • osgViewer 窗口一些基本的操作
按键功能
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 格式转换与压缩


  • 这个时候需要看教材

在这里插入图片描述

  • 有好多重要的函数接口,自己去看吧,一定要仔细看看,写的很详细

7. 一些类参考,自行看之


  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值