zoukankan      html  css  js  c++  java
  • MFC加载大型osg模型

    MFC加载模型,发现打开 Navid 缓冲等选项后,加载大型模型的速度就快了很多。

    #include "stdafx.h"
    #include "OSGObject.h"
    
    
    COSGObject::COSGObject(HWND hWnd)
    {
        m_hwnd = hWnd;
    }
    
    
    COSGObject::~COSGObject()
    {
    
    }
    
    void COSGObject::InitOSG()
    {
        InitSceneGraph();
        InitCameraConfig();
    }
    
    void COSGObject::InitSceneGraph()
    {
        mRoot = new osg::Group;
        //mRoot->addChild(osgDB::readNodeFile("D://library.OSGB"));
        //mRoot->addChild(osgDB::readNodeFile("I:\BIM\osg\pzy20190722.OSGB"));
        //mRoot->addChild(osgDB::readNodeFile("D:\参考手册\BIM\ive\build20190628.ive"));
        mRoot->addChild(osgDB::readNodeFile("I:\BIM\osg\wanluowang20190903.OSGB"));
    
    }
    
    void COSGObject::InitCameraConfig()
    {
        RECT rect1;
        mViewer = new osgViewer::Viewer;
        ::GetWindowRect(m_hwnd, &rect1);
        osg::ref_ptr<osg::GraphicsContext::Traits> traits1 = new osg::GraphicsContext::Traits;
        osg::ref_ptr<osg::Referenced> windata = new osgViewer::GraphicsWindowWin32::WindowData(m_hwnd);
    
        traits1->x = 0;
        traits1->y = 0;
        traits1->width = rect1.right - rect1.left;
        traits1->height = rect1.bottom - rect1.top;
    
        traits1->windowDecoration = false;
        traits1->doubleBuffer = true;
        traits1->sharedContext = 0;
        traits1->setInheritedWindowPixelFormat = true;
    
        traits1->inheritedWindowData = windata;
        osg::GraphicsContext* gc1 = osg::GraphicsContext::createGraphicsContext(traits1);
        osg::ref_ptr<osg::Camera> camera1 = new osg::Camera;
        camera1->setGraphicsContext(gc1);
    
        camera1->setViewport(new osg::Viewport(traits1->x, traits1->y,traits1->width,traits1->height));
        camera1->setProjectionMatrixAsPerspective(30.3f, static_cast<double>(traits1->width) / static_cast<double>(traits1->height), 1.0, 1000.0);
    
        mViewer->setCamera(camera1);
        mViewer->setCameraManipulator(new osgGA::TrackballManipulator);
        mViewer->setSceneData(mRoot);
        mViewer->realize();
    
        mViewer->getCamera()->setComputeNearFarMode(osg::CullSettings::COMPUTE_NEAR_USING_PRIMITIVES);
        mViewer->getCamera()->setNearFarRatio(0.000003f);
    
    }
    
    void COSGObject::PreFrameUpdate()
    {
    
    }
    
    void COSGObject::PostFrameUpdate()
    {
    
    }
    
    void COSGObject::Render(void* ptr)
    {
        COSGObject* osgObj = (COSGObject*)ptr;
        osgViewer::Viewer* viewer1 = osgObj->getOsgViewer();
        while (!viewer1->done())
        {
            osgObj->PreFrameUpdate();
            viewer1->frame();
            osgObj->PostFrameUpdate();
        }
    
        _endthread();
    }
    
    osgViewer::Viewer* COSGObject::getOsgViewer()
    {
        return mViewer;
    }

  • 相关阅读:
    oschina 终端/远程登录
    oschina文档/文本编辑
    oschinaIM/聊天/语音工具
    oschina浏览器开发
    oschina P2P/BT开源软件
    oschina图形和图像工具开源软件
    java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
    java之jvm学习笔记三(Class文件检验器)
    手把手教popupWindow从下往上,以达到流行效果
    java实现代理domino web邮件下载
  • 原文地址:https://www.cnblogs.com/herd/p/11455561.html
Copyright © 2011-2022 走看看