亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于3DS文件讀取的虛擬場景實(shí)現(xiàn)

        2012-07-13 06:30:04馬建倉
        電子設(shè)計工程 2012年23期
        關(guān)鍵詞:紋理光線繪制

        陳 曉,馬建倉

        (西北工業(yè)大學(xué) 電子信息學(xué)院,陜西 西安 710129)

        隨著計算機(jī)圖形學(xué)的發(fā)展,計算機(jī)動畫、科學(xué)計算可視化和虛擬現(xiàn)實(shí)逐漸成為計算機(jī)圖形學(xué)領(lǐng)域中3大重要技術(shù),其中三維現(xiàn)與廣泛應(yīng)用于建筑學(xué)、醫(yī)學(xué)、模擬仿真、虛擬現(xiàn)實(shí)等諸多領(lǐng)域[1]對大多數(shù)人來說,計算機(jī)真實(shí)感圖形已不再是一個陌生的名詞,它正日益廣泛的深入到人們?nèi)粘5墓ぷ?、學(xué)習(xí)和生活中,在影視特技、廣告動畫中,人們已經(jīng)領(lǐng)略到計算機(jī)真實(shí)感圖形的神奇魅力。真實(shí)感圖形是一種計算機(jī)生成技術(shù),它首先在計算機(jī)中構(gòu)造出所需場景的幾何模型,然后根據(jù)假定的光照條件,計算畫面上可見的各個景物表面的光亮度,從而產(chǎn)生逼真的視覺效果。

        文中主要針對Autodesk公司的3DMAX軟件建立幾何模型,從而對生成的3DS文件進(jìn)行編程,實(shí)現(xiàn)3DS文件的讀取、重繪及控制。傳統(tǒng)的基于過程的設(shè)計方法,由于相關(guān)函數(shù)多而且散雜同時數(shù)據(jù)又與函數(shù)分離,導(dǎo)致不便于程序的移植,為了克服這些缺點(diǎn),本文采用了面向?qū)ο蟮某绦蛟O(shè)計方法,將3DS文件的形體數(shù)據(jù)讀入到類中,然后利用光線追蹤技術(shù)[2]實(shí)現(xiàn)對三維模型的渲染,使得生成的場景更加逼真,具有真實(shí)感。

        1 3DS文件和OpenGL的繪制流程簡介

        1.1 3DS文件簡介

        3DS文件是基于塊(chunk)結(jié)構(gòu)存儲的。一個塊開始是2個字節(jié)的ID,4個字節(jié)的塊長度信息,然后是塊的主要數(shù)據(jù)。將3DS文件以16進(jìn)制方式打開如圖1所示,數(shù)據(jù)按照低位在前,高位在后的方式存儲。例如,2個16進(jìn)制字節(jié)FFAF組成的整型數(shù),表明AF是高字節(jié),F(xiàn)F是低字節(jié);對于長整型數(shù),如。938E 0600,表明8E93是低位字,0006是高位字。

        圖1 3DS文件的16進(jìn)制數(shù)據(jù)構(gòu)成Fig.1 3 DS file hexadecimal data form

        3DS文件中 有一個基本塊,其ID是4D4D,每個3DS文件的開頭都是這樣的一個塊?;緣K中的子塊是3D編輯塊和關(guān)鍵幀塊,前者的ID是3D3D,后者的ID是B000.圖2說明了3DS的塊結(jié)構(gòu)以及各個塊之間的嵌套關(guān)系。下面對主要的幾個塊進(jìn)行簡單介紹。

        1)主編輯塊(0X3D3D)

        描述場景數(shù)據(jù)的主編輯塊存儲了當(dāng)前編輯場景的狀況和當(dāng)前窗口的配置數(shù)據(jù),這些數(shù)據(jù)是用于顯示三維圖形的重要幾何信息,也是基于OPENGL裝載3DS文件的重點(diǎn)煙酒部分。

        2)材質(zhì)塊(0XAFFF)

        材質(zhì)塊定義了使用與物體上的材質(zhì)屬性,包括材質(zhì)的名稱,顏色以及貼圖等。如果讀入的材質(zhì)包含貼圖,則貼圖所對應(yīng)的文件名、透明度信息、位置和纏繞方法也都存儲在材質(zhì)塊的響應(yīng)子塊中。

        圖2 3DS文件塊結(jié)構(gòu)Fig.2 3 DS file chunk structure

        3)物體塊(0X4000)

        物體塊下有物體網(wǎng)格塊 (0X4100)和物體材質(zhì)塊(0X4130)。物體網(wǎng)格塊存儲的是模型的頂點(diǎn)、頂點(diǎn)的紋理坐標(biāo)、面信息以及邊信息等。物體材質(zhì)塊中存儲的是當(dāng)前物體上所賦予的材質(zhì),該塊與材質(zhì)塊的區(qū)別是,材質(zhì)塊存儲的是3DS文件中材質(zhì)庫中的信息,而物體材質(zhì)塊中存儲的是當(dāng)前物體上的材質(zhì)信息。

        4)其他塊

        當(dāng)遇到塊信息未知或?qū)δP惋@示不起作用的塊時(如關(guān)鍵幀塊),可不進(jìn)行處理直接讀入下一個塊。

        1.2 OpenGL的繪制流程

        OpenGL全稱為“開放式圖形庫”,是由SGI公司開發(fā)的三維圖形API,目前在圖形開發(fā)領(lǐng)域已經(jīng)成為工業(yè)標(biāo)準(zhǔn)。OpenGL是一種強(qiáng)大的三維圖形開發(fā)工具,是圖形硬件的軟件接口[3],OpenGL主要工作是將三維的物體投影到一個二維平面上,之后處理得到的像素,進(jìn)行顯示。首先將物體轉(zhuǎn)化為可以描述物體幾何性質(zhì)的頂點(diǎn)與描述圖像的像素,在執(zhí)行其他操作后,最終將這些數(shù)據(jù)轉(zhuǎn)化為像素數(shù)據(jù)。

        1)針對每個頂點(diǎn)的操作和幾何要素裝配

        每個頂點(diǎn)的空間坐標(biāo)需要經(jīng)過模型取景矩陣變換、法向矢量矩陣變換,若允許紋理自動生成,則由變換后的頂點(diǎn)坐標(biāo)所生成的新紋理坐標(biāo)替代原有的紋理坐標(biāo),再經(jīng)過當(dāng)前紋理矩陣變換。然后根據(jù)幾何要素類型決定采取不同的幾何要素裝配方式。

        2)像素操作

        由主機(jī)讀入的像素首先解壓縮成適當(dāng)?shù)慕M分?jǐn)?shù)目,然后進(jìn)行數(shù)據(jù)放大、偏置,并經(jīng)過像素映射處理,根據(jù)數(shù)據(jù)類型的限制在適當(dāng)?shù)娜≈捣秶鷥?nèi)。像素最后寫入紋理內(nèi)存,使用紋理映射或光柵化生成像素段。

        3)像素段操作

        當(dāng)使用紋理映射時,每個像素段將產(chǎn)生紋素,再進(jìn)行霧效果計算、反走樣處理,接著進(jìn)行剪裁處理、一致性檢驗(yàn)、模板檢驗(yàn)、深度緩沖區(qū)檢驗(yàn)和抖動處理。

        2 3DS文件的讀取與控制

        3DS文件中采用的是塊結(jié)構(gòu),并且塊與塊之間存在嵌套的關(guān)系,所以對3DS文件中三維模型數(shù)據(jù)的讀取采用遞歸的方法。返回上一級的條件是當(dāng)前已經(jīng)讀入的塊字節(jié)數(shù)是否等于塊的長度,從父塊跳轉(zhuǎn)到子塊可用switch語句實(shí)現(xiàn),通過子塊的ID判斷進(jìn)入那個子塊分支。當(dāng)遇到?jīng)]有必要讀入的塊時,可通過ID判斷,若不需要此塊信息,則可將文件指針向前移動(塊長度—6)個字節(jié)[5]然后break跳過該塊,處理下一塊。當(dāng)遇到需要讀入的塊時,例如材質(zhì)塊,通過判斷當(dāng)ID為0XAFFF(EDIT-MATERIAL)時,首先自加記錄材質(zhì)數(shù)目的變量,然后為當(dāng)前材質(zhì)塊分配一塊空白的結(jié)構(gòu),接著遞歸讀出相關(guān)信息。當(dāng)主塊讀完后,整個讀入程序結(jié)束。讀入程序的主要流程圖如圖3所示。

        圖3 3DS文件處理流程圖Fig.3 3DS document processing flow chart

        通過面向?qū)ο蟮木幊?,?shí)現(xiàn)了3DS文件數(shù)據(jù)信息的讀取,對象的繪制就是根據(jù)類中保存的信息進(jìn)行繪制,場景控制主要是基于D3D InputSystem實(shí)現(xiàn)鍵盤和鼠標(biāo)的控制操作。用OpenGL繪圖命令繪制出來,主要代碼如下。

        3 光線追蹤技術(shù)

        光線追蹤時一種真實(shí)地顯示物體的方法。光線追蹤算法是生成真實(shí)感圖形的主要算法之一。它通過跟蹤每一條從視點(diǎn)出發(fā)的光線,計算光線與景物交點(diǎn)的光強(qiáng),可以精確地在三維實(shí)體上產(chǎn)生陰影、反射、折射及表面紋理等真實(shí)感很強(qiáng)的光學(xué)效果。標(biāo)準(zhǔn)的光線追蹤算法需要計算每一條與景物空間相交的光線,并且要根據(jù)景物的性質(zhì)進(jìn)行光的反射、折射等計算,計算量非常龐大,因此很難滿足真實(shí)感圖形顯示的實(shí)時性要求,為了提高顯示的實(shí)時性,一般通過提高光線追蹤算法的效率及并行處理技術(shù)來實(shí)現(xiàn)。

        在本文中采用二叉空間剖分[6](BSP)加速技術(shù),來提高光線追蹤的效率。它由Schumacker于1969年首先提出,90年代初期由John Carmack和John Romero最早在第一人稱視角游戲Doom中引入。自那以后,幾乎所有的第一人稱射擊類游戲都采用BSP技術(shù)。BSP樹能應(yīng)用在深度排序、碰撞檢測、繪制、節(jié)點(diǎn)裁剪和潛在可見集的計算,極大地加速了三維場景的漫游。它基于這樣一個事實(shí):空間中的任何平面都將整個空間分割成兩個半空間,位于該平面某一側(cè)的所有點(diǎn)構(gòu)成了一個半空間,位于另一側(cè)的點(diǎn)則定義了另一個半空間,該平面則是將兩個半空間剖分開來的分割面。根據(jù)這種空間剖分的方法,可以建立起對整個幾何場景和場景中各種物體幾何的描述。BSP樹的根節(jié)點(diǎn)就是整個場景,每個節(jié)點(diǎn)所代表的區(qū)域被平面分成兩部分,一部分是平面前面(左側(cè))區(qū)域的子節(jié)點(diǎn),另一部分是平面后面(右側(cè))區(qū)域的子節(jié)點(diǎn)。對子節(jié)點(diǎn)剖分,一直向下遞歸直到空間內(nèi)部沒有多邊形或者剖分的深度達(dá)到指定的數(shù)值時才停止。BSP樹具有內(nèi)存開銷小,剖分產(chǎn)生的無效區(qū)域少,樹結(jié)構(gòu)比較平衡及樹的深度較淺等優(yōu)點(diǎn)。

        4 實(shí)驗(yàn)仿真

        基于上述方法,本文設(shè)計實(shí)現(xiàn)了三維場景模型的讀取、繪制和操作,在此基礎(chǔ)上實(shí)現(xiàn)了基于BSP的光線追蹤算法,并且在場景中實(shí)現(xiàn)了簡單的粒子系統(tǒng)。仿真場景圖如圖4所示。此圖(b)中的亮光區(qū)域即為手槍子彈的爆炸(粒子系統(tǒng))演示。

        圖4 基于3DS文件實(shí)現(xiàn)的虛擬場景Fig.4 Based on the 3 DS file virtual scene

        5 結(jié) 論

        3DS是一種通用的保存三維模型的數(shù)據(jù)格式,因此研究該格式的讀取和繪制很有重要的實(shí)際意義。本文基于面向?qū)ο蟮木幊谭椒▽?DS文件進(jìn)行讀取,利用OpenGL進(jìn)行重繪,大大降低OpenGL建立復(fù)雜模型的難度,可以較容易的得到真實(shí)的三維復(fù)雜物體模型。在此基礎(chǔ)上運(yùn)用光線追蹤技術(shù),對三維模型場景進(jìn)行實(shí)時渲染,使得生成的場景更加逼真,具有真實(shí)感。

        [1]于瑩瑩.在VC中利用OpenGL實(shí)現(xiàn)動態(tài)效果圖像的技巧[J].微型電腦應(yīng)用,2002,18(6):50-52.

        YU Ying-ying.In the VC using OpenGL realize dynamic image skills[J].Microcompute Applications,2002,18(6):50-52.

        [2]彭群生,鮑虎軍,金小剛.計算機(jī)真實(shí)感圖形的算法基礎(chǔ)[M].北京:科學(xué)出版社,1999.

        [3]Wright R S,Lipchak B.OpenGL超級寶典[M].徐波,譯.3版.北京:人民郵電出版社,2005.

        [4]郭景,雷鳴.3DSMAX模型在OpenGL中的讀取與重現(xiàn)[J].自動化與儀表,2002,17(5):46-49.

        GUO Jing,LEI Ming.3DSMAX model in the OpenGL reading and reappear[J].Automation and Instrumentation,2002,17(5):46-49.

        [5]殷素峰,高雪強(qiáng),楊勝強(qiáng).在OpenGL環(huán)境下開發(fā)3DS文件瀏覽器[J].工程圖學(xué)學(xué)報,2005(6):22-25.

        YAN Su-feng,GAO Xue-qiang,YANG Sheng-qiang.Development 3DS file browser based on OpenGL[J].Journal of Engineering Graphics,2005(6):22-25.

        [6]Kaplan M.Space-tracing:a constant time ray-tracer[C]//SIGGRAPH’85 State of the Art Image Syn Sem Notes,1985:149-158.

        猜你喜歡
        紋理光線繪制
        春日暖陽
        Art on coffee cups
        基于BM3D的復(fù)雜紋理區(qū)域圖像去噪
        軟件(2020年3期)2020-04-20 01:45:18
        “你看不見我”
        中外文摘(2019年8期)2019-04-30 06:47:36
        使用紋理疊加添加藝術(shù)畫特效
        放學(xué)后
        童話世界(2018年17期)2018-07-30 01:52:02
        TEXTURE ON TEXTURE質(zhì)地上的紋理
        Coco薇(2017年8期)2017-08-03 15:23:38
        消除凹凸紋理有妙招!
        Coco薇(2015年5期)2016-03-29 23:22:15
        淘氣的光線
        流動的光線
        国产极品少妇一区二区| 国产av综合一区二区三区最新 | 国模无码人体一区二区| 久久精品国产精品亚洲婷婷| 亚洲第一区二区快射影院| 久久婷婷五月综合97色直播| 国产成人久久精品一区二区三区| 亚洲av无码之日韩精品| 亚洲国产成人无码电影| 国产午夜视频高清在线观看| 中文乱码字字幕在线国语| 欧美成人aaa片一区国产精品| 久久久精品欧美一区二区免费| 国产91一区二这在线播放| 亚洲一区二区三区ay| 亚洲av不卡一区男人天堂| 日韩一区国产二区欧美三区| 亚洲尺码电影av久久| 无码国产精品一区二区免费式芒果| 亚洲中文字幕精品久久久| 又硬又粗进去好爽免费| 欧洲熟妇色xxxx欧美老妇多毛 | 国内揄拍国内精品人妻久久| 天天躁夜夜躁狠狠躁2021a2| 大地资源在线播放观看mv| A亚洲VA欧美VA国产综合| 日本91一区二区不卡| 国产无套内射又大又猛又粗又爽| 99精品国产一区二区三区| YW亚洲AV无码乱码在线观看| 午夜国产小视频在线观看黄| 国产一区亚洲二区三区极品 | 久久久久亚洲av片无码下载蜜桃| 亚洲电影一区二区三区 | 亚洲色大成人一区二区| 亚洲一区二区三区美女av| 蜜桃视频网站在线观看一区| 粗大猛烈进出高潮视频| 久久久久亚洲精品天堂| 青青草视频在线免费视频 | 无码a级毛片免费视频内谢|