基本步骤如下描述:

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. SQL中利用脚本恢复数据库

    SQL中利用脚本恢复数据库   编写人:CC阿爸 2014-6-15 在日常SQL数据库的操作中,如何恢复数据库 use master drop database SCS1 RESTORE DATAB ...

  2. JAVA-Unit05: 视图、序列、索引 、 约束

    Unit05: 视图.序列.索引 . 约束 视图 数据库对象之一 视图在SQL语句中体现的角色与表相同, 但它并非一张真实存在的表,它对应的 是一个查询语句的结果集. 创建一个查看10号部门员工信息的 ...

  3. 解决win下无法ping通VM虚拟机CentOS系统的方法

    事情描述:公司迁新址,电脑带过去之后,用xshell连接vm的centos系统老是连接失败,然后考虑到公司迁新址这个情况,我首先怀疑是ip的问题,然后在vm中执行ifconfig找到centos的ip ...

  4. dom4j使用的小例子

    product.xml: <?xml version="1.0" encoding="UTF-8"?> <root> <produ ...

  5. mac 第一次安装mysql 5.7.12 不知道root 密码的解决办法

    搞了2个晚上,这个必须记录一下 1.    先从系统偏好设置里 把 mysql 停掉 2.    打开mac 命令行工具,sudo su 以管理员身份运行命令 3.    cd /usr/local/ ...

  6. Linux命令-chmod、chown和chgrp

    Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限分为只读,只写和可执行三种.以文件为例,只读权限表示只允许读其内容,而禁 ...

  7. 2017百度之星初赛A-1006(HDU-6113)

    思路:在图的外面包一圈'0'字符,然后dfs统计'0'字符的个数和'1'字符的个数.结果如下(num0表示0字符的个数,num1表示1字符的个数): num0 == 1 && num1 ...

  8. canvas绘制圆弧

    canvas绘制圆弧 方法 anticlockwise为true表示逆时针,默认为顺时针 角度都传的是弧度(弧度 = (Math.PI/180)*角度) arc(x, y, radius, start ...

  9. Spring中application*的使用

    ApplicationAware 加载Spring配置文件时,如果Spring配置文件中所定义的Bean类实现了ApplicationContextAware 接口,那么在加载Spring配置文件时, ...

  10. Flask之视图(一)

    2.关于Flask 知识点 从Hello World开始 给路由传递参数 返回状态码 重定向 正则URL 设置cookie和获取cookie 扩展 上下文 请求钩子 Flask装饰器路由的实现 Fla ...