基本步骤如下描述:

Step1:CMake3.10编译openscenegraph3.4.0,生成makefile文件(中间过程可能会涉及到很多三方库,需要下载编译,然后按cmake-gui界面的提示正确配置路径即可);

Step2:在生成的makefile文件目录下,新建run.bat文件,双击运行,即可生成动态库dll文件和静态库a文件

填写两行命令:mingw32-make

mingw32-make install

Step3:demo测试,新建Qt控制台工程osgVR。

1)将生成的include文件和lib文件放置到工程根目录下,然后将工程文件osgVR.pro的内容更改如下:

2)将main.cpp的内容修改如下:

#include <osgViewer/Viewer>

            #include <osg/Node>
            #include <osg/Geode>
            #include <osg/Geometry>
            #include <osg/Group>
            #include <osg/Billboard>
            #include <osg/Texture2D>
            #include <osg/Image>
            #include <osg/PositionAttitudeTransform>
            #include <osg/MatrixTransform>

            #include <osgDB/ReadFile>
            #include <osgDB/WriteFile>

            #include <osgUtil/Optimizer>

            int xoffset = 200;
            int yoffset = 200;

           osg::ref_ptr<osg::Node> createBillboardTree(osg::ref_ptr<osg::Image> image)
         {
                  //创建四边形
                 osg::ref_ptr<osg::Geometry> geometry = new osg::Geometry();

                 //设置顶点
                 osg::ref_ptr<osg::Vec3Array> v = new osg::Vec3Array();
                 v->push_back(osg::Vec3(-0.5f, 0.0f, -0.5f));
                 v->push_back(osg::Vec3(0.5f, 0.0f, -0.5f));
                 v->push_back(osg::Vec3(0.5f, 0.0f, 0.5f));
                 v->push_back(osg::Vec3(-0.5f, 0.0f, 0.5f));

                geometry->setVertexArray(v.get());

                  //设置法线
                osg::ref_ptr<osg::Vec3Array> normal = new osg::Vec3Array();
                normal->push_back(osg::Vec3(1.0f, 0.0f, 0.0f) ^ osg::Vec3(0.0f, 0.0f, 1.0f));

                geometry->setNormalArray(normal.get());
                geometry->setNormalBinding(osg::Geometry::BIND_OVERALL);

                 //设置纹理坐标
               osg::ref_ptr<osg::Vec2Array> vt = new osg::Vec2Array();
               vt->push_back(osg::Vec2(0.0f, 0.0f));
               vt->push_back(osg::Vec2(1.0f, 0.0f));
               vt->push_back(osg::Vec2(1.0f, 1.0f));
               vt->push_back(osg::Vec2(0.0f, 1.0f));

               geometry->setTexCoordArray(0, vt.get());

                 //绘制四边形
              geometry->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS, 0, 4));

              if (image.get())
           {
                //状态属性对象
               osg::ref_ptr<osg::StateSet> stateset = new osg::StateSet();

                //创建一个Texture2D属性对象
               osg::ref_ptr<osg::Texture2D> texture = new osg::Texture2D();
                //关联image
              texture->setImage(image.get());
                //关联Texture2D纹理对象,第三个参数默认为ON
              stateset->setTextureAttributeAndModes(0, texture, osg::StateAttribute::ON);
                //启用混合
              stateset->setMode(GL_BLEND, osg::StateAttribute::ON);
                //关闭光照
              stateset->setMode(GL_LIGHTING, osg::StateAttribute::OFF);

               geometry->setStateSet(stateset.get());
           }

               //创建Billboard对象一
             osg::ref_ptr<osg::Billboard> billboard1 = new osg::Billboard();

             //设置旋转模式为绕视点
             billboard1->setMode(osg::Billboard::POINT_ROT_EYE);
             //添加Drawable,并设置其位置,默认位置为osg::Vec3(0.0f,0.0f,0.0f) ;
             billboard1->addDrawable(geometry.get(), osg::Vec3(5.0f, 0.0f, 0.0f));

            osg::ref_ptr<osg::Billboard> billboard2 = new osg::Billboard();
            //设置旋转模式为绕轴转,因此还需要设置转轴
             billboard2->setMode(osg::Billboard::AXIAL_ROT);
            //设置旋转轴
            billboard2->setAxis(osg::Vec3(0.0f, 0.0f, 1.0f));
            billboard2->addDrawable(geometry.get(), osg::Vec3(10.0f, 0.0f, 0.0f));

            osg::ref_ptr<osg::Group> billboard = new osg::Group();
            billboard->addChild(billboard1.get());
            billboard->addChild(billboard2.get());

            return billboard.get();
        }

         int main()
      {
           osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();

           osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
           traits->x = xoffset + 0;
           traits->y = yoffset + 0;
           traits->width = 800;
           traits->height = 600;
           traits->windowDecoration = true;
           traits->doubleBuffer = true;
           traits->sharedContext = 0;
           osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());
           osg::ref_ptr<osg::Camera> camera = new osg::Camera;
           camera->setGraphicsContext(gc.get());
           camera->setViewport(new osg::Viewport(0, 0, traits->width, traits->height));
           GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;
           camera->setDrawBuffer(buffer);
           camera->setReadBuffer(buffer);

           viewer->addSlave(camera.get(), osg::Matrixd::translate(0.0, 0.0, 0.0), osg::Matrixd());

           osg::ref_ptr<osg::Group> root = new osg::Group();

           //读取图像
           osg::ref_ptr<osg::Image> image = osgDB::readImageFile("images/tree0.rgba");

           //缩放一下,以达到合适的大小
           osg::ref_ptr<osg::PositionAttitudeTransform> pat = new osg::PositionAttitudeTransform();
           pat->setScale(osg::Vec3(5.0f, 5.0f, 5.0f));
           pat->addChild(createBillboardTree(image.get()));

           root->addChild(pat.get());

          //读取robot的模型,以对比
          root->addChild(osgDB::readNodeFile("robot.osg"));

         //优化场景数据
         osgUtil::Optimizer optimizer;
         optimizer.optimize(root.get());

         viewer->setSceneData(root.get());

         viewer->realize();

         viewer->run();

         return 0;
     }

运行效果:

                                             
                                             

OpenSceneGraph3.4.0+Qt5.6.1MinGW开发环境部署的更多相关文章

  1. 【J2EE】struts-2.3.16.3+apache-tomcat-8.0.9开发环境部署,“Hello World”的实现。

    1.在官网下载Struts2的开发包 下载链接如下: http://120.203.229.30/5ff/2bc79/5ff16ae8698e1c321758a8f03a1bc0939892bc79/ ...

  2. ArcGIS Runtime for Android开发教程V2.0(2)开发环境配置

    原文地址: ArcGIS Runtime for Android开发教程V2.0(2)开发环境配置 - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http://blog.c ...

  3. vue.js2.0实战(1):搭建开发环境及构建项目

    Vue.js学习系列: vue.js2.0实战(1):搭建开发环境及构建项目 https://my.oschina.net/brillantzhao/blog/1541638 vue.js2.0实战( ...

  4. 一个CentOS7的开发环境部署,包括防火墙|VPN|多IP多网关|HTTP代理服务器设置等

    http://www.lenggirl.com/code/centos7.html layout: post title: "一个CentOS7的开发环境部署,包括防火墙|VPN|HTTP代 ...

  5. linux 下 ifcfg-eth0 配置/CentOS_minimal安装和开发环境部署

    CentOS_minimal安装和开发环境部署:http://www.th7.cn/system/lin/201305/39002.shtml 网络接口配置文件 [root@localhost ~]# ...

  6. eclipse+hbase开发环境部署

    一.前言 1. 前提 因为hbase的运行模式是伪分布式,需要用到hdfs,所以在此之前,我已经完成了hadoop-eclipse的开发环境搭建,详细看另一篇文章:hadoop开发环境部署——通过ec ...

  7. Linux——Django 开发环境部署(二)python版本控制器pyenv

    python版本控制器pyenv 之前的 那篇是说明了django环境的site package完全独立出来了,但是使用的python解释器还是系统的,为了继续独立出来,甚至是达到ruby的rvm的自 ...

  8. Linux——Django 开发环境部署(一)

    Django 开发环境部署(一) 之所以 写这篇文章的原因在于django环境的确轻松搭建,之前Ubuntu上安装了,的确很轻松,但是后期我才知道随便做个环境出来很容易到了后面很麻烦,污 染了系统里的 ...

  9. 开源项目renren-fast-vue开发环境部署(前端部分)

    开源项目renren-fast-vue开发环境部署(前端部分) 说明:renren-fast是一个开源的基于springboot的前后端分离手脚架,当前版本是3.0 开发文档需要付费,官方的开发环境部 ...

随机推荐

  1. SharePoint2013工作流workflow manager配置

    SharePoint2013版本的工作流较sharepoint 2010变化较大,将工作流部分从sharepoint中分离出来为单独的服务,通过与sharepoint关联使用. SharePoint2 ...

  2. 黄聪:使用Add-on SDK开发火狐扩展

    2014年3月7号更新:火狐已经关闭Add-on SDK服务啦!我也转用360急速浏览器来开发浏览器插件了. 如果精通JS.HTML.CSS开发的朋友,直接看这个教程估计就能懂了 ---------- ...

  3. python set集合 以及 深浅拷贝

    set集合 特点: 无序, 不重复, 元素必须可哈希(不可变) 作用: 去重复 本身是可变的数据类型. 有增删改查操作. frozenset()冻结的集合. 不可变的. 可hash的 深浅拷贝() 1 ...

  4. 杂项: Memcached

    ylbtech-杂项: Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动 ...

  5. iis 重新安装后 重新注册asp.net

    服务器IIS问题: 卸载并重新安装了IIS.... 解决方法:原因是IIS重装后要重新安装一下.NET Framework. 开始-->运行-->CMD-->然后在CMD窗口中输入命 ...

  6. Linux命令之hostname - 显示或设置主机名

    我使用过的Linux命令之hostname - 显示或设置主机名 本文链接:http://codingstandards.iteye.com/blog/804648   (转载请注明出处) 用途说明 ...

  7. python学习 (三十三) Modules

    1: 方法一: 导入整个模块 import math class ModulesDemo(): def builtin_modules(self): print(math.sqrt()) m = Mo ...

  8. Java类的初始化与实例对象的初始化

    Java对象初始化详解 2013/04/10 · 开发 · 1 评论· java 分享到:43 与<YII框架>不得不说的故事—扩展篇 sass进阶篇 Spring事务管理 Android ...

  9. 匿名方法,lambad表达式,匿名类

    其实lambad表达式就是“函数”或者说是“方法”写法的一个进化,越来越简化而已,如数学方法里的f(X). 匿名方法:顾名思义,匿名方法就是没有名称的方法,但是有定义参数. 匿名方法最明显的好处就是可 ...

  10. ConcurrentHashMap放入null值报错

    //ConcurrentHashMap源码: /** Implementation for put and putIfAbsent */ final V putVal(K key, V value, ...