freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

osg-osgearth學(xué)習(xí)技術(shù)總結(jié)報(bào)告(已修改)

2025-06-11 18:07 本頁(yè)面
 

【正文】 項(xiàng)目技術(shù)總結(jié)報(bào)告2012年年底技術(shù)總結(jié)報(bào)告 作者:宋力兵第一章 OSG、OSGEarth等軟件概述與環(huán)境編譯 OSG軟件概述開源是一種趨勢(shì),以操作系統(tǒng)為例,linux系統(tǒng)市場(chǎng)份額占7080%。所以研究開源軟件并應(yīng)用于實(shí)際具有很大的研究?jī)r(jià)值。在此針對(duì)開源軟件OpenSceneGraph及其相關(guān)的插件進(jìn)行人工的裁剪、編譯 。OpenSceneGraph(簡(jiǎn)稱OSG)使用OpenGL技術(shù)開發(fā),是一套基于C++平臺(tái)的應(yīng)用程序接口(API),它讓程序員能夠更加快速、便捷地創(chuàng)建高性能、跨平臺(tái)的交互式圖形程序。它作為中間件(middleware)為應(yīng)用軟件提供了各種高級(jí)渲染特性,IO,以及空間結(jié)構(gòu)組織函數(shù);而更低層次的OpenGL 硬件抽象層(HAL)實(shí)現(xiàn)了底層硬件顯示的驅(qū)動(dòng)。從系統(tǒng)開發(fā)人員的角度看,相比工業(yè)標(biāo)準(zhǔn)OpenGL 或其它的圖形庫(kù),OSG的優(yōu)點(diǎn)顯而易見。除了開源和平臺(tái)無(wú)關(guān)性以外,它封裝并提供了數(shù)量眾多的提升程序運(yùn)行時(shí)性能的算法、針對(duì)包括分頁(yè)數(shù)據(jù)庫(kù)在內(nèi)的幾乎所有主流數(shù)據(jù)格式的直接數(shù)據(jù)接口、以及對(duì)腳本語(yǔ)言系統(tǒng)Python 和Tcl 的支持,特別的,支持腳本語(yǔ)言系統(tǒng)的意義不僅限于用戶可以使用除C++語(yǔ)言以外的工具進(jìn)行圖形系統(tǒng)的開發(fā),事實(shí)上,對(duì)弱類型計(jì)算機(jī)語(yǔ)言的支持將突破現(xiàn)有交互式圖形系統(tǒng)在人機(jī)交互性能方面的最終限制。OSG采用以下思想和工具進(jìn)行構(gòu)建:a、ANSI標(biāo)準(zhǔn)C++;b、C++標(biāo)準(zhǔn)模板庫(kù)(STL);c、設(shè)計(jì)模式(Design patterns)。OSG發(fā)展至今以來(lái),以非常驚人的速度在VR行業(yè)占據(jù)非常重要的地位,其開源、易學(xué)、易用的特性使其在短期內(nèi)取得了很大的成功。OpenSceneGraph從字面上看只是一個(gè)場(chǎng)景管理系統(tǒng),從某種意義上講,OSG的對(duì)三維動(dòng)畫等等的支持還不是很強(qiáng),打個(gè)比方來(lái)說(shuō):OSG不適合做游戲引擎。因此工業(yè)控制,城市規(guī)劃,機(jī)械仿真、戰(zhàn)場(chǎng)仿真等方面OSG可以帶來(lái)極大的方便。 OSG編譯OSG是從開源的系統(tǒng)linux移植過(guò)來(lái)的,隨著OSG的不斷發(fā)展和相關(guān)插件的增多,OSG的及插件只提供源碼,沒(méi)有VC工程。所以在編譯OSG的時(shí)候必須利用相關(guān)工具生成VC工程。編譯環(huán)境 一臺(tái)具有顯示卡的計(jì)算機(jī),推薦NVDIA的顯示卡 操作系統(tǒng)為WIN7或者XP 軟件編譯器VS2010OSG編譯相關(guān)工作準(zhǔn)備:1.OSG源碼,最新下載地址。如果想獲得最新的測(cè)試版需要利用軟件TortoiseSVN簽出各種版本源代碼,.2.OSG第三方庫(kù),;最新下載地址:~bchrist3.OSG數(shù)據(jù)包,當(dāng)前最新版:,最新下載地址:,最新版:CMake ,下載地址:OSG編譯步驟1.安裝CMAKE,解壓OSG源碼;利用CMAKE生成OSG的VC編譯工程項(xiàng)目,即生成sln項(xiàng)目文件。在源碼或者其他地方建立一個(gè)文件夾,放置生成的OSG編譯項(xiàng)目。如圖1:第一行為源文件目錄;第二行為生成結(jié)果目錄。注意:所有的項(xiàng)目文件路徑不要出現(xiàn)中文或者其他怪異的符號(hào)。圖1. CMKAE路徑2.點(diǎn)擊Configure,選擇Visual Studio 10(x86),finish后進(jìn)行相關(guān)設(shè)置:比如ACTUAL_3RDPARTY_DIR值 D:/OSGdown/3rdParty。BUILD_OSG_EXAMPLES :ON……圖2 CMAKE配置里面有很多配置項(xiàng),根據(jù)自己的需要選擇的配置,也就是指定各個(gè)插件的文件路徑,如圖2。如果不知道各個(gè)插件是干什么的就上網(wǎng)搜搜。一般配置一次Configure是不可能成功的,應(yīng)為它還用很多小項(xiàng)目,說(shuō)以要多點(diǎn)幾次Configure,直到CMAKE不再出現(xiàn)紅色的信息為止。最后點(diǎn)擊Generate,自此建構(gòu)完成??梢栽谥付ǖ哪夸浳募纠贒/OSGdown/VCOSG下看見生成的VC工程,如圖3:圖3 生成的VC工程3.,打開OSG的VC工程項(xiàng)目;選擇菜單“生成”“批生成”在ALL_BUILD選項(xiàng)中選擇Debug|Win32和Release|Win32,如圖4,最后點(diǎn)擊“生成”。就開始了漫長(zhǎng)的編譯工作。這個(gè)編譯的過(guò)程很長(zhǎng),根據(jù)自己的電腦配置情況不同,好的電腦一般要34小時(shí),差的配置需要半天或者一天時(shí)間。圖4 批生成,對(duì)編譯的成果進(jìn)行轉(zhuǎn)移。,其子文件夾包括有bin:、include、lib、data。把編譯成功的bin文件下exe文件;;include文件來(lái)自源文件的include;。5.設(shè)置電腦的環(huán)境變量:OSG_FILE_PATH X:/(數(shù)據(jù)文件路徑)OSG_ROOT X:/(OSG文件路徑)Path X:/(執(zhí)行文件路徑):利用命令行,在其輸入osgviewer ,則出現(xiàn)如圖5,表明編譯成功。,osgversion查看OSG版本號(hào),osglogo查看官方圖標(biāo)。圖5 OSGEarth 概述及編譯osgEarth是一個(gè)c++地形渲染工具包。具有創(chuàng)建一個(gè)簡(jiǎn)單的XML文件,將它指向您的圖像紋理、海拔、和矢量數(shù)據(jù),并應(yīng)用于OpenSceneGraph程序。osgEarth支持所有類型的數(shù)據(jù),有許多的例子來(lái)幫助你更快、更容易來(lái)學(xué)習(xí)和使用它。OSGEarth編譯及相關(guān)步驟前提條件是完成了OSG的編譯工作,因?yàn)閛sgearth是OSG的一個(gè)分支,他的很多編譯依賴必需需要OSG的支持。Osgearth編譯比較繁瑣,它需要編譯很多其他工具,里面的CMAKE在此不再累述。在這里就大致說(shuō)明一下編譯的步驟,細(xì)節(jié)的東西不再詳述。1. osgearth源碼的下載,最新地址:2. 下載gdal并編譯,下載地址:編譯方法:u (VS2010安裝目錄下)u /f MSVC_VER=1600u nmake /f installu nmake /f devinstall u 最終結(jié)果在c:\warmerda下3. 下載geos 并編譯,下載地址: 編譯方法:u u u nmake /f MSVC_VER=1600u 最終結(jié)果在c:\warmerda下4. 下載SQLite并編譯,下載地址:編譯方法u 建立一個(gè)靜態(tài)鏈接工程,加入sqlite3開頭的三個(gè)文件u 建立一個(gè)exe工程,u ,分別表示debug和release版本5. ,下載地址:6. 下載libzip并編譯結(jié)果,下載地址:進(jìn)入contrib\vstudio\vc10目錄,雙擊工程進(jìn)行編譯。7. 下載并編譯proj4,下載地址:編譯方法u u nmake /f installu nmake /f installall8. 下載編譯VPB,使用svn簽出各版本源碼,.編譯工具還是用CMAKE9. 使用cmake編譯osgEarth,編譯的步驟與編譯OSG類似,在此不詳述。編譯的過(guò)程也是相當(dāng)?shù)穆L(zhǎng)。邊編譯邊做其他的事吧。10. 配置環(huán)境變量,把上面編譯的所有東西分別建立文件夾放在OSG的同級(jí)目錄下,并且在環(huán)境變量的path中加入各自的bin文件目錄路徑。11. Osgearth測(cè)試:在osgearth的test文件夾下,命令行中輸入:osgearth_viewer ,出現(xiàn)如圖6漂亮的小地球,恭喜你編譯成功了。圖6 osgearth測(cè)試這一章關(guān)于OSG和OSGEarth的概述和編譯就到這里,在此列出最終的編譯結(jié)果文件夾,如圖7所示。 圖 7 編譯的最終結(jié)果文件目錄第二章 OSG原理初窺 第一個(gè)程序現(xiàn)在來(lái)使用OSG編程,在這里需要明確一個(gè)概念,就是OSG的語(yǔ)法是標(biāo)準(zhǔn)C++的。所以開發(fā)者必須具有C++知識(shí)。在學(xué)習(xí)各種語(yǔ)言的時(shí)候當(dāng)中,都會(huì)有第一個(gè)程序,名為Hello World的,在OSG中也不例外,在OSG中也會(huì)有了幾行的程序來(lái)說(shuō)明OSG中的一些功能、機(jī)制和原理。打開VS2010,點(diǎn)擊菜單:文件新建項(xiàng)目Visual C++ WIN32控制臺(tái)應(yīng)用程序,項(xiàng)目名稱設(shè)置為:HelloWorld,現(xiàn)在需要設(shè)置項(xiàng)目的相關(guān)文件。在VS2005中設(shè)置項(xiàng)目的包含目錄可以全局設(shè)定,但是在VS2010中屏蔽了此功能了,只能在每一個(gè)項(xiàng)目里每次進(jìn)行設(shè)定。 設(shè)定項(xiàng)目包含路徑OSG編譯后自身可用的有三部分組成,一部分是運(yùn)行時(shí)文件,一部分是庫(kù)文件,另一部分是頭文件。這三部分在開發(fā)的過(guò)程當(dāng)中都會(huì)用到。 如果你使用的是安裝包,可以跳過(guò)這一段,否則需要把path設(shè)置為編譯后的庫(kù)文件目錄,就是里面有很多DLL與EXE文件的目錄,把OSG_FILE_PATH指向測(cè)試模型的目錄。如果是自己編譯的,也建議把庫(kù)文件、頭文件與數(shù)據(jù)文件都放入同一個(gè)文件夾中,類似安裝包那樣。在VS里面,右鍵點(diǎn)擊項(xiàng)目屬性配置屬性VC++目錄,包含文件中加入安裝或編譯后的include文件夾,如果include文件夾為空,則拷一下源文件中的include文件內(nèi)容就可以了。可執(zhí)行文件目錄指向編譯的OSG的bin目錄,把庫(kù)文件指向lib目錄即可。如果你要編譯release版的程序,還需要在release選項(xiàng)卡中完成類似設(shè)置。這樣設(shè)置項(xiàng)目的包含路徑就配置好了。 包含目錄設(shè)置 添加相關(guān)的庫(kù)添加OSG相關(guān)的庫(kù),在這里我們把所有的鏈接庫(kù)都添加進(jìn)去,以免出什么亂子。菜單:項(xiàng)目屬性配置屬性鏈接器輸入在附加依賴項(xiàng)中輸入: ,或者到項(xiàng)目屬性配置屬性鏈接器命令行下輸入這些。這時(shí)如果需要在R版中也配置R版的庫(kù),就在配置中選中“release”。 加入lib這里要注意,調(diào)度版的庫(kù)后面都是帶個(gè)d的,然而R版的就不帶這個(gè)D。發(fā)布版的可執(zhí)行文件會(huì)比較小,因?yàn)槔锩娌缓{(diào)試信息。3. 編寫第一個(gè)HelloWorld程序:CTRL+: helloworld首先這個(gè)程序很簡(jiǎn)單,實(shí)際有用的就三句話,這也說(shuō)明OSG編程很方便。與C或者C++類似,雖然程序很短,但是五臟俱全。其中包括了必要的OSG工作原理。在此對(duì)此簡(jiǎn)單的說(shuō)明。osgViewer負(fù)責(zé)視圖的管理,其中包括事件的管理osgGA,模型的讀取osgDB等。最后一個(gè)viewer的方法run,就是啟動(dòng)渲染,進(jìn)行渲染。 helloworld的原理圖現(xiàn)在來(lái)具體看看每一行的功能:第1~2行:這里是包含頭文件,可以打開OSG的安裝目錄,發(fā)現(xiàn)應(yīng)該存在osgViewer和osgDB的文件夾,而ReadFile和Viewer都是其中的頭文件。這里要說(shuō)一下,一般需要頭文件與對(duì)應(yīng)庫(kù)和動(dòng)態(tài)鏈接DLL就可以編譯了,不需要CPP文件,頭文件是說(shuō)明庫(kù)文件和DLL的。第3行:主函數(shù),這里主函數(shù)還沒(méi)有任何的參數(shù)。第4~5行:這里申請(qǐng)了一個(gè)viewer,這里要解釋一下,為什么要osgViewer::Viewer, osgViewer是名字空間,與std::的地位是一樣的,關(guān)于名字間是C++防止重名的很重要的一個(gè)機(jī)制,從而使程序看起來(lái)井井有條。這里你可以理解為申請(qǐng)一個(gè)觀察器,該觀察器可以查看模型就可以了,在現(xiàn)實(shí)中我們也是叫Viewer的。比如,你的Viewer寫的有問(wèn)題,用Viewer等等打招乎語(yǔ)。注意這里申請(qǐng)的是一個(gè)智能指針,它具有內(nèi)存的自我管理能力。在此我們來(lái)看看osgViewer::viewer的類關(guān)系圖, osgViewer::viewer的類關(guān)系圖它是繼承自osgviewer::ViewerBase和osgviewer::View,繼承的子節(jié)點(diǎn)具有父節(jié)點(diǎn)更強(qiáng)大的功能,并且具有父節(jié)點(diǎn)的全部功能;其中osgviewer::ViewerBase負(fù)責(zé)場(chǎng)景的渲染線程;osgviewer::View負(fù)責(zé)場(chǎng)景的數(shù)據(jù)加載和事件處理;osgGA::GUIActionAdapter負(fù)責(zé)與操作系統(tǒng)UI部分的交互功能;osg::View負(fù)責(zé)狀態(tài)與相機(jī)處理。還有其他的類。 osgviewer::viewer類繼承圖功能說(shuō)明OSG的所有類都是從osg::Referenced,referenced有兩個(gè)很好的方法就是ref與unref,這兩個(gè)方法就構(gòu)成了OSG里的著名模板ref_ptr,智能指針:使用棧中的資源管理堆中的東西。關(guān)于超級(jí)指針的問(wèn)題由來(lái)已久,用的頗廣。在OSG中問(wèn)題是這樣提出來(lái)的,有這樣一個(gè)場(chǎng)景,有一輛卡車,卡車上有一個(gè)箱子。如果說(shuō)卡車在運(yùn)行過(guò)程中,箱子突然掉了,這樣就知道該把箱子的結(jié)點(diǎn)刪除。那么如果說(shuō)還有一個(gè)箱子,在地上放著,從感覺上來(lái)講他們應(yīng)該用同一塊內(nèi)存??ㄜ嚿系南渥与m然掉了,但是地上的箱子還在,所以箱子所占的資源不能被粗魯?shù)尼尫诺簟?這樣就引用了超級(jí)指針的機(jī)制,其實(shí)就是引用一個(gè)計(jì)數(shù)器,這個(gè)計(jì)數(shù)器會(huì)計(jì)算這個(gè)箱子被引用的次數(shù),被別人引用一次執(zhí)行ref方法,計(jì)數(shù)器加1,別人不用一次,執(zhí)行unref方法,計(jì)數(shù)器減1。當(dāng)減至0時(shí),內(nèi)存放掉不用,這樣有效的防止內(nèi)存泄露。第6行:這里是設(shè)置觀察器Viewer中的數(shù)據(jù),換句話說(shuō),有了觀察器, 得可以年模型呀,模型中要以含有路徑,(osgDB::readNodeFile(C://glider.osg))。表示打開C盤根目錄下的該模型。其中//為轉(zhuǎn)義字符,編譯器會(huì)識(shí)別為/,從某種意義上講,我個(gè)人從來(lái)不把文件夾設(shè)置為中文名,OSG對(duì)中文支持的可不是很好。所以最好不用要中文路徑名,還有就是有空格的路徑名,最好也不用,不要讓這些無(wú)所謂的東西干擾你。第7行:這里主要就是run方法,run的具體干了什么工作,我們就得查看osg源碼。從源碼可以看出:它是執(zhí)行osgviewer::Base的run,我們?cè)賮?lái)查看osgviewer::Base的run,通過(guò)代碼可以看出里面就是渲染的工作,包括的功能有:realize(),frame()等。 run程序框架說(shuō)明,只要viewer沒(méi)有結(jié)束,那么就繪制它的每一個(gè)幀[frame]。 添加事件 上面的簡(jiǎn)單的三句話程序沒(méi)有事件響應(yīng),如響應(yīng)鍵盤,按下S鍵顯示幀速率,W鍵顯示網(wǎng)格等等功能。實(shí)現(xiàn)方法很簡(jiǎn)單,viewer自己有一個(gè)函數(shù)式addEventHandler(),此函數(shù)可以加載
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號(hào)-1