OSG简介与最简单的实例

来源:互联网 发布:汇川plc编程软件价格 编辑:程序博客网 时间:2024/05/22 12:38

OSG简介

OpenSceneGraph(简称OSG)使用OpenGL技术开发,是一套基于C++平台的应用程序接口(API)。OpenGL技术为图形元素(多边形、线、点)和状态(光照、材质、阴影)的编程提供了标准化的接口。而OSG开发的主要意义在于,将3D场景定义为空间中一系列连续的对象,以进行三维世界的管理。正是由于场景及其参数定义的特点,通过状态转化、绘图管道和自定制等操作,OSG还可以用于优化渲染性能。   可以运行OSG的平台需要具备OpenGL的支持能力,以及C++的编译环境,支持OSG的系统包括SolarisIRIXWindowsMac OSXHP-UXSony Platystation等等,不过XBox除外。     

OSG是一个开源系统,主要包括场景图形核心,Producer库,OpenThread库以及用户插件四个部分。自Robert Osfield主持这个项目以来,OSG就作为一个开放源代码的图形开发工程开始在全球运作了。   

目前,部分高性能的软件已经使用了OSG来渲染复杂的2D3D场景。虽然大部分基于OSG的软件更适用于可视化设计和工业仿真,但是在使用3D图形的每个领域,都已经出现了OSG的身影。这其中包括了地理信息系统(GIS),计算机辅助设计(CAD),建模和数字内容创作(DCC),数据库开发,虚拟现实,动画,游戏和娱乐业。

 

简单的实例导入一个模型

 


#include <osgViewer/Viewer>  #include <osgDB/ReadFile>  #include <osg/DrawPixels>  #include <osg/Geode>  #include <osg/MatrixTransform>  #include <osgViewer/ViewerEventHandlers>  #include <osgGA/StateSetManipulator>  int main(){osgViewer::Viewer viewer;  //添加状态事件  viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) );  //窗口大小变化事件  viewer.addEventHandler(new osgViewer::WindowSizeHandler);  //添加一些常用状态设置  viewer.addEventHandler(new osgViewer::StatsHandler);  osg::Group *root = new osg::Group();  osg::ref_ptr < osg::Node> b25 = osgDB::readNodeFile("F://Models//B25//B25.IVE") ;  // 对模型进行变换  osg::ref_ptr < osg::MatrixTransform> scale = new osg::MatrixTransform ;  scale ->setMatrix(osg::Matrix::rotate(osg::DegreesToRadians(45.0), 1, 0, 0)*osg::Matrix::scale(0.5, 0.5, 0.5)*osg::Matrix::translate(4, 0, -2)) ;  scale ->addChild(b25.get()) ;  root->addChild(scale.get());  viewer.setSceneData(root);  viewer.realize();   return viewer.run();  }


原创粉丝点击