zoukankan      html  css  js  c++  java
  • osg 渲染ifc数据-测试

    直接使用osg渲染ifc数据,提高渲染速度。

    #include "teslamanage.h"
    #include <QtWidgets/QApplication>
    #include <QtGui/QIcon>
    
    #include <osgViewer/Viewer>
    
    osg::ref_ptr<osg::Node> createLand(int widthParam, int heightParam, int zParam);
    void loadIFCFile(osg::ref_ptr<osgViewer::Viewer> &viewer1,std::wstring &fileNmae);
    
    int main(int argc, char *argv[])
    {
        
        std::wstring fileName = L"D://ck1.ifc";
        osg::ref_ptr<osgViewer::Viewer> viewer1 = new osgViewer::Viewer;
    
        loadIFCFile(viewer1, fileName);
        viewer1->setUpViewInWindow(200, 200, 800, 600, 0);
        return viewer1->run();
    }
    
    
    osg::ref_ptr<osg::Node> createLand(int widthParam, int heightParam, int zParam)
    {
        osg::ref_ptr<osg::Geode> geode = new osg::Geode;
        osg::ref_ptr<osg::Geometry> geo = new osg::Geometry;
    
        //申请一些顶点
        osg::ref_ptr<osg::Vec3Array> vers = new osg::Vec3Array;
        geo->setVertexArray(vers.get());
        //#if 1
        //    geo->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINE_LOOP, 0, 4));//创建一个线圈
        //#else
        geo->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS, 0, 4));//创建一个正方形
        //#endif
    
    
        //设置顶点
        //vers->push_back(osg::Vec3(-15, 3.0, -15));
        //vers->push_back(osg::Vec3(15, 3.0, -15));
        //vers->push_back(osg::Vec3(15, 3.0, 15));
        //vers->push_back(osg::Vec3(-15, 3.0, 15));
    
        vers->push_back(osg::Vec3(widthParam*(-1.0), heightParam*(-1.0), zParam*(1.0)));
        vers->push_back(osg::Vec3(widthParam*(1.0), heightParam*(-1.0), zParam*(1.0)));
        vers->push_back(osg::Vec3(widthParam*(1.0), heightParam*(1.0), zParam*(1.0)));
        vers->push_back(osg::Vec3(widthParam*(-1.0), heightParam*(1.0), zParam*(1.0)));
    
        //申请颜色
        osg::ref_ptr<osg::Vec4Array> color = new osg::Vec4Array();
        color->push_back(osg::Vec4(1.0, 0.0, 0.0, 0.5));
        color->push_back(osg::Vec4(0.0, 1.0, 0.0, 0.5));
        color->push_back(osg::Vec4(0.0, 0.0, 1.0, 0.5));
        color->push_back(osg::Vec4(1.0, 1.0, 0.0, 0.5));
    
        //设置颜色
        geo->setColorArray(color.get());
        geo->setColorBinding(osg::Geometry::AttributeBinding::BIND_PER_VERTEX);//设置颜色绑定
    
                                                                               //设置法线,正对屏幕的时候最亮
        osg::ref_ptr<osg::Vec3Array> norm = new osg::Vec3Array;
        geo->setNormalArray(norm);
        geo->setNormalBinding(osg::Geometry::AttributeBinding::BIND_OVERALL);
        norm->push_back(osg::Vec3(0.0, -1.0, 0.0));
    
        //打开透明度
        geo->getOrCreateStateSet()->setMode(GL_BLEND, osg::StateAttribute::ON);
    
        //设置线宽
        osg::ref_ptr<osg::LineWidth> w = new osg::LineWidth;
        w->setWidth(5.0);
        geo->getOrCreateStateSet()->setAttributeAndModes(w.get(), osg::StateAttribute::ON);
    
        geode->addDrawable(geo.get());
    
        return geode;
    }

  • 相关阅读:
    JS实现类似CAD的获取点
    ObjectARX填充
    backbone
    (转)Log4net使用详解
    Log4Net介绍
    (转)Log4net使用详解2
    ASP.NET:利用RegexStringValidator验证字符串格式
    ashx文件的使用
    编译执行和解释执行的区别
    利用 Application_Error 捕获所有异常 .
  • 原文地址:https://www.cnblogs.com/herd/p/11779627.html
Copyright © 2011-2022 走看看