您的位置:首页 > 运维架构

第一次运行OSG入门程序失败记和搞定的情况

2016-08-26 21:46 246 查看

一 OSG简介

OpenSceneGraph(简称OSG)使用OpenGL技术开发,是一套基于C++平台的应用程序接口(API),它让程序员能够更加快速、便捷地创建高性能、跨平台的交互式图形程序。它作为中间件(middleware)为应用软件提供了各种高级渲染特性,IO,以及空间结构组织函数;而更低层次的OpenGL 硬件抽象层(HAL)实现了底层硬件显示的驱动。

优势

OpenGL技术为图形元素(多边形、线、点……)和状态(光照、材质、阴影……)的编程提供了标准化的接口。而OSG开发的主要意义在于,将3D场景定义为空间中一系列连续的对象,以进行三维世界的管理。正是由于场景及其参数定义的特点,通过状态转化、绘图管道和自定制等操作,OSG还可以用于优化渲染性能。

从系统开发人员的角度看,相比工业标准OpenGL 或其它的图形库,OSG的优点显而易见。除了开源和平台无关性以外,它封装并提供了数量众多的提升程序运行时性能的算法、针对包括分页数据库在内的几乎所有主流数据格式的直接数据接口、以及对脚本语言系统Python 和Tcl 的支持,特别的,支持脚本语言系统的意义不仅限于用户可以使用除C++语言以外的工具进行图形系统的开发,事实上,对弱类型计算机语言的支持将突破现有交互式图形系统在人-机交互性能方面的最终限制。 OSG采用以下思想和工具进行构建: · ANSI标准C++; ·
C++标准模板库(STL); · 设计模式(Design patterns)。 这些工具使得OSG的开发者可以在自己喜好的平台上进行开发,并且依据用户所要求的平台进行配置。
OSG支持骨骼动画、关键帧动画等各种流行的动画,它可以把3DMAX建立的动画模型转化成OSG格式导入到项目中进行控制,osgAnimation库中有大量的动画实用类。在OSG相关扩展中,最引人注目的是osgEarth、VPB与osgOcean,它们可以帮助开发人员完成一个功能强大且完善的三维地形展示系统,osgEarth功能类似于GoogleEarth,且地形的实时生成效率可媲美GoogleEarth。osgOcean是OSG的扩展海洋模块,特点是可以逼真地仿真大面积水域,也可以在此基础上做二次开发。

二 运行OSG入门程序失败

参阅此文;
http://www.cnblogs.com/greatverve/archive/2012/09/19/osg-hello-world.html
首先下载OSG;
http://pan.baidu.com/s/1eSE1sd0
解压以后,把OSG的bin目录添加到环境变量;



新建如下的环境变量,值为OSG的data目录;



按网上资料,下面可以用如下图命令查看到奶牛图像;但是我安装的OSG没看到;



后来在OSG目录中详细看了下,没有cow.osg文件;自带有3个.osg文件,显示如下图;







下面是显示的命令;



在VC++ 2012中,新建一个空项目;





在项目属性的 VC++目录,添加OSG的包含目录和库目录;



链接器-输入-附加依赖项,添加附加依赖项;

OpenThreadsd.lib

osgd.lib

osgDBd.lib

osgFXd.lib

osgGAd.lib

osgManipulatord.lib

osgParticled.lib

osgShadowd.lib

osgSimd.lib

osgTerraind.lib

osgTextd.lib

osgUtild.lib

osgViewerd.lib



新建main.cpp;代码如下;

#include <osgViewer/Viewer>

#include <osg/Node>
#include <osg/Geode>
#include <osg/Group>

#include <osgDB/ReadFile>
#include <osgDB/WriteFile>

#include <osgUtil/Optimizer>

int main()
{
//创建Viewer对象,场景浏览器
osgViewer::Viewer* viewer = new osgViewer::Viewer();

//创建场景组节点
osg::Group* root = new osg::Group();

//创建一个节点
osg::Node* node = new osg::Node();

//读取一个滑翔机的模型
node = osgDB::readNodeFile("tree.osg");

//添加到场景
root->addChild(node);

//优化场景数据
osgUtil::Optimizer optimizer ;
optimizer.optimize(root) ;

//设置场景数据
viewer->setSceneData(root);

//初始化并创建窗口
viewer->realize();

//开始渲染
viewer->run();

return 0 ;
}


运行;出现下图错误;我并没有设置断点,为何触发了一个断点呢;



单击上图的 打开异常设置;出现下图对话框;原来发生一些异常自己会中断;



再运行;出现下图错误;



再运行,出现下图错误;



为什么原作者的行,我的不行呢;下次再搞;

三 搞定

    原来这是环境的问题;因为我的电脑装了VS2010系列和VS2012系列;装好后VC2012一直能用,VC2010用不了;总报下面错误:

无法打开包括文件SDKDDKVer.h

    所以一直用的VC2012;

    解决此问题,使VC2010能用;再照上面建立VC2010的工程,运行,好了,结果如下;另外代码要把OSG文件路径换成自己的OSG文件路径;

出来一个动画的3D机器人;



关于下面两个错误,

无法打开包括文件SDKDDKVer.h

转换到 COFF 期间失败: 文件无效或损坏”问题解决

参阅
http://blog.csdn.net/hong__fang/article/details/46695531
大体解决方式如下;

记事本打开:

“C:\Users\Administrator\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props”

(AppData是隐藏文件夹,可以把“C:\Users\Administrator\AppData”复制到文件对话框路径窗口,回车打开,也可以复制到在“开始”搜索中,回车打开)

1. 如果VS2010中出现该问题,在<IncludePath>字段中添加$(WindowsSdkDir)include,在<LibraryPath>字段中添加$(WindowsSdkDir)lib

2.如果VS2012中遇到该问题,在<IncludePath>字段中添加$(WindowsSDK_IncludePath),在<LibraryPath>字段中添加$(WindowsSDK_LibraryPath_x86)

转换到 COFF 期间失败: 文件无效或损坏”问题解决

VS安装目录下搜索cvtres.exe,如果安装多个VS会搜索到不止一个cvtres.exe,如果VS2010中出现该问题,可以把VS2012中的cvtres.exe替换VS2010目录下的cvtres.exe,VS2012出现问题用VS2010中的cvtres.exe替换。

一个小技巧,替换重要的系统文件之前先备份该系统文件,压缩为rar即可,不行再替换回来;如下图;



附上我的

C:\Users\Administrator\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props

文件供参考;我的还带有opencv的设置,不用管它;

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0"

xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<IncludePath>$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);D:

\opencv30\build\include;D:\opencv30\build\include\opencv;D:\opencv30\build\include\opencv2;

$(WindowsSdkDir)include;</IncludePath>
<LibraryPath>$(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSDK_LibraryPath_x86);D:

\opencv30\build\x86\vc11\lib;D:\opencv30\build\x86\vc11\staticlib;$(WindowsSdkDir)lib;</LibraryPath>
</PropertyGroup>
<ItemDefinitionGroup>
<Link>

<AdditionalDependencies>opencv_world300d.lib;IlmImfd.lib;ippicvmt.lib;libjasperd.lib;libjpegd.lib;lib

pngd.lib;libtiffd.lib;libwebpd.lib;opencv_calib3d300d.lib;opencv_core300d.lib;opencv_features2d300d.l

ib;opencv_flann300d.lib;opencv_hal300d.lib;opencv_highgui300d.lib;opencv_imgcodecs300d.lib;opencv_img

proc300d.lib;opencv_ml300d.lib;opencv_objdetect300d.lib;opencv_photo300d.lib;opencv_shape300d.lib;ope

ncv_stitching300d.lib;opencv_superres300d.lib;opencv_ts300d.lib;opencv_video300d.lib;opencv_videoio30

0d.lib;opencv_videostab300d.lib;zlibd.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>


另外此文说的OSG环境变量不够的话可参阅
http://blog.csdn.net/bcbobo21cn/article/details/52549894
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opengl osg 3d
相关文章推荐