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

正文內(nèi)容

多媒體技術(shù)之directx編程入門(編輯修改稿)

2024-08-09 22:10 本頁面
 

【文章內(nèi)容簡介】 S_ALPHATESTENABLE(允許α測試)、D3DRS_CULLMODE(剔除模式)、D3DRS_FOGENABLE(允許霧化)、D3DRS_LIGHTING(光照)、D3DRS_DITHERENABLE(允許抖動)、……。例如:g_pd3dDeviceSetRenderState( D3DRS_CULLMODE, D3DCULL_NONE )。 // 關(guān)閉背面剔除g_pd3dDeviceSetRenderState( D3DRS_ZENABLE, TRUE )。 // 允許Z緩沖g_pd3dDeviceSetRenderState( D3DRS_LIGHTING, FALSE )。 // 關(guān)閉光照 創(chuàng)建場景三維場景是由若干物體(幾何對象)構(gòu)成的,復雜的幾何對象由多個簡單的圖元(點、線、三角形和多邊形等)所組成,而圖元(primitive)又是頂點(vertex)的集合。圖1312 3D圖元表面的三角網(wǎng)格3D圖元一般是一個多面體,通常用其表面的三角網(wǎng)格來表示,參見圖1312。所以最基本的圖元是三角形和頂點。創(chuàng)建場景中的幾何對象,等價于建立表示該幾何體的頂點集合。因此,必須先定義自己的頂點結(jié)構(gòu)并創(chuàng)建頂點緩沖區(qū),然后在鎖定頂點緩沖區(qū)后,再通過給頂點緩沖區(qū)中的各頂點結(jié)構(gòu)賦值來構(gòu)造幾何對象,最后解鎖頂點緩沖區(qū)。l 定義頂點結(jié)構(gòu)Direct3D使用一種FVF(Flexible Vertex Format可變頂點格式)結(jié)構(gòu)來定義頂點,以滿足用戶的不同需要。在FVF結(jié)構(gòu)CUSTOMVERTEX中,可以包含描述頂點的位置、RHW(reciprocal homogeneous w倒數(shù)齊次w,表示已變換頂點位置的齊次坐標w分量)、法向、大小和(漫射、鏡面反射)顏色等字段,具體內(nèi)容由用戶根據(jù)需要自己來確定,但是各字段之間的相對順序不能改變。其中,頂點的位置和法向等字段,一般為三維點向量,可以用Direct3D的擴展三維向量結(jié)構(gòu)D3DXVECTOR3來表示:typedef struct D3DXVECTOR3 { FLOAT x。 FLOAT y。 FLOAT z。} D3DXVECTOR3。其中的FLOAT為float的typedef類型。而顏色一般采用DWORD的typedef定義類型D3DCOLOR。例如: struct CUSTOMVERTEX { // 含位置、法向量和顏色的自定義頂點結(jié)構(gòu) D3DXVECTOR3 position。 // 未變換頂點的3D位置 D3DXVECTOR3 normal。 // 頂點的表面法向量 D3DCOLOR color。 // 顏色 }。 或:struct CUSTOMVERTEX { // 含位置、顏色和紋理坐標的自定義頂點結(jié)構(gòu) D3DXVECTOR3 position。 // 未變換頂點的3D位置 D3DCOLOR color。 // 顏色 FLOAT tu, tv。 // 紋理坐標}。 或:struct CUSTOMVERTEX { // 含位置齊次坐標和顏色的自定義頂點結(jié)構(gòu) FLOAT x, y, z, rhw。 // 已變換頂點的3D位置 DWORD color。 // 顏色 }。用戶在定義了自己的頂點結(jié)構(gòu)類型后,還需要定義一個對應的(宏)常量,來描述該結(jié)構(gòu)的字段內(nèi)容。該(宏)常量由若干表示頂點格式的標志位符號常量(參見表131)的位或組合而成。表131 頂點數(shù)據(jù)格式標志符號常量值數(shù)據(jù)類型描述D3DFVF_XYZ0x002float, float, float未轉(zhuǎn)換的頂點坐標D3DFVF_XYZRHW0x004float, float, float, float已轉(zhuǎn)換的頂點坐標D3DFVF_XYZB1~50x006/8/a/c/e1 3個float含權(quán)重i的頂點坐標D3DFVF_XYZW0x4002float, float, float, float已轉(zhuǎn)換和裁剪的頂點坐標D3DFVF_NORMAL0x010float, float, float頂點的法線D3DFVF_PSIZE0x020float點大小D3DFVF_DIFFUSE0x040DWORD(ARGB)漫射顏色D3DFVF_SPECULAR0x080DWORD(ARGB)鏡面反射顏色D3DFVF_TEX0~80x0~8001 4個floati重紋理映射例如:define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE)或:define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1)或:const DWORD FVF = (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)。l 創(chuàng)建頂點緩沖區(qū)在定義了頂點結(jié)構(gòu)后,就可以創(chuàng)建頂點緩沖區(qū)了,這可以由IDirect3DDevice9接口的CreateVertexBuffer方法來完成:HRESULT CreateVertexBuffer( // 成功返回D3D_OK(= 0) UINT Length, // 緩沖區(qū)的字節(jié)大小,一般為 n*sizeof (CUSTOMVERTEX) DWORD Usage, // 緩沖區(qū)用法的附加屬性標志,一般為0 DWORD FVF, // 頂點結(jié)構(gòu)格式常量 D3DPOOL Pool, // 緩沖區(qū)所在的內(nèi)存池類型(D3DPOOL枚舉值) IDirect3DVertexBuffer9** ppVertexBuffer, // 返回被創(chuàng)建的頂點緩沖區(qū)指針 HANDLE* pSharedHandle // 保留,設(shè)為NULL)。其中,內(nèi)存池類型D3DPOOL枚舉的定義為:typedef enum D3DPOOL { // 內(nèi)存池類型枚舉 D3DPOOL_DEFAULT = 0, // AGP存儲器或顯存 D3DPOOL_MANAGED = 1, // AGP存儲器或顯存,且在系統(tǒng)內(nèi)存中還有一份拷貝 D3DPOOL_SYSTEMMEM = 2, // 系統(tǒng)內(nèi)存 D3DPOOL_SCRATCH = 3, // 系統(tǒng)內(nèi)存中的臨時池 D3DPOOL_FORCE_DWORD = 0x7fffffff // 未使用(強制該枚舉被編譯成32位)} D3DPOOL。例如:g_pd3dDeviceCreateVertexBuffer( 100 * sizeof (CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, amp。g_pVB, NULL )?;颍? g_pd3dDeviceCreateVertexBuffer( 3 * sizeof (CUSTOMVERTEX), 0, FVF, D3DPOOL_MANAGED, amp。g_pVB, NULL )。l 構(gòu)造點集創(chuàng)建三維場景中的幾何對象,需要計算和構(gòu)造描述該幾何對象的點集。具體做法是:先定義一個頂點指針(用于操作頂點數(shù)組);再調(diào)用Lock方法來獲取頂點緩沖區(qū)的首地址(賦值給頂點指針),并鎖定該區(qū)域僅供當前操作使用;然后利用該頂點指針,將計算的頂點結(jié)構(gòu)值填入頂點緩沖區(qū),從而構(gòu)造出幾何對象;最后調(diào)用Unlock方法解鎖頂點緩沖區(qū)。IDirect3DVertexBuffer9接口的Lock和Unlock方法的定義為:HRESULT Lock( // 成功返回D3D_OK(= 0) UINT OffsetToLock, // 鎖定的偏移地址 UINT SizeToLock, // 鎖定的字節(jié)數(shù) VOID ** ppbData, // 返回被鎖定的緩沖區(qū)頭的指針 DWORD Flags // 鎖定方式標志,可為0或下列符號常量的組合: // D3DLOCK_DISCARD、D3DLOCK_NO_DIRTY_UPDATE、// D3DLOCK_NOSYSLOCK、D3DLOCK_READONLY、// D3DLOCK_NOOVERWRITE)。HRESULT Unlock()。 // 成功返回D3D_OK(= 0)例如:CUSTOMVERTEX* pVertices。g_pVBLock( 0, 0, (void**)amp。pVertices, 0 )?!?// 給頂點緩沖區(qū)中的各頂點結(jié)構(gòu)賦值(構(gòu)造幾何對象的點集)g_pVBUnlock()。 矩陣變換描述單個物體(3D幾何對象)一般采用的是本地相對坐標。因此,在渲染之前,需要將它們都轉(zhuǎn)換為描述場景的統(tǒng)一世界空間(world space)坐標,這對應于世界矩陣變換。為了將三維場景顯示在二維屏幕上,還需要選擇一個觀察點(眼睛/攝像機)和觀察角度(方向/坐標)(對應于觀察坐標矩陣變換),并將3D場景投影到一個2D平面(屏幕)上(對應于投影矩陣變換),還要將超出屏幕的部分去掉(裁剪),也可以將場景投射到屏幕的某個矩形區(qū)域中(視口縮放)。參見圖1313。世界變換觀察變換投影變換裁剪與視口縮放頂點光柵器變換引擎圖1313 Direct3D的變換引擎下面依次對這些變換加以介紹,這需要首先介紹Direct3D中的矩陣定義和變換方法。l 矩陣與變換在Direct3D中,定義了矩陣(matrix)結(jié)構(gòu)D3DXMATRIX :typedef struct D3DXMATRIX { // 矩陣結(jié)構(gòu) struct { // 注意,C/C++的變量名可以下劃線開頭(但不能以數(shù)字開頭) FLOAT _11。 FLOAT _12。 FLOAT _13。 FLOAT _14。 FLOAT _21。 FLOAT _22。 FLOAT _23。 FLOAT _24。 FLOAT _31。 FLOAT _32。 FLOAT _33。 FLOAT _34。 FLOAT _41。 FLOAT _42。 FLOAT _43。 FLOAT _44。 }。} D3DXMATRIX。對應于4*4的浮點矩陣:在Direct3D中,還定義了一個對Intel P4 CPU運算進行了優(yōu)化的16字節(jié)對齊的矩陣結(jié)構(gòu)(從D3DXMATRIX派生的C++結(jié)構(gòu)對象):typedef struct _D3DXMATRIXA16 : public D3DXMATRIX { // 16字節(jié)對齊矩陣結(jié)構(gòu) _D3DXMATRIXA16()。 _D3DXMATRIXA16( CONST FLOAT * f)。 _D3DXMATRIXA16( CONST D3DMATRIXamp。 m)。 _D3DXMATRIXA16( FLOAT _11, FLOAT _12, FLOAT _13, FLOAT _14, FLOAT _21, FLOAT _22, FLOAT _23, FLOAT _24, FLOAT _31, FLOAT _32, FLOAT _33, FLOAT _34, FLOAT _41, FLOAT _42, FLOAT _43, FLOAT _44 )。 void* operator new(size_t s)。 void* operator new[](size_t s)。 void operator delete(void* p)。 void operator delete[](void* p)。 struct _D3DXMATRIXA16amp。 operator=(CONST D3DXMATRIXamp。 rhs)。} _D3DXMATRIXA16。typedef D3DX_ALIGN16 _D3DXMATRIXA16 D3DXMATRIXA16。Direct3D還提供了若干全局矩陣函數(shù),如:D3DXMATRIX * D3DXMatrixIdentity( D3DXMATRIX * pOut )。 // 創(chuàng)建單位矩陣FLOAT D3DXMatrixDeterminant(CONST D3DXMATRIX * pM)。 // 返回矩陣的行列式值D3DXMATRIX * D3DXMatrixInverse( // 計算逆矩陣 D3DXMATRIX * pOut, // 結(jié)果矩陣 FLOAT * pDeterminant, // 行列式值,可置為NULL CONST D3DXMATRIX * pM // 原矩陣)。D3DXMATRIX * D3DXMatrixMultiply( // 兩矩陣相乘 D3DXMATRIX * pOut, // 結(jié)果矩陣 CONST D3DXMATRIX * pM1, // 矩陣1 CONST D3DXMATRIX * pM2 // 矩陣2)。矩陣變換(transform)的實施,可采用IDirect3DDevice9接口提供的SetTransform方法:HRESULT SetTransform( // 成功返回D3D_OK(= 0) D3DTRANSFORMSTATETYPE State, // 變換類型狀態(tài)值 CONST D3DMATRIX * pMatrix // 變換矩陣)。其中State的取值可為D3DTRANSFORMSTATETYPE枚舉類型或D3DTS_
點擊復制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1