博客
关于我
OSG学习:场景图形管理(四)——多视图多窗口渲染
阅读量:794 次
发布时间:2023-02-26

本文共 2530 字,大约阅读时间需要 8 分钟。

以下是关于 OpenSceneGraph (OSG) 三维渲染引擎的配置与开发指南的详细内容:


1. 书籍推荐

  • 《OpenSceneGraph 三维渲染引擎编程指南》由清华大学出版社出版,作者包括肖鹏、刘更代和徐明亮。
  • 《OpenSceneGraph 三维渲染引擎设计与实践》由清华大学出版社出版,作者为王锐和钱学雷。

2. OSG 项目配置指南

创建 C++ 项目后,首先需要配置 OpenSceneGraph (OSG) 环境。具体步骤如下:

  • 新建 OSG 项目测试

    • 使用 C++ 创建新项目。
    • 添加必要的 OSG 头文件,包括:
      • <osg/node.h>
      • <osg/geode.h>
      • <osg/geometry.h>
      • <osg/group.h>
      • <osg/matrixtransform.h>
      • <osg/positionattitudetransform.h>
      • <osg/camera.h>
      • <osgdb/readfile.h>
      • <osgdb/writefile.h>
      • <osgutil/optimizer.h>
      • <osgviewer/viewer.h>
      • <osgviewer/compositeviewer.h>
  • 配置视图窗口

    • 创建两个视图窗口,横坐标位置分别为 50 和 600,避免重叠。
    • 设置图形环境特性:
      • traits->x = (i == 1) ? 50 : 600;
      • traits->y = 200;
      • traits->width = 600;
      • traits->height = 480;
      • traits->windowDecoration = true;
      • traits->doubleBuffer = true;
  • 创建 OSG 视图

    • 使用 MultipleView 类创建两个视图。
    • 读取模型文件 cow.osgcessna.osg,分别作为两个视图的节点。
    • 优化场景数据:
      osgUtil::Optimizer optimizer;
      optimizer.optimize(cow.get());
      optimizer.optimize(cessna.get());
    • 创建 CompositeViewer 对象,将两个视图添加进去并运行。

  • 3. C++ 代码示例

    #include 
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    // 视图窗口配置 osg::ref_ptr
    traits = new osg::GraphicsContext::Traits(); if (i == 1) { traits->x = 50; } else { traits->x = 600; } traits->y = 200; traits->width = 600; traits->height = 480; traits->windowDecoration = true; traits->doubleBuffer = true; traits->sharedContext = 0; // 创建视图 osg::ref_ptr
    viewer = new osgViewer::Viewer(); osg::ref_ptr
    camera = viewer->getCamera(); osg::ref_ptr
    gc = osg::GraphicsContext::createGraphicsContext(traits.get()); camera->setGraphicsContext(gc.get()); camera->setViewport(new osg::Viewport(0, 0, traits->width, traits->height)); camera->setDrawBuffer(GL_BACK); camera->setReadBuffer(GL_BACK); // 设置场景数据 osg::ref_ptr
    cow = osgDB::readNodeFile("cow.osg"); osg::ref_ptr
    cessna = osgDB::readNodeFile("cessna.osg"); // 优化场景数据 osgUtil::Optimizer optimizer; optimizer.optimize(cow.get()); optimizer.optimize(cessna.get()); // 创建两个视图 osg::ref_ptr
    viewer1 = MultipleView(cow, 1); osg::ref_ptr
    viewer2 = MultipleView(cessna, 2); // 创建 CompositeViewer 并添加视图 osg::ref_ptr
    compositeViewer = new osgViewer::CompositeViewer(); compositeViewer->addView(viewer1.get()); compositeViewer->addView(viewer2.get()); compositeViewer->realize(); // 运行视图 return compositeViewer->run();

    4. 技术说明

    • OSG 模型加载:使用 osgDB::readNodeFile 读取 OSG 格式文件。
    • 优化场景:使用 osgutil::Optimizer 对场景数据进行优化,提升渲染性能。
    • 多视图配置:通过 CompositeViewer 实现多视图显示,确保视图同步。

    以上内容为 OpenSceneGraph 项目的完整开发与配置指南,涵盖了从环境配置到视图实现的全过程。

    转载地址:http://wuvfk.baihongyu.com/

    你可能感兴趣的文章
    oracle判断空值的函数nvl2,【PL/SQL】 NVL,NVL2,COALESCE 三种空值判断函数
    查看>>
    Oracle发布VirtualBox 7.1稳定版!支持ARM、优化了UI、支持Wayland等
    查看>>
    oracle启动三步
    查看>>
    oracle启动关闭服务,启动关闭oracle服务.bat
    查看>>
    Oracle命令行创建数据库
    查看>>
    Oracle和SQL server的数据类型比较
    查看>>
    oracle和sybase的一些区别
    查看>>
    oracle在日本遇到的技术问题
    查看>>
    Oracle在线重定义
    查看>>
    oracle基础 管理索引
    查看>>
    Oracle增量跟新
    查看>>
    oracle备份恢复之rman恢复到异机
    查看>>
    oracle复习(一)
    查看>>
    ORACLE多表关联UPDATE 语句
    查看>>
    Oracle多表查询与数据更新
    查看>>
    oracle如何修改单个用户密码永不过期
    查看>>
    oracle字符集
    查看>>
    oracle存储参数(storage子句)含义及设置技巧
    查看>>
    Oracle学习
    查看>>
    ui 图片素材网站
    查看>>