DirectX 龍書 畫鏡子 1

2021-09-08 02:29:28 字數 1953 閱讀 9758

首先把一些概念強化一下

各種buffer,dx裡面有targetbuffer,zbuffer和stencilbuffer,在建立device時有乙個引數是d3dpresent_parameters結構物件,這個結構裡面有一些欄位在此提出來再記一下

d3dpresent_parameters d3***;

d3***.backbufferformat = d3dfmt_unknown;    

// 這個字段值是表示要使用什麼格式的targetbuffer,targetbuffer儲存的是顏色值,所以它的格式一般是說明argb各佔多少位,詳細請看msdn

d3***.enableautodepthstencil = true; 

// 這個字段表示打不打算在程式中使用zbuffer和stencilbuffer,由於這兩個buffer是使用同一段記憶體,所以這個引數就表示,要麼兩個都用,要麼兩個都不用(後面還可以單獨設定要不要使用某乙個)

// 再記一下,targetbuffer就是backbuffer,後面,還有msdn上面都說"畫"backbuffer,其實就是targetbuffer.

// zbuffer & stencilbuffer 還要設定到底要不要在程式中使用,而backbuffer卻不要設定,因為它一定是要使用的,在顯示器上顯示的東東就是backbuffer裡面的內容

d3***.autodepthstencilformat = d3dfmt_d24s8;    

// zbuffer & stencilbuffer共用一段內容,這個字段就是設定zbuffer & stencilbuffer各佔多少個位元組

device->clear()函式的第三個引數就要明確指定要清理哪些buffer.

下面開始畫東西.

g_pd3ddevice->clear(0, null, d3dclear_target | d3dclear_zbuffer | d3dclear_stencil, d3dcolor_xrgb(200,200,200), 1.0f, 0);

g_pd3ddevice->beginscene();

dx是在這個地方畫東西的

g_pd3ddevice->endscene();

g_pd3ddevice->present(null, null, null, null);

先想像一下,有三個面

第乙個麵叫backbuffer,這個面的大小與你的顯示器一樣大(大小自己可以設定),這個面的"厚度"為32位(即argb佔的位數)

第二個麵叫zbuffer,這個面的大小與backbuffer一樣大,這個面的"厚度"為24位(d3dfmt_d24s8,即d24),這個面是用來表示乙個畫面中的物體的層次感,比如,你覺得鏡子裡面的東西是在鏡子"裡面的",而陰影是在地的"上面的"。

第三個麵叫stencilbuffer,這個面的大小也是與backbuffer一樣大,這個面的"厚度"為8位(d3dfmt_d24s8,即s8),這個面是用來控制,要將哪些畫素畫到backbuffer中,哪些畫素不必畫到backbuffer中去。

看畫影象部分

clear()函式將指定的buffer用指定的值來"清理"(我更喜歡說,用指定的值來填充),第4、5、6個引數分別是指用什麼樣的值來填充backbuffer、zbuffer、stencilbuffer

backbuffer的值就是背景顏色值,zbuffer的值是[0 - 1]的區間值,0表示在"表面"(比如影子),1表示在最裡面(比如說鏡子裡面的東西)

stencilbuffer,到目前為止,我用到的就是0,1,就是用來作標記

下面呼叫beginscene()表示開始"畫"影象

畫完影象後呼叫endscene()表示這個buffer(backbuffer & zbuffer & stencilbuffer)畫完了

下面呼叫present()把這個畫完的buffer送到顯示器顯示,並將另乙個buffer"轉換"到當前,下一迴圈,準備畫下一幀影象。

今天先寫到這裡,下班了。

DirectX學習 數學基礎 1

向量的基本運用 建立3d向量 typedef struct d3dxvector3 public d3dvector d3dxvector3 const float d3dxvector3 const d3dvector d3dxvector3 const d3dxfloat16 d3dxvecto...

DirectX 渲染 學習筆記 1

在2d遊戲中乙個遊戲的渲染部分一般有如下共同的資訊 紋理貼圖和精靈 精靈是一種特殊的物件型別.一般是出現在螢幕上的2d和3d圖形元素。在2d遊戲中,精靈不僅僅表示角色,還可以表示背景,遊戲物件,和任何單個的元素,甚至是能夠繪製出來的項 頂點 定義在遊戲圖形中的形狀其實是一系列點以及它們之間相互連線的...

DirectX9 0 入門手冊 1

這一章我先不寫有關dx的東西,我先從最基本的視窗建立講起,然後再慢慢講解使用dx的一些內容.我寫這個指南的主要目的是為了學習。我希望自己可以通過寫這個指南更快地學會 directx 下面正式開始吧,先講視窗類,建立視窗,銷毀視窗,視窗訊息處理函式.視窗類 wndclass struct wndcla...