青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當自強而不息

3D圖形數學(7)

幾何體的生成與提交

 

幾何體的生成與提交

一旦知道哪些物體可見(或至少潛在可見),即可將其生成并提交到圖形處理器。該階段完成以下任務:

(1)細節層次(LOD)選擇

(2)漸進式生成幾何體

(3)向圖形API提交數據

 

LOD選擇和漸進式生成

一般我們希望以最大可能的三角形數量描繪物體以求得最佳的視覺效果,但不幸的是,較多的三角形一般意味著低幀率。我們必須在可接受的外表和幀率間做出折中選擇。LOD在一定程度上可兩全其美,基本思路是離攝像機遠的物體只使用較少的多邊形,此時并不降低視覺效果。

如何得到三角形數量較少的三角網?一種簡單方法(從程序員角度)是讓美工直接制作一個,然后根據物體離攝像機的遠近(或屏幕分辨率大小)選用合適的LOD。問題是就在它由遠及近改變的那一刻,這種方法會有一種跳動效果,當然我們希望把這種視覺上的不連續性降低到最低限度----好的三角網也許會有更大幫助。

一種克服跳動的方法是引入連續LOD。這種系統中,不同級別LOD包含的三角形數目幾乎是連續的,我們可以產生任意多三角形的網格。漸進式網格技術就是一種這樣的網格消減技術,但需要注意生成連續LOD的開支可能會很顯著。而使用離散LOD,網格是現成可用的,渲染時可立即投送,我們所要做的就是決定用哪個網格。所以,即使實際的網格是用網格的消減技術生成的,離散LOD還是在實踐中經常使用。

有時候幾何體并非由美工創建,而是由計算機生成,這稱為程序建模。分形地形圖是程序建模的好例子,植物也可以自動創建,有時LOD也用在此類建模算法中。

 

向API投送幾何體

多數API希望某種形式的三角網格輸入,如單個三角形,索引三角網格,三角帶或三角扇等。無論哪種形式,數據的核心都是頂點,三角形不過是頂點合適的連接方式。從另一方面說,API并不需要超過三角形級別的數據。

API根據操作的不同接受不同的數據格式。(當我們說“API如何時”,是指整個圖形子系統,不論操作是由軟件完成還是硬件完成的。)

在簡化的情況下,頂點的數據一般分為三類:

(1)位置:描述頂點的位置,可以是3D向量或者有深度信息的2D屏幕坐標。如果采用3D向量,還需要用模型、視圖變換做向屏幕映射的工作。另一個骨骼動畫中使用的高級技術是skinning,頂點坐標由若干骨骼給出。

(2)光照和霧化:為了渲染,頂點一般都帶有色彩值,然后由這些值插值計算三角形中各點的顏色。我們可以指定這些值,或者讓API計算合適的光照值。如果讓API計算光照,通常要給出頂點法向量。無論如何,顏色均為RGBalpha的元組。如果直接指定顏色,經常使用一個32位的ARGB值,每分量8位,或者為每個分量使用一個單獨的值。如使用硬件霧化,還要指定各點的霧化強度,可以手動指定這個值,也可由API計算。

(3)紋理映射坐標:使用紋理映射時,每個頂點必須要有紋理映射坐標。最簡單的情形下,只需要紋理圖的2D坐標,常記為(u, v)。當使用多重紋理時,每個紋理都需要一個坐標。有時,可以階段式生成紋理坐標(如向表面投射一道光線)。或者,可以階段式地拷貝紋理坐標。在這種情況下,就可以不指定紋理坐標。

簡單的說,投送頂點并沒有一個簡單的格式。事實上,存在許多變種,如DirectX有可變頂點格式的概念,可使你自定義格式,以最方便的順序保存任何想要的信息。

有了這些之后,讓我們給出幾個C++結構,記錄上面提到的常用格式。

最常見的是3D坐標,表面法向量和紋理映射坐標,需要API進行光照的靜態紋理映射網格常使用這種格式。

    // Untransformed, unlit vertex
   
struct RenderVertex 
    {
        Vector3 p; 
// position
   
    Vector3 n; // normal
   
    float u,v; // texture mapping coordinates
   
};

另一種常用的格式,是用來顯示2D物體或HUD(head up display)的,含有屏幕坐標和預定義的光照。雖然數據是2D的,但仍然帶有某種形式的深度信息。

    // Transformed and lit vertex
   
struct RenderVertexTL 
    {
        Vector3 p;        
// screen space position and depth
   
    float w;        // 1/z
   
    unsigned argb;    // prelit diffuse color (8 bits per component – 0xAARRGGBB)
   
    unsigned spec;    // prelit specular color
   
    float u,v;        // texture mapping coordinates
   
};

最后一個例子是某種3D頂點,但不需要圖形API的光照引擎照亮,它自帶預定義的光照。這種格式經常用于特效,如爆炸、火焰、發光物等,以及調試用物體如包圍盒、路點、標記等。

    // Untransformed, lit vertex
   
struct RenderVertexL
    {
        Vector3 p;        
// position
   
    unsigned argb;    // prelit color (8 bits per component – 0xAARRGGBB)
   
    unsigned spec;    // prelit specular color
   
    float u,v;        // texture mapping coordinates
   
};

變換和光照

網格被提交到API之后,接下來的操作就是變換與光照(經常用T&L表示),圖形管道的該階段其實包含大量頂點級別的計算。基本上,所有頂點級別的計算都可以在本階段進行,但最常見的操作有:

(1)物體空間頂點位置變換到裁剪空間

(2)使用光照設置及法向量計算光照

(3)根據頂點位置計算頂點級霧濃度

(4)階段式產生紋理映射坐標

(5)在骨骼動畫中,用skinning技術計算頂點值

當然,根據不同的渲染上下文和提交的數據類型,某些操作不會執行。

當前圖形API給予T&L階段完全的靈活性。自第八版開始,DirectX支持頂點著色,其實就是運行在硬件上的小段代碼。這些代碼操作單個頂點,接受幾何提交階段發送來的任意多輸入,并產生任意多輸出到裁剪/光柵化階段。典型的輸入如頂點位置、法向量、光照前的顏色、紋理映射坐標等。可能的輸出包括頂點坐標轉換(攝像機空間或裁剪空間),Gourand著色,紋理坐標,霧濃度等。經常,輸入只是簡單地通過頂點著色,并映射成合適的輸出(如紋理映射坐標,預計算的光照),或頂點著色執行一些運算產生全新的輸出,如變換頂點位置、霧濃度、動態光照、或階段式生成紋理映射坐標。

 

變換到裁剪空間

模型空間到裁剪空間的轉換常以矩陣乘法實現。概念上,頂點經過一系列變換,如下所示:

(1)模型轉換到世界空間

(2)視圖變換將世界空間轉換到攝像機空間

(3)攝像機空間轉換到裁剪空間

乘法順序如下:

vclip = vmodel(Mmodel->world)(Mworld->camera)(Mcamera->clip)

實現中并沒有做三步乘法,實際上,變換矩陣是連接好的,頂點的變換不需要做三次矩陣乘法。根據硬件的設計和光照方法,可以將所有矩陣連接成兩個或一個矩陣。如果能夠訪問T&L硬件(如頂點著色),則可以直接施加精確的控制。如果不能,就必須依賴API讓它作所有的優化。

 

頂點光照

理想的情況應該使用Phong著色,先對表面法向量插值而后像素點計算光照。實際上,我們卻不得不多用Gourand著色,先計算頂點的光照而后插值生成多邊形中各點的光照。

當在頂點級計算光照時,無法直接用公式15.14,因為mdiff不是一個頂點級材質屬性,通常是由紋理定義這個值。為了使公式15.14更適合插值,必須進行變換以分離mdiff,同時,可以假設mamb等于mdiff

用上面的光照方程,就可以在頂點級插值計算光照。對于每個頂點,我們計算兩個值,vdiffvspecvdiff包含公式15.16的環境與散射分量,vspec包含鏡面分量:

上述值都是逐頂點計算,然后對整個三角形插值。于是對每個像素,光照公式如下:

如前所述,mspec經常為常量,但也可以用光澤圖定義。

應使用哪個坐標空間計算光照?可以在世界空間內進行。此時,頂點坐標、法向量都要轉換到世界空間,以進行光照計算,接著頂點坐標轉至裁剪空間。或者,可以將光照放到模型空間中計算,因為光照總比頂點較少,結果是總體減少了向量----矩陣乘法計算。第三種可能是在攝像機空間內計算。如果你不通過頂點著色直接控制T&L管道,API會為你做出這種選擇。

posted on 2008-03-11 08:58 lovedday 閱讀(1345) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜精品视频网站| 欧美波霸影院| 国产一区日韩二区欧美三区| 欧美激情在线有限公司| 亚洲国产裸拍裸体视频在线观看乱了中文| 久久久久久9| 欧美二区在线看| 欧美在线影院| 久久夜精品va视频免费观看| 亚洲国产精品一区二区www| 玖玖国产精品视频| 亚洲一区二区三区精品在线观看| 久久国产精品网站| 99精品热视频只有精品10| 免费短视频成人日韩| 久久精品人人做人人综合| 亚洲日本va午夜在线影院| 亚洲免费观看在线观看| 国内精品免费午夜毛片| 欧美日韩中文字幕综合视频 | 亚洲一级在线| 欧美高清视频在线| 亚洲精品少妇网址| 久久久国产91| 亚洲欧美中文字幕| 久久久久久久久久久一区| 欧美在线视频一区| 亚洲国产经典视频| 欧美国产一区二区三区激情无套| 蜜桃精品一区二区三区| 亚洲欧洲综合另类在线| 亚洲五月六月| 美女图片一区二区| 国产精品视频专区| 亚洲狠狠丁香婷婷综合久久久| 国产午夜一区二区三区| 国产一区二区精品久久91| 日韩亚洲欧美综合| 久久久久看片| 亚洲视频在线观看| 亚洲国产日韩欧美一区二区三区| 亚洲免费视频一区二区| 亚洲欧美日韩一区在线| 亚洲欧美日韩精品久久久久| 欧美一区二区视频免费观看| 国产精品每日更新| 99精品国产福利在线观看免费| 久久精品在线视频| 日韩视频一区二区| 亚洲欧洲精品一区二区精品久久久| 亚洲乱码国产乱码精品精可以看 | 亚洲精品欧美极品| 免费欧美视频| 亚洲国产乱码最新视频| 欧美一区二区三区免费观看视频| 日韩视频在线你懂得| 亚洲人体影院| 亚洲一区二区在线免费观看视频 | 亚洲一级一区| 激情欧美亚洲| 在线观看成人网| 亚洲国产精品尤物yw在线观看| 亚洲国产婷婷综合在线精品 | 久久久久国产精品www| 亚洲深夜激情| 亚洲伊人网站| 欧美精品一区在线发布| 羞羞视频在线观看欧美| 午夜综合激情| 99re在线精品| 老司机免费视频久久| 亚洲一区成人| 欧美激情麻豆| 日韩视频在线一区二区三区| 国内偷自视频区视频综合| 亚洲在线观看视频网站| 一区二区三区四区五区精品视频| 欧美中文字幕在线视频| 久久久水蜜桃| 亚洲国产另类精品专区| 欧美在线观看一区二区三区| 久久精品国产久精国产爱| 国产尤物精品| 蜜臀av在线播放一区二区三区| 女同一区二区| 一区二区三区久久精品| 国产亚洲一区二区在线观看| 久久精品一区二区| 亚洲激情影视| 亚洲欧美国内爽妇网| 国产欧美日韩高清| 嫩模写真一区二区三区三州| 一本色道久久88亚洲综合88| 久久精品91久久香蕉加勒比| 99这里有精品| 亚洲国产精品第一区二区| 欧美激情一区二区三区成人| 亚洲视频免费观看| 欧美福利视频一区| 久久久亚洲一区| 性伦欧美刺激片在线观看| 久久爱www久久做| 亚洲国产精品成人va在线观看| 亚洲免费一级电影| 一本色道久久综合狠狠躁篇的优点| 国产日韩在线视频| 国产精品人人做人人爽| 欧美三日本三级三级在线播放| 免费欧美网站| 欧美福利小视频| 能在线观看的日韩av| 欧美国产一区视频在线观看| 免费视频一区| 欧美日韩你懂的| 欧美日韩国产限制| 欧美日韩综合另类| 国产精品亚洲人在线观看| 国产精品实拍| 伊人久久大香线| 亚洲精品视频在线看| 日韩视频一区二区| 亚洲欧美另类在线| 久久一区视频| 亚洲日本va午夜在线影院| 中国成人亚色综合网站| 亚洲免费视频中文字幕| 久久久久久亚洲精品杨幂换脸 | 1024亚洲| 亚洲国产福利在线| 亚洲尤物在线视频观看| 久久视频国产精品免费视频在线| 久久永久免费| 9色国产精品| 美女久久网站| 韩国在线一区| 午夜精品999| 亚洲精品黄色| 久久噜噜亚洲综合| 亚洲在线观看视频网站| 女仆av观看一区| 好吊视频一区二区三区四区 | 亚洲精美视频| 欧美一区二区播放| 亚洲最新合集| 欧美精品18+| 亚洲日本中文字幕区| 嫩草国产精品入口| 久久免费国产精品| 91久久国产综合久久91精品网站| 久久男人av资源网站| 久久精品国产一区二区三区免费看| 国产精品美女一区二区| 亚洲女女女同性video| 亚洲一区二区三区涩| 国产欧美二区| 老司机一区二区| 暖暖成人免费视频| 亚洲精品在线三区| 99re这里只有精品6| 国产精品国产三级国产a| 亚洲欧美日韩精品久久亚洲区| 亚洲专区一二三| 欧美精品久久久久久久免费观看 | 国产精品a久久久久久| 一区二区三区你懂的| 亚洲欧美大片| 亚洲美女一区| 欧美一区二区三区久久精品 | 美女久久一区| 亚洲午夜电影| 久久精品国产69国产精品亚洲| 亚洲第一色在线| 99在线精品视频| 亚洲免费影院| 宅男噜噜噜66国产日韩在线观看| 亚洲综合999| 一本色道久久综合亚洲二区三区| 亚洲午夜久久久久久久久电影网| 激情综合亚洲| 性8sex亚洲区入口| 午夜电影亚洲| 国产精品福利av| 亚洲精品资源| 亚洲国产成人在线| 久久精品道一区二区三区| 亚洲免费视频网站| 欧美日韩另类国产亚洲欧美一级| 男同欧美伦乱| 亚洲日本一区二区| 狂野欧美性猛交xxxx巴西| 玖玖国产精品视频| 亚洲国产高清aⅴ视频| 久久久中精品2020中文| 欧美1区3d| 亚洲激情国产| 欧美啪啪成人vr| 亚洲素人一区二区| 欧美一区二区三区久久精品| 国产农村妇女精品| 久久综合久久综合久久综合|