第一次运行OSG入门程序失败记和搞定的情况
一 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;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環境變量不夠的話可參閱
?
http://blog.csdn.net/bcbobo21cn/article/details/52549894
?
?
?
?
總結
以上是生活随笔為你收集整理的第一次运行OSG入门程序失败记和搞定的情况的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spark知识体系完整解读
- 下一篇: 图解windbg查看Win7结构体