第一次运行OSG入门程序失败记和搞定的情况
一 OSG簡介
OpenSceneGraph(簡稱OSG)使用OpenGL技術(shù)開發(fā),是一套基于C++平臺的應(yīng)用程序接口(API),它讓程序員能夠更加快速、便捷地創(chuàng)建高性能、跨平臺的交互式圖形程序。它作為中間件(middleware)為應(yīng)用軟件提供了各種高級渲染特性,IO,以及空間結(jié)構(gòu)組織函數(shù);而更低層次的OpenGL 硬件抽象層(HAL)實現(xiàn)了底層硬件顯示的驅(qū)動。
優(yōu)勢
OpenGL技術(shù)為圖形元素(多邊形、線、點……)和狀態(tài)(光照、材質(zhì)、陰影……)的編程提供了標(biāo)準(zhǔn)化的接口。而OSG開發(fā)的主要意義在于,將3D場景定義為空間中一系列連續(xù)的對象,以進(jìn)行三維世界的管理。正是由于場景及其參數(shù)定義的特點,通過狀態(tài)轉(zhuǎn)化、繪圖管道和自定制等操作,OSG還可以用于優(yōu)化渲染性能。
從系統(tǒng)開發(fā)人員的角度看,相比工業(yè)標(biāo)準(zhǔn)OpenGL 或其它的圖形庫,OSG的優(yōu)點顯而易見。除了開源和平臺無關(guān)性以外,它封裝并提供了數(shù)量眾多的提升程序運行時性能的算法、針對包括分頁數(shù)據(jù)庫在內(nèi)的幾乎所有主流數(shù)據(jù)格式的直接數(shù)據(jù)接口、以及對腳本語言系統(tǒng)Python 和Tcl 的支持,特別的,支持腳本語言系統(tǒng)的意義不僅限于用戶可以使用除C++語言以外的工具進(jìn)行圖形系統(tǒng)的開發(fā),事實上,對弱類型計算機語言的支持將突破現(xiàn)有交互式圖形系統(tǒng)在人-機交互性能方面的最終限制。 OSG采用以下思想和工具進(jìn)行構(gòu)建: · ANSI標(biāo)準(zhǔn)C++; · C++標(biāo)準(zhǔn)模板庫(STL); · 設(shè)計模式(Design patterns)。 這些工具使得OSG的開發(fā)者可以在自己喜好的平臺上進(jìn)行開發(fā),并且依據(jù)用戶所要求的平臺進(jìn)行配置。
OSG支持骨骼動畫、關(guān)鍵幀動畫等各種流行的動畫,它可以把3DMAX建立的動畫模型轉(zhuǎn)化成OSG格式導(dǎo)入到項目中進(jìn)行控制,osgAnimation庫中有大量的動畫實用類。在OSG相關(guān)擴展中,最引人注目的是osgEarth、VPB與osgOcean,它們可以幫助開發(fā)人員完成一個功能強大且完善的三維地形展示系統(tǒng),osgEarth功能類似于GoogleEarth,且地形的實時生成效率可媲美GoogleEarth。osgOcean是OSG的擴展海洋模塊,特點是可以逼真地仿真大面積水域,也可以在此基礎(chǔ)上做二次開發(fā)。
?
二 運行OSG入門程序失敗
參閱此文;
http://www.cnblogs.com/greatverve/archive/2012/09/19/osg-hello-world.html
?
首先下載OSG;
http://pan.baidu.com/s/1eSE1sd0
?
解壓以后,把OSG的bin目錄添加到環(huán)境變量;
新建如下的環(huán)境變量,值為OSG的data目錄;
?
按網(wǎng)上資料,下面可以用如下圖命令查看到奶牛圖像;但是我安裝的OSG沒看到;
?
后來在OSG目錄中詳細(xì)看了下,沒有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() {//創(chuàng)建Viewer對象,場景瀏覽器osgViewer::Viewer* viewer = new osgViewer::Viewer();//創(chuàng)建場景組節(jié)點osg::Group* root = new osg::Group();//創(chuàng)建一個節(jié)點osg::Node* node = new osg::Node();//讀取一個滑翔機的模型node = osgDB::readNodeFile("tree.osg");//添加到場景root->addChild(node);//優(yōu)化場景數(shù)據(jù)osgUtil::Optimizer optimizer ;optimizer.optimize(root) ;//設(shè)置場景數(shù)據(jù)viewer->setSceneData(root);//初始化并創(chuàng)建窗口viewer->realize();//開始渲染viewer->run();return 0 ; }?
?
?
?
?
運行;出現(xiàn)下圖錯誤;我并沒有設(shè)置斷點,為何觸發(fā)了一個斷點呢;
?
單擊上圖的 打開異常設(shè)置;出現(xiàn)下圖對話框;原來發(fā)生一些異常自己會中斷;
?
再運行;出現(xiàn)下圖錯誤;
再運行,出現(xiàn)下圖錯誤;
為什么原作者的行,我的不行呢;下次再搞;
?
三 搞定
? ? 原來這是環(huán)境的問題;因為我的電腦裝了VS2010系列和VS2012系列;裝好后VC2012一直能用,VC2010用不了;總報下面錯誤:
無法打開包括文件SDKDDKVer.h
? ? 所以一直用的VC2012;
? ? 解決此問題,使VC2010能用;再照上面建立VC2010的工程,運行,好了,結(jié)果如下;另外代碼要把OSG文件路徑換成自己的OSG文件路徑;
出來一個動畫的3D機器人;
?
關(guān)于下面兩個錯誤,
無法打開包括文件SDKDDKVer.h
轉(zhuǎn)換到?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”復(fù)制到文件對話框路徑窗口,回車打開,也可以復(fù)制到在“開始”搜索中,回車打開)
1. 如果VS2010中出現(xiàn)該問題,在<IncludePath>字段中添加$(WindowsSdkDir)include,在<LibraryPath>字段中添加$(WindowsSdkDir)lib
2.如果VS2012中遇到該問題,在<IncludePath>字段中添加$(WindowsSDK_IncludePath),在<LibraryPath>字段中添加$(WindowsSDK_LibraryPath_x86)
轉(zhuǎn)換到?COFF 期間失敗: 文件無效或損壞”問題解決
VS安裝目錄下搜索cvtres.exe,如果安裝多個VS會搜索到不止一個cvtres.exe,如果VS2010中出現(xiàn)該問題,可以把VS2012中的cvtres.exe替換VS2010目錄下的cvtres.exe,VS2012出現(xiàn)問題用VS2010中的cvtres.exe替換。
?
一個小技巧,替換重要的系統(tǒng)文件之前先備份該系統(tǒng)文件,壓縮為rar即可,不行再替換回來;如下圖;
?
附上我的
C:\Users\Administrator\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props
文件供參考;我的還帶有opencv的設(shè)置,不用管它;
?
<?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;libpngd.lib;libtiffd.lib;libwebpd.lib;opencv_calib3d300d.lib;opencv_core300d.lib;opencv_features2d300d.lib;opencv_flann300d.lib;opencv_hal300d.lib;opencv_highgui300d.lib;opencv_imgcodecs300d.lib;opencv_imgproc300d.lib;opencv_ml300d.lib;opencv_objdetect300d.lib;opencv_photo300d.lib;opencv_shape300d.lib;opencv_stitching300d.lib;opencv_superres300d.lib;opencv_ts300d.lib;opencv_video300d.lib;opencv_videoio300d.lib;opencv_videostab300d.lib;zlibd.lib;%(AdditionalDependencies)</AdditionalDependencies></Link></ItemDefinitionGroup><ItemGroup /> </Project>
另外此文說的OSG環(huán)境變量不夠的話可參閱
?
http://blog.csdn.net/bcbobo21cn/article/details/52549894
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的第一次运行OSG入门程序失败记和搞定的情况的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spark知识体系完整解读
- 下一篇: 图解windbg查看Win7结构体