第一次运行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
相关文章推荐
- Tomcat学习笔记 - 错误日志 - NetBeans配置tomcat出错情况总结 -- 部署错误: 启动 Tomcat 失败。-- '127.0.0.1' 不是内部或外部命令,也不是可运行的程序
- 第一次在cmd中运行java程序,运行helloworld失败
- 安装或运行程序时提示 80等端口被占用情况的解决
- Java语言入门 -- 第二章 Java程序编译与运行环境
- C#检测程序重复运行的函数(可以在多用户登录情况下检测)
- iPhone开发入门(10)— 设备上运行程序
- 为什么.net程序第一次运行慢
- 字符串的小错误导致程序运行失败
- String和StringBuffer占用内存情况,及修改程序运行时的栈内存
- 在第一次运行dcpromo的安装ad的时候,出现操作失败:未能为域创建GPO。出现了扩展错误
- 更正错误,OCI程序在不安装ORACLE客户端的情况下也能运行
- server 2003 安装 VS 2003 遇到的问题 :安装frontpage 2000 web 客户端 和 安装程序运行时文件 失败
- Mondrian初涉入门--运行自带演示程序FoodMart配置步骤
- 阶乘之计算从入门到精通-程序运行时间的测量
- 关于ASP程序运行出现ADODB.Stream 错误 800a0bbc 写入文件失败 的解决办法!
- 用VBS调用程序并对程序的运行情况进行监控的两个代码
- 安装或运行程序时提示 80等端口被占用情况的解决
- VML语言入门 - 如何编写、保存、运行VML程序
- 查看程序运行失败后core文件给出的信息
- .NET入门(三)运行窗口(Console)程序,窗口为何一闪而过,如何不关闭?