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

正文內(nèi)容

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

2023-06-14 18:07:25 本頁面
 

【正文】 從z方向上構(gòu)建CVV,但是x和y方向仍然沒有限制在[1,1]中。通過相似三角形性質(zhì)得:這個(gè)形式最大化地使用了3個(gè)信息點(diǎn),達(dá)到了最原始的投影變換的目的,我們開始結(jié)合CVV進(jìn)行思考,把它寫得在數(shù)學(xué)上更優(yōu)雅一致,更易于程序處理的:通過齊次坐標(biāo)變換其中矩陣就是我們投影矩陣的第一個(gè)版本。設(shè)P(x,z)是經(jīng)過相機(jī)變換之后的點(diǎn),視錐體由eye——眼睛位置,np——近裁剪平面,fp——遠(yuǎn)裁剪平面組成。這個(gè)時(shí)候的多邊形也許會(huì)被視錐體裁剪,裁剪被安排到規(guī)則觀察體(Canonical View Volume, CVV)中進(jìn)行,CVV是一個(gè)正方體,x, y, z的范圍都是[1,1],多邊形裁剪就是用這個(gè)規(guī)則體完成的。反之亦然?!?3D向量的第4個(gè)代數(shù)分量是0,如(1,2,3,0)表示向量,而3D點(diǎn)的第4個(gè)代數(shù)分量是1,如(1,2,3,1)就是點(diǎn)。而相機(jī)變換是相機(jī)本身變換的逆變換:其中利用UVW系統(tǒng),做逆旋轉(zhuǎn),其實(shí)逆旋轉(zhuǎn)的目的,就是要得到目前世界坐標(biāo)中經(jīng)過逆平移的小人在相機(jī)坐標(biāo)系中的坐標(biāo)。這是由Inverse Translation和Inverse Rotation兩個(gè)步驟完成的,這兩個(gè)步驟就是相機(jī)變換。圖中的Rotation和Translation兩步就是相機(jī)定位時(shí)所發(fā)生的變換。 平移與變換示意圖圖中,紅色是相機(jī)的基,而黑色是世界的基,也就是參考系。對(duì)于一個(gè)相機(jī)來說,它在開始的時(shí)候和世界坐標(biāo)系是重合的,用戶控制相機(jī)在世界空間中移動(dòng)之后,相機(jī)的狀態(tài)可以用兩個(gè)屬性來描述——朝向和位置。最后將計(jì)算出的U,V和N進(jìn)行單位化,就得到了相機(jī)的UVN系統(tǒng)。UVN系統(tǒng)本身是一個(gè)基。已知一個(gè)基Q和向量v在它之中的坐標(biāo),以及另外一個(gè)基R,我們可以通過公式來計(jì)算。藍(lán)色框中的部分就是這個(gè)過程。vieweraddEventHandler(newosgGA::StateSetManipulator(viewergetCamera()getOrCreateStateSet()) )。 添加事件 上面的簡單的三句話程序沒有事件響應(yīng),如響應(yīng)鍵盤,按下S鍵顯示幀速率,W鍵顯示網(wǎng)格等等功能。所以最好不用要中文路徑名,還有就是有空格的路徑名,最好也不用,不要讓這些無所謂的東西干擾你。當(dāng)減至0時(shí),內(nèi)存放掉不用,這樣有效的防止內(nèi)存泄露。如果說卡車在運(yùn)行過程中,箱子突然掉了,這樣就知道該把箱子的結(jié)點(diǎn)刪除。還有其他的類。這里你可以理解為申請(qǐng)一個(gè)觀察器,該觀察器可以查看模型就可以了,在現(xiàn)實(shí)中我們也是叫Viewer的。 helloworld的原理圖現(xiàn)在來具體看看每一行的功能:第1~2行:這里是包含頭文件,可以打開OSG的安裝目錄,發(fā)現(xiàn)應(yīng)該存在osgViewer和osgDB的文件夾,而ReadFile和Viewer都是其中的頭文件。在此對(duì)此簡單的說明。發(fā)布版的可執(zhí)行文件會(huì)比較小,因?yàn)槔锩娌缓{(diào)試信息。 包含目錄設(shè)置 添加相關(guān)的庫添加OSG相關(guān)的庫,在這里我們把所有的鏈接庫都添加進(jìn)去,以免出什么亂子。在VS里面,右鍵點(diǎn)擊項(xiàng)目屬性配置屬性VC++目錄,包含文件中加入安裝或編譯后的include文件夾,如果include文件夾為空,則拷一下源文件中的include文件內(nèi)容就可以了。 設(shè)定項(xiàng)目包含路徑OSG編譯后自身可用的有三部分組成,一部分是運(yùn)行時(shí)文件,一部分是庫文件,另一部分是頭文件。所以開發(fā)者必須具有C++知識(shí)。10. 配置環(huán)境變量,把上面編譯的所有東西分別建立文件夾放在OSG的同級(jí)目錄下,并且在環(huán)境變量的path中加入各自的bin文件目錄路徑。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)行編譯。osgEarth支持所有類型的數(shù)據(jù),有許多的例子來幫助你更快、更容易來學(xué)習(xí)和使用它。5.設(shè)置電腦的環(huán)境變量:OSG_FILE_PATH X:/(數(shù)據(jù)文件路徑)OSG_ROOT X:/(OSG文件路徑)Path X:/(執(zhí)行文件路徑):利用命令行,在其輸入osgviewer ,則出現(xiàn)如圖5,表明編譯成功。這個(gè)編譯的過程很長,根據(jù)自己的電腦配置情況不同,好的電腦一般要34小時(shí),差的配置需要半天或者一天時(shí)間。一般配置一次Configure是不可能成功的,應(yīng)為它還用很多小項(xiàng)目,說以要多點(diǎn)幾次Configure,直到CMAKE不再出現(xiàn)紅色的信息為止。注意:所有的項(xiàng)目文件路徑不要出現(xiàn)中文或者其他怪異的符號(hào)。編譯環(huán)境 一臺(tái)具有顯示卡的計(jì)算機(jī),推薦NVDIA的顯示卡 操作系統(tǒng)為WIN7或者XP 軟件編譯器VS2010OSG編譯相關(guān)工作準(zhǔn)備:1.OSG源碼,最新下載地址。OpenSceneGraph從字面上看只是一個(gè)場景管理系統(tǒng),從某種意義上講,OSG的對(duì)三維動(dòng)畫等等的支持還不是很強(qiáng),打個(gè)比方來說:OSG不適合做游戲引擎。從系統(tǒng)開發(fā)人員的角度看,相比工業(yè)標(biāo)準(zhǔn)OpenGL 或其它的圖形庫,OSG的優(yōu)點(diǎn)顯而易見。所以研究開源軟件并應(yīng)用于實(shí)際具有很大的研究價(jià)值。在此針對(duì)開源軟件OpenSceneGraph及其相關(guān)的插件進(jìn)行人工的裁剪、編譯 。除了開源和平臺(tái)無關(guān)性以外,它封裝并提供了數(shù)量眾多的提升程序運(yùn)行時(shí)性能的算法、針對(duì)包括分頁數(shù)據(jù)庫在內(nèi)的幾乎所有主流數(shù)據(jù)格式的直接數(shù)據(jù)接口、以及對(duì)腳本語言系統(tǒng)Python 和Tcl 的支持,特別的,支持腳本語言系統(tǒng)的意義不僅限于用戶可以使用除C++語言以外的工具進(jìn)行圖形系統(tǒng)的開發(fā),事實(shí)上,對(duì)弱類型計(jì)算機(jī)語言的支持將突破現(xiàn)有交互式圖形系統(tǒng)在人機(jī)交互性能方面的最終限制。因此工業(yè)控制,城市規(guī)劃,機(jī)械仿真、戰(zhàn)場仿真等方面OSG可以帶來極大的方便。如果想獲得最新的測試版需要利用軟件TortoiseSVN簽出各種版本源代碼,.2.OSG第三方庫,;最新下載地址:~bchrist3.OSG數(shù)據(jù)包,當(dāng)前最新版:,最新下載地址:,最新版:CMake ,下載地址:OSG編譯步驟1.安裝CMAKE,解壓OSG源碼;利用CMAKE生成OSG的VC編譯工程項(xiàng)目,即生成sln項(xiàng)目文件。圖1. CMKAE路徑2.點(diǎn)擊Configure,選擇Visual Studio 10(x86),finish后進(jìn)行相關(guān)設(shè)置:比如ACTUAL_3RDPARTY_DIR值 D:/OSGdown/3rdParty。最后點(diǎn)擊Generate,自此建構(gòu)完成。圖4 批生成,對(duì)編譯的成果進(jìn)行轉(zhuǎn)移。osgversion查看OSG版本號(hào),osglogo查看官方圖標(biāo)。OSGEarth編譯及相關(guān)步驟前提條件是完成了OSG的編譯工作,因?yàn)閛sgearth是OSG的一個(gè)分支,他的很多編譯依賴必需需要OSG的支持。7. 下載并編譯proj4,下載地址:編譯方法u u nmake /f installu nmake /f installall8. 下載編譯VPB,使用svn簽出各版本源碼,.編譯工具還是用CMAKE9. 使用cmake編譯osgEarth,編譯的步驟與編譯OSG類似,在此不詳述。11. Osgearth測試:在osgearth的test文件夾下,命令行中輸入:osgearth_viewer ,出現(xiàn)如圖6漂亮的小地球,恭喜你編譯成功了。在學(xué)習(xí)各種語言的時(shí)候當(dāng)中,都會(huì)有第一個(gè)程序,名為Hello World的,在OSG中也不例外,在OSG中也會(huì)有了幾行的程序來說明OSG中的一些功能、機(jī)制和原理。這三部分在開發(fā)的過程當(dāng)中都會(huì)用到??蓤?zhí)行文件目錄指向編譯的OSG的bin目錄,把庫文件指向lib目錄即可。菜單:項(xiàng)目屬性配置屬性鏈接器輸入在附加依賴項(xiàng)中輸入: ,或者到項(xiàng)目屬性配置屬性鏈接器命令行下輸入這些。3. 編寫第一個(gè)HelloWorld程序:CTRL+: helloworld首先這個(gè)程序很簡單,實(shí)際有用的就三句話,這也說明OSG編程很方便。這里要說一下,一般需要頭文件與對(duì)應(yīng)庫和動(dòng)態(tài)鏈接DLL就可以編譯了,不需要CPP文件,頭文件是說明庫文件和DLL的。比如,你的Viewer寫的有問題,用Viewer等等打招乎語。 osgviewer::viewer類繼承圖功能說明OSG的所有類都是從osg::Referenced,referenced有兩個(gè)很好的方法就是ref與unref,這兩個(gè)方法就構(gòu)成了OSG里的著名模板ref_ptr,智能指針:使用棧中的資源管理堆中的東西。那么如果說還有一個(gè)箱子,在地上放著,從感覺上來講他們應(yīng)該用同一塊內(nèi)存。第6行:這里是設(shè)置觀察器Viewer中的數(shù)據(jù),換句話說,有了觀察器, 得可以年模型呀,模型中要以含有路徑,(osgDB::readNodeFile(C://glider.osg))。第7行:這里主要就是run方法,run的具體干了什么工作,我們就得查看osg源碼。實(shí)現(xiàn)方法很簡單,viewer自己有一個(gè)函數(shù)式addEventHandler(),此函數(shù)可以加載事件處理,具有處理什么事件需要自己重載虛函數(shù)handle(),這樣就可以達(dá)到處理自己想處理的效果。 添加事件響應(yīng) 顯示狀態(tài)信息與網(wǎng)格本章首先利用VS2010配置了適合OSG開發(fā)的環(huán)境,將來的所有程序都是這個(gè)步驟。 流水線所謂的相機(jī)空間,就是以相機(jī)作為坐標(biāo)原點(diǎn)的一個(gè)參考系,所以,從世界空間變換到相機(jī)空間,就是把物體從世界坐標(biāo)系,變換到相機(jī)為原點(diǎn)的相機(jī)坐標(biāo)系。這個(gè)公式就是坐標(biāo)轉(zhuǎn)換公式。三個(gè)基向量U,V,N分別指向相機(jī)的右方、上方和后方從而構(gòu)成右手坐標(biāo)系,相機(jī)則處于坐標(biāo)原點(diǎn)。結(jié)合上面我們談到的坐標(biāo)轉(zhuǎn)換理論,我們可以把UVN系統(tǒng)看作是相機(jī)的基,從而可以方便的把一個(gè)向量在世界坐標(biāo)和相機(jī)坐標(biāo)進(jìn)行轉(zhuǎn)換。也就是說,有了這兩個(gè)屬性,一個(gè)相機(jī)模型在世界中的狀態(tài)就確定了。小人是世界中的一個(gè)物體??梢钥吹较鄼C(jī)相對(duì)于小人的運(yùn)動(dòng)?,F(xiàn)在我們推導(dǎo)這個(gè)變換。利用坐標(biāo)轉(zhuǎn)換公式得相機(jī)完整的變換公式: 透視投影透視投影是3D固定流水線的重要組成部分,是將相機(jī)空間中的點(diǎn)從視錐體(frustum)變換到規(guī)則觀察體(Canonical View Volume)中,待裁剪完畢后進(jìn)行透視除法的行為。像這種用4個(gè)代數(shù)分量表示3D幾何概念的方式是一種齊次坐標(biāo)表示。簡單的線性插值基本思想是:給一個(gè)x屬于[a, b],找到y(tǒng)屬于[c, d],使得x與a的距離比上ab長度所得到的比例,等于y與c的距離比上cd長度所得到的比例,用數(shù)學(xué)表達(dá)式:這樣,從a到b的每一個(gè)點(diǎn)都與c到d上的唯一一個(gè)點(diǎn)對(duì)應(yīng)。所以,事實(shí)上是透視投影變換由兩步組成:1) 用透視變換矩陣把頂點(diǎn)從視錐體中變換到裁剪空間的CVV中。N是眼睛到近裁剪平面的距離,F(xiàn)是眼睛到遠(yuǎn)裁剪平面的距離。把z寫成有兩個(gè)原因:1)P’的3個(gè)代數(shù)分量統(tǒng)一地除以分母z,易于使用齊次坐標(biāo)變?yōu)槠胀ㄗ鴺?biāo)來完成,使得處理更加一致、高效。為了能在x和y方向把頂點(diǎn)從Frustum情形變成CVV情形,我們開始對(duì)x和y進(jìn)行處理。相機(jī)空間中的頂點(diǎn),如果在視錐體中,則變換后就在CVV中。注意到M的最后一行不是(0 0 0 1)而是(0 0 1 0),因此可以看出透視變換不是一種仿射變換,它是非線性的。解決這個(gè)問題的方法就是在對(duì)多變形進(jìn)行透視變換、裁剪、透視除法之后,在歸一化的設(shè)備坐標(biāo)(Normalized Device Coordinates)上進(jìn)行的視口(viewport)變換中進(jìn)行校正,它會(huì)把歸一化的頂點(diǎn)之間按照和投影面上相同的比例變換到視口中,從而解除透視投影變換帶來的失真現(xiàn)象。np是近裁剪平面,也是投影平面,N是它到相機(jī)的距離。接下來根據(jù)上部分所講到的,我們要把前兩個(gè)分量變成CVV情形,CVV的x和y范圍是[1, 1],如下圖所示:使用線性插值,我們有:這里left和right是投影平面的左右范圍,top和bottom是投影平面的上下范圍。平行投影則是具有矩形觀察體的投影方式(透視投影則是視錐觀察體),它不會(huì)根據(jù)物體離視點(diǎn)的遠(yuǎn)近縮放物體(透視投影則會(huì))。q的投影方向向量為Q = 單位化(q’q),而p的投影方向向量為P = 單位化(p’p),其中Q不平行于n而P平行于n,則q的投影叫做側(cè)投影,而p的投影叫做正交投影。上圖b是OpenGL的右手坐標(biāo)系中觀察空間的情形,我們看到的是正交投影的矩形觀察體,原點(diǎn)是相機(jī)位置,n是近裁剪平面到相機(jī)平面的距離,f是遠(yuǎn)裁剪平面到相機(jī)平面的距離。 OSG的矩陣變換OSG中對(duì)一個(gè)物體操作包括:平移,旋轉(zhuǎn),縮放。當(dāng)向量(X,Y,Z,0)與T相乘之后并沒有產(chǎn)生預(yù)定的效果,原因是方向向量是受平移操作的影響!B 旋轉(zhuǎn)矩陣物體當(dāng)前所處位置為(X, Y, Z, 1), 使用Rotate(axis, angle),其中axis表示繞某軸旋轉(zhuǎn),而angle則表示旋轉(zhuǎn)的角度,自然可以想到會(huì)有三種情況,分別繞X,Y,Z軸旋轉(zhuǎn),下面來看一下這三個(gè)旋轉(zhuǎn)矩陣:可以看到,對(duì)一個(gè)繞任意角度a的33旋轉(zhuǎn)矩陣R來說,其對(duì)角線和為固定值,即稱為跡=1+2cosaC 縮放矩陣縮放矩陣是指當(dāng)某向量與該矩陣相乘之后,原值按比例縮?。鹤⒁猓涸诰仃嚨模?,3)位置,如果值為非1,則會(huì)引入有除法,除法是效率奇低的運(yùn)算,因此長時(shí)間以來,人們把此位置永遠(yuǎn)置1,起調(diào)節(jié)做用,從而這些矩陣也有時(shí)候被簡化為33的矩陣進(jìn)行
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1