• <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>
            posts - 16,  comments - 81,  trackbacks - 0

            課程概述

            如果您已經(jīng)通過前兩課教程進(jìn)展至,您現(xiàn)在可以開始了寫3D程序。 然而,3D編程不是像土匪斗惡霸那么簡單。它是嚴(yán)格的數(shù)學(xué),你必須了解三維數(shù)學(xué)概念,才能寫好3D程序。 不要擔(dān)心沒什么復(fù)雜的。 我保證您會(huì)在數(shù)學(xué)上花費(fèi)比學(xué)C + +更多的時(shí)間。

            這一課是理論課。 我們將在下一課中實(shí)踐我們的理論。 在這一課中我們將介紹坐標(biāo)系統(tǒng)它們?nèi)绾芜m用于Direct3D以及創(chuàng)造一個(gè)3D場景。

            三維坐標(biāo)系

            如果沒有基本的3D數(shù)學(xué)的理解,三維編程是不可能的。 而且我不是指大學(xué)數(shù)學(xué)都做一遍,我們理解三維坐標(biāo)的概念,它們是如何工作,以及可能用到的和各種東西。

            當(dāng)然,在你了解3D坐標(biāo)系統(tǒng)之前,您需要理解笛卡爾坐標(biāo)。

            直角坐標(biāo)系

            笛卡爾坐標(biāo)系統(tǒng)會(huì)使你更好的認(rèn)識(shí)二維坐標(biāo)系統(tǒng)。 換句話說,它是一個(gè)平面上確定一個(gè)點(diǎn)的位置的系統(tǒng)

            一個(gè)點(diǎn)是指沿軸的準(zhǔn)確位置。 如果我們想知道有多遠(yuǎn)的東西走了,我們通常給一個(gè)確切的數(shù)字,如“范跑跑跑了12米。” 12米,是沿著一個(gè)軸的距離。 我們說,0是這個(gè)的起點(diǎn),作為范跑跑,他的位置越來越遠(yuǎn)沿著這條軸線。 這是一個(gè)一維的坐標(biāo)系。

             
            圖片3.1 - 一維坐標(biāo)系

            當(dāng)我們看這情景,從側(cè)面圖片中,我們可以看到,作為范跑跑,他繼續(xù)朝著屏幕右側(cè)跑啊跑,他和那個(gè)'0'點(diǎn)的距離越來越遠(yuǎn)。 這個(gè)'0'的由來,因?yàn)?/span>范跑跑從這里開始跑(那間教室)。 在在向左的方向上,他的距離是一個(gè)負(fù)值

            但是,如果他時(shí)轉(zhuǎn)90度,不同的方向走會(huì)怎樣? 我們考慮一下實(shí)際情況,當(dāng)他向右跑了12米,沖出了教室,這時(shí)他來到了走廊,再往前就要跳下樓了,于是他只好左轉(zhuǎn)向著樓抵口跑。

             
            圖片3.2 - 直角坐標(biāo)系

            現(xiàn)在增加了一個(gè)軸,垂直軸我們稱其為Y軸。 首先在水平軸X軸,沿此軸范跑跑跑了12米,然后他又沿著Y軸的方向跑起來

            當(dāng)然,這種新的軸,水平軸一樣,也有一個(gè)起源。 他是范跑跑在X軸上跑路的終點(diǎn)因?yàn)樗?/span>開始沿著Y軸跑了。 請注意,在Y軸原點(diǎn)也給出了0值,并隨范跑跑在Y軸上的跑路Y軸愈來愈長。 

            所以,現(xiàn)在我們有兩個(gè)軸(X軸和Y軸),每個(gè)有其起點(diǎn)。 嗯,這就是笛卡爾形式的直角坐標(biāo)系。 現(xiàn)在,我們可以找到任何個(gè)上的點(diǎn)。 我們可以他離各軸原點(diǎn)的距離確定他的精確位置,所以我們可以說他是在(x,y)或(12,4),12是他在X軸上跑的距離,4是他在Y軸上跑的距離。這兩個(gè)數(shù)字稱為坐標(biāo),一個(gè)點(diǎn)離坐標(biāo)原點(diǎn)((),0)有多遠(yuǎn)。

            三維坐標(biāo)系

            其實(shí),三維坐標(biāo)系,只不過是我們剛剛討論的情況的拓展。 假如我們把直角坐標(biāo)系,并添加了第三軸(Z軸)上運(yùn)行垂直于X和Y軸,我們將有三維坐標(biāo)。 這里說明了這一點(diǎn)。


            圖片3.3 - 三維坐標(biāo)系

            笛卡爾坐標(biāo)一樣,三維坐標(biāo)既可以是正值也可以是負(fù)值取決于點(diǎn)處在改軸的哪個(gè)方向。 然而直角坐標(biāo)不一樣的是,三維坐標(biāo)是三個(gè)數(shù)字,例如:(的x,y,z)或(12,4,15)。 這表明在范跑跑老師在十五米的高空(6樓。 它也可以寫成(12,4,-15)。 也許這意味著他被埋在了煤窯

            三角幾何

            現(xiàn)在讓我們討論三維坐標(biāo)如何應(yīng)用到游戲和游戲編程。 如果三維點(diǎn)坐標(biāo)系統(tǒng)中的一個(gè)點(diǎn)代表一個(gè)在空間中的點(diǎn),那么我們可以通過一組這樣的點(diǎn)最終生成一個(gè)三維模型。 當(dāng)然,這么多點(diǎn)的設(shè)置將在內(nèi)存中占用的空間很大,于是一種更方便,更快捷的方式就出現(xiàn)了,那就是設(shè)置使用三角形。

            任何跟數(shù)學(xué)相關(guān)的領(lǐng)域三角形是一個(gè)非常有用的形狀它們可以用于測量圓,他們可以用來加強(qiáng)建筑物,它們可以被用來創(chuàng)建3D圖像。 究其原因,我們將要使用三角形是因?yàn)槿切慰梢?/span>組成幾乎任何形狀,比如下圖的正方體和球就是由一個(gè)個(gè)三角形構(gòu)成



            圖片3.4 - 從三角形制作出來的模型

            由于三角形在創(chuàng)建三維模型方面的各種優(yōu)越性,Direct3D被設(shè)計(jì)為完全圍繞三角形并通過三角形組成各種形狀。為了建立一個(gè)三角形,我們需要使用一種叫做頂點(diǎn)集的東西

            頂點(diǎn)集是由頂點(diǎn)組成的一個(gè)頂點(diǎn)定義為一個(gè)在三維空間中的確切的點(diǎn)。 它包括三個(gè)值x,y和z 在Direct3D中,我們還有這一點(diǎn)的各種屬性。 因此,我們擴(kuò)的定義是指“三維空間中的精確點(diǎn)屬性和位置”。

            三角形是由三個(gè)順時(shí)針地在您的程序中定義頂點(diǎn)。 當(dāng)編碼完成后,這三個(gè)頂點(diǎn)形成一個(gè)平坦的可以自由旋轉(zhuǎn),添加質(zhì)感,定位和修改表面。



            圖片3.5 - 通過頂點(diǎn)集創(chuàng)三角形

            在圖像顯示的三角形3.5三個(gè)頂點(diǎn)

            X = 0,Y = 5Z = 1
            X= 5,Ÿ = -5Z = 1
            X = 5,Ÿ = -5Z = 1

            你會(huì)發(fā)現(xiàn),上述所有頂點(diǎn)的Z都等于-1。 這是因?yàn)槲覀儾皇窃谡務(wù)撘粋€(gè)3D對象,而是在談?wù)撘粋€(gè)三角形這是一個(gè)二維物體。 我們當(dāng)然可以改變這個(gè)Z值,但這并不會(huì)產(chǎn)生什么實(shí)質(zhì)的影響

            為了創(chuàng)建一個(gè)3D對象,我們將需要組合多個(gè)三角形。 在上面的圖3.4你可以看到如何用三角形組合出其他形狀。 比如說這在個(gè)3-4里,立方體個(gè)就是由兩個(gè)簡單的三角形組成。 這個(gè)立方體的每個(gè)面都是這樣組成的

            然而,定義三維坐標(biāo)游戲中的每個(gè)三角形多次不僅僅是愚蠢,這簡直就是愚蠢!。  這里還有沒有必要為涉及(你會(huì)看到我在下一課的意思)。

            而不是定義每一個(gè)游戲中的每一個(gè)三角形的角落,你需要做的就是創(chuàng)建一個(gè)頂點(diǎn),包含每一個(gè)頂點(diǎn)的坐標(biāo)和信息,以及他們進(jìn)去的順序

            基元

            基元(primitives,又稱為圖元或者原語) ,是3D環(huán)境中的一個(gè)單一的元素,可以是一個(gè)三角形,一條線,一個(gè)點(diǎn),或其他隨便什么。 以下是基元可以被合并以創(chuàng)建三維對象的方法列表

            1.  點(diǎn)列表 Point Lists
            2.  線列表 Line Lists
            3.  線帶 Line Strips
            4.  三角形列表 Triangle Lists
            5.  三角形帶Triangle Strips
            6.  三角扇形 Triangle Fans 

            1. 點(diǎn)列表 
            一個(gè)點(diǎn)列是一組為在屏幕上顯示的頂點(diǎn)的列表。 它們可用于渲染3D星空,創(chuàng)虛線,顯示在小地圖上的位置。 圖片3.6說明了點(diǎn)列是如何顯示在屏幕上。


            圖片3.6 - 一個(gè)點(diǎn)列(6元)

            2. 線列表

            線列表是一頂點(diǎn)的列表其中奇數(shù)的頂點(diǎn)和下一個(gè)頂點(diǎn)會(huì)連成線段。 這些可用于各種效果,包括三維網(wǎng)格,暴雨,航點(diǎn)線,等等。 圖片3.7說明了線列如何在屏幕上示(這是和以前相同的一組頂點(diǎn))。


            圖片3.7 - A線一覽(3基元)

            3. 線帶

            線帶是類似于線列表不同之處在于它所有的頂點(diǎn)(不分奇數(shù)還是偶數(shù))都和下一個(gè)頂點(diǎn)用線段連起來。 這對創(chuàng)建線框模型非常有用,如線框地形,草片,以及其他不是基于模型的對象。 這對于調(diào)試程序也是非常有用的。 圖片3.8說明了如何線帶是在屏幕上顯示。


            圖片3.8 - A線地帶(5基元)

            4.三角形列表

            一個(gè)三角形列把每三個(gè)頂點(diǎn)組一個(gè)單一的獨(dú)立的三角形頂點(diǎn)列表。 這可以在諸如力,爆炸效果,以及把對象拼湊在一起,圖3.9說明了三角形列表如何在屏幕上顯示。


            圖片3.9 - A線列表(2基元)

            5.三角形帶

            一個(gè)三角形地帶是一個(gè)頂創(chuàng)建一系列互相連接的三角形的頂點(diǎn)列表,。 這是三維圖形處理最常用的方法。 這些大多是用于創(chuàng)建你的游戲的3D模型。 圖片3.10三角說明了是如何顯示在屏幕上。請注意,前三個(gè)頂點(diǎn)創(chuàng)建一個(gè)三角形,然后下個(gè)頂點(diǎn)和它的前兩個(gè)頂點(diǎn)構(gòu)成一個(gè)三角形。


            圖像3.10 - 一個(gè)三角地帶(4圖元)

            6。 三角扇形

            三角扇形類似于三角形帶,不同的是所有三角形共用一個(gè)頂點(diǎn)。 圖3.11:


            圖像3.11 - 三角形扇(4圖元)

            一個(gè)基元的問題

            繪制基元的時(shí)候有一個(gè)小問題出現(xiàn)了,那就是你的三角形只有一面要顯示,但是系統(tǒng)畫了兩面。 沒錯(cuò)它的確可以顯示兩面,但通常一個(gè)模型是完全封閉的,你看不到它的內(nèi)部。 如果模型是完全封閉的,每個(gè)三角形只有一面需要繪制。 畢竟,繪制兩面要多花費(fèi)一倍的時(shí)間。 下面你會(huì)看到這個(gè)繪制兩面和一面的區(qū)別

            一個(gè)三角形基元只有當(dāng)其頂點(diǎn)是順時(shí)針順序給出時(shí)才能繪制。 如果您翻轉(zhuǎn)它周圍,它成為逆時(shí)針,因此不會(huì)顯示。


            圖像3.12 - 基元只有順時(shí)針時(shí)可見

            有一個(gè)簡單的方法(雖然當(dāng)你進(jìn)入較大游戲時(shí)這會(huì)很繁瑣,),那就是兩面都繪制,令人原始順時(shí)針和其他反時(shí)針方向。


            圖像3.13 - 兩面都繪制時(shí)兩種方式都可見

            顏色

            色彩是3D編程中一個(gè)相當(dāng)簡單的部分。 然而,即使你彩色光譜和光物理學(xué)非常熟悉,這只是讓你更容易地知道Direct3D不完全遵循這個(gè)宇宙的規(guī)律。 那樣只能是圖形硬件和CPU的噩夢。太多了,所以我們只給圖形這樣的矩陣,并創(chuàng)建我們自己的規(guī)則以便夠?qū)λM(jìn)行處理

            光,當(dāng)然是粒子的波,使您可以看到身邊各種對象之間的區(qū)。 Direct3D運(yùn)用圖形硬件進(jìn)行各種數(shù)學(xué)算法虛擬出這一點(diǎn)。 然后,圖像就會(huì)顯示在屏幕上。 在這一節(jié)我們將介紹如何Direct3D 虛擬我們在自然看到的光。

            減法色 VS加法色

            在您教育的早些時(shí)期,你可以學(xué)到的原色是紅色,藍(lán)色和黃色。 這不是真正的情況。 顏色實(shí)際上是洋紅,青色和黃色。 以及為什么沒用的技術(shù)細(xì)節(jié)? 要理解這一點(diǎn),你必須了解減法色加法色的概念。

            這兩種顏色之間的區(qū)別在于是否顏色是指光的顏色或一個(gè)物體的顏色。 減色是一個(gè)對象的顏色,并有原色洋紅,青色和黃色。 加色是光的顏色,有紅,綠,藍(lán)三原

            在光束越多顏色添加進(jìn)來就越接近白色。 所有的顏色加在一起就成了白色,因此它被稱為加色。


            圖像3.14 - 加法色顏色越多越

            上面你可以看到三原光疊加起來就成了白色。 不過,如果你仔細(xì)看,你還會(huì)看到當(dāng)你把兩種原光疊加起來你會(huì)得到一個(gè)減法色的原色(洋紅,青色或者黃色)。 如果我們仔細(xì)看看這些減法色,我們將看到這是為什么。

            減法色基本上是和加法色相反的。 它們不是一個(gè)表面反射的光疊加構(gòu)成。 例如,一個(gè)紅色物體,被白色的光照亮會(huì)反映紅光是因?yàn)樗?/span>吸收綠色和藍(lán)色光。 如果你看上面的圖3.14,你會(huì)看到綠色和藍(lán)色的結(jié)合-----青色,所以青色從白光中減去結(jié)果就顯示紅色


            圖3.15 - 減法色減到最后就成了黑色

            在圖形編程,您將始終使用(紅,綠,藍(lán))三元光的添加色,因?yàn)轱@示器是自發(fā)。 而親手建立一個(gè)3D引擎會(huì)有助于你理解是什么使物體的顏色看起來這樣或者那樣

            順便說一下,這就是為什么你會(huì)發(fā)現(xiàn)屏幕上紅色,綠色和藍(lán)色而打印出來就成了洋紅,青色和黃色,

            如果你想深入地研究顏色,下面是一個(gè)網(wǎng)站色彩和光物理學(xué)有比較徹底的研究。 如果你想到了未來DirectX 10的次世代游戲,我會(huì)認(rèn)真地建議你學(xué)好顏色。 這里還有更多呢意想不到的東西,這會(huì)使得在一個(gè)大的游戲引擎很大的改觀

            總之,請猛擊這個(gè)鏈接: http://www.byronc.com/art_color.shtml

            Alpha通道

            Alpha通道在紅綠藍(lán)三原光之外一個(gè)額外的通道透明通道。 當(dāng)你將透明通道引入你的顏色設(shè)置,圖形會(huì)顯示半透明,讓您通過物體看到其背后的其他物體。 這在游戲中會(huì)是一個(gè)很有用的功能比如說美女的紗衣(我邪惡了),以及其他許多有用的東西。 我敢肯定你一定會(huì)用到它

            設(shè)置32位色彩

            Direct3D的色彩一個(gè)32位變量的組成,它存儲(chǔ)所有的信息。 這包括(簡稱RGB)和Alpha的值。 這些每一個(gè)被稱為通道 ,每個(gè)通道占用8位,如下圖


            圖像3.16 - 顏色bit布局

            以下是定義上述的顏色代碼:

            DWORD Color_A = 0xff00ff00;
            DWORD Color_B 
            = 0x88ff00cc;

            還有兩種方法創(chuàng)建這些顏色,我們需要插入每個(gè)通道

            DWORD Color_A = D3DCOLOR_XRGB(02550);
            DWORD Color_B 
            = D3DCOLOR_ARGB(1362550204);

            函數(shù)D3DCOLOR_ARGB()返回一個(gè)包含紅綠藍(lán)以及透明通道的信息的DWORD。 如果你不想使用透明,那么你可以使用D3DCOLOR_XRGB(),它會(huì)用255填充Alpha通道的值

            如果你想看到這樣的一個(gè)例子,請從第1課和2課中找出清除屏幕使用D3DCOLOR_XRGB()函數(shù)的例子。

            光與色

            我不打算關(guān)于光這的每一點(diǎn)都講到。 我留一些放在以后的課。 現(xiàn)在,我只是想介紹下基本因?yàn)樵谔砑庸饩€進(jìn)你的程序之前你必須對它有部分的了解

            自然光,是一個(gè)非常復(fù)雜的數(shù)學(xué)說法。 當(dāng)陽光普照,幾乎一切都是由它點(diǎn),即使它沒有照到太多我們能看見的東西。 這是因?yàn)?/span>光會(huì)向周圍地區(qū)進(jìn)行數(shù)千次反射,無論是陽光普照或陰天這就是漫反射。 為了進(jìn)一步增加色差,由于陽光穿越的空間,有一部分是反映灰塵粒子,這樣的漫反射是無法計(jì)算了。 即使電腦可以計(jì)算出這一切,它不能實(shí)時(shí)運(yùn)行。

            Direct3D使用的系統(tǒng)致力于模擬真實(shí)環(huán)境光。 要做到這一點(diǎn),它光分解成三個(gè)類型----漫射光 ,環(huán)境光 鏡面反射三者結(jié)合在一起使得結(jié)果會(huì)接近于實(shí)際光。 

            漫射光

            漫射光的間接照在物體上的光。 如下圖這個(gè)球就是只用漫射光照明


            圖3.17 - 漫反射

            稍后,您將了解光源。 這個(gè)球是來自左一個(gè)點(diǎn)光源照亮。 球離光源越遠(yuǎn)得到的光照就越少

            環(huán)境光

            環(huán)境光被認(rèn)為是無處不在的光。 不同漫射光的是,它沒有來源,如果單獨(dú)使用會(huì)出現(xiàn)一個(gè)圈(因?yàn)樗械牟考?/span>被照)。 這個(gè)球和一個(gè)完全一樣,但這次添加了環(huán)境光照在黑暗部分


            圖像3.18 - 漫和環(huán)境照明

            鏡面光

            這有時(shí)也被稱為鏡面高亮,因?yàn)樗怀龇从沉艘粋€(gè)反光的顏色對象。 這個(gè)球極受到漫射光和環(huán)境光照明,具有高光使它看起來更加真實(shí)。


            圖像3.19 - 漫射,照明光和鏡面光

            綜述

            現(xiàn)在,你應(yīng)該已經(jīng)了解三維的基本概念,以及它是如何應(yīng)用到游戲編程。 現(xiàn)在讓我們實(shí)踐這一切的理論。 在下一課中,你將建立一個(gè)基本的三角形。

            下一課:畫一個(gè)三角形

            英文原文:http://www.directxtutorial.com/tutorial9/b-direct3dbasics/dx9B3.aspx 

            Translate By 王大寶(OneDouble.net)


            鑒于中英文混排看著累,從這集開始,不再采用中英文對照排版,想看英文原版的朋友請移步至原帖,謝謝
            posted on 2010-12-27 20:02 叫我老王吧 閱讀(2731) 評(píng)論(5)  編輯 收藏 引用 所屬分類: DierectX

            FeedBack:
            # re: [翻譯]Direct3D Tutrial-03 3D概念[未登錄]
            2010-12-28 16:52 | Jcily
            不錯(cuò),頂了  回復(fù)  更多評(píng)論
              
            # re: [翻譯]Direct3D Tutrial-03 3D概念
            2010-12-29 22:25 | lgz
            支持了  回復(fù)  更多評(píng)論
              
            # re: [翻譯]Direct3D Tutrial-03 3D概念
            2010-12-30 21:00 | 叫我老王吧
            @Jcily
            @lgz
            謝謝支持  回復(fù)  更多評(píng)論
              
            # re: [翻譯]Direct3D Tutrial-03 3D概念
            2011-02-10 18:01 | Tedlist
            樓主加油,你翻譯的那個(gè)網(wǎng)站。是個(gè)收費(fèi)的。再往后看就要收錢了。郁悶!  回復(fù)  更多評(píng)論
              
            # re: [翻譯]Direct3D Tutrial-03 3D概念
            2011-02-18 22:36 | 叫我老王吧
            @Tedlist
            是是是,樓主我過完年回來繼續(xù)翻譯啦  回復(fù)  更多評(píng)論
              
            <2010年12月>
            2829301234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            常用鏈接

            留言簿(4)

            隨筆分類

            隨筆檔案

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            欧洲成人午夜精品无码区久久| 久久久无码精品亚洲日韩按摩| 亚洲AV无码久久精品成人| 久久精品国产一区| 久久久久精品国产亚洲AV无码| 久久亚洲精品视频| 欧美黑人激情性久久| 久久99精品国产99久久6| 国内精品伊人久久久久av一坑| 麻豆久久久9性大片| 国产成人99久久亚洲综合精品| 欧美丰满熟妇BBB久久久| 亚洲综合久久久| 欧美日韩精品久久久免费观看| 国产精品免费久久久久影院| 国内精品久久久久伊人av| 午夜精品久久久久久中宇| 久久久久亚洲精品日久生情| 欧美粉嫩小泬久久久久久久 | 少妇久久久久久被弄高潮| 久久久久亚洲av毛片大| 中文字幕亚洲综合久久2| 精品久久久久久亚洲精品 | 久久久久国色AV免费观看| 国产一区二区精品久久| 久久ZYZ资源站无码中文动漫| 久久久www免费人成精品| 狠狠色丁香婷婷久久综合| 久久有码中文字幕| 色综合久久中文字幕综合网| 久久精品亚洲男人的天堂| 国产成人香蕉久久久久| 91精品婷婷国产综合久久| 国产福利电影一区二区三区久久老子无码午夜伦不 | 无码伊人66久久大杳蕉网站谷歌 | 久久99国产精品久久99小说 | 久久久久18| 四虎国产精品成人免费久久| 日日狠狠久久偷偷色综合96蜜桃 | 国产巨作麻豆欧美亚洲综合久久| 久久综合久久综合九色|