基本步骤如下描述:

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. Linux的POSIX线程属性

    创建POSIX线程的函数为 int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routin ...

  2. Ninject Lazy Load

    namespace LayzyLoadTest { [TestClass] public class UnitTest1 { private IKernel InitKernel() { Ninjec ...

  3. (转)Inno Setup入门(十九)——Inno Setup类参考(5)

    本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17251019 单选按钮 单选按钮在安装中也很常见,例如同一个程序可以 ...

  4. 【kubernetes】kubectl logs connection refused

    因为启动dashboard报CrashLoopBackOff错误,尝试使用logs去查看日志,结果报错,错误如下: [root@localhost ~]# kubectl -s http://192. ...

  5. Spring Framework中常见的事务传播陷阱(译文)

    最近看到Medium上一篇讨论Spring Framework中事务传播的文章,解释了几种常见的问题,解释的不错,这里直接翻译吧(意译为主,粗体和斜体是我自己加上的). 译文: 这是我的第一篇文章,我 ...

  6. Tomcat 8.5 架构分析

    官方文档:Apache Tomcat 8 Architecture 以下分析的是 Version 8.5. Tomcat 组件关系图 根据 Architecture Overview 绘制: Serv ...

  7. [Java]基础.端口

    Map<String,String[]> map = request.getParameterMap(); BeanUtils.populate(user,map);  // 遍历 use ...

  8. JAVA构造函数在超类与子类定义鲁波总结

    1.子类无构造函数,超类无构造函数,创建的无参数的对象: 编译通过. class A { } class B extends A { } public class Testeeer { public ...

  9. 在线pubmed

    ESearch(文本搜索) eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi http://eutils.ncbi.nlm.nih.gov/entr ...

  10. openstack网络架构(nova-network/neutron)

    openstack网络体系中,网络技术没有创新,但用到的技术点非常庞杂,包括bridge.vlan.gre.vxlan.ovs.openflow.sdn.iptables等,当然这里不会做具体技术介绍 ...