高階紋理技術

2021-04-24 17:59:25 字數 2765 閱讀 1930

1:directx最多支援8重紋理 索引號:0-7

-7的順序。

4:紋理混合是階段混合,即0和1混合後的結果再和2混合。

5:settexturestagestate()

6:查詢是否支援紋理混合以及支援幾層。

if( pcaps->maxtextureblendstages <= 1)

return false;

7:設定並關聯紋理層

定義:lpdirect3dvertexbuffer9    g_pvb       = null;

lpdirect3dtexture9         g_ptexture1 = null;      //第一層紋理

lpdirect3dtexture9         g_ptexture2 = null;      //第二層紋理

建立: d3dxcreatetexturefromfile( pd3ddevice, l"wall.bmp",

關聯:pd3ddevice->settexture( 0, g_ptexture1 );

pd3ddevice->settexture( 1, g_ptexture2 );

8:設定紋理座標索引

如果需要使用不同的紋理座標,在頂點格式中包含多組座標。

pd3ddevice->settexturestagestate( 0, d3dtss_texcoordindex,   0 );

pd3ddevice->settexturestagestate( 1, d3dtss_texcoordindex,   1 );

// 定義頂點結構和靈活頂點格式

struct customvertex

;9:設定紋理混合

pd3ddevice->settexturestagestate( 0, d3dtss_colorop,  

d3dtop_modulate );//將下面的紋理層貼圖和漫反射顏色相乘

pd3ddevice->settexturestagestate( 0, d3dtss_colorarg1,

d3dta_texture );

pd3ddevice->settexturestagestate( 0, d3dtss_colorarg2,

d3dta_diffuse );

pd3ddevice->settexturestagestate( 0, d3dtss_alphaop,  

d3dtop_disable );//禁用0層和1層alpha通道混合

pd3ddevice->setsamplerstate(0, d3dsamp_magfilter,

d3dtexf_linear);//設定線性過濾

pd3ddevice->setsamplerstate(0, d3dsamp_minfilter,

d3dtexf_linear);

pd3ddevice->settexture( 1, g_ptexture2 );

pd3ddevice->settexturestagestate( 1, d3dtss_colorop,  

d3dtop_add);

pd3ddevice->settexturestagestate( 1, d3dtss_colorarg1,

d3dta_texture );

pd3ddevice->settexturestagestate( 1, d3dtss_colorarg2,

d3dta_current);

pd3ddevice->settexturestagestate( 1, d3dtss_alphaop,  

d3dtop_disable );

pd3ddevice->settexturestagestate( 1, d3dtss_texcoordindex,

1 );

pd3ddevice->setsamplerstate(1, d3dsamp_magfilter,

d3dtexf_linear);

pd3ddevice->setsamplerstate(1, d3dsamp_minfilter,

d3dtexf_linear);

d3dtss_colorarg1:預設為d3dta_texture,即紋理顏色

d3dtss_colorarg2:預設為d3dta_current,即前一紋理層的輸出顏色。當

stage引數為0時,值為d3dta_diffuse,畫素漫反射顏色值。

d3dtss_alphaarg1:預設為d3dta_texture

d3dtss_alphaarg2:預設為d3dta_current,stage引數為0時,值為

d3dta_diffuse,畫素漫反射顏色值

alpha混合和顏色混合是分別處理的。

10:ondestroydevice中:

safe_release(g_pvb);

safe_release(g_ptexture1);

safe_release(g_ptexture2);

11:渲染

pd3ddevice->setstreamsource( 0, g_pvb, 0, sizeof(customvertex) );

pd3ddevice->setfvf( d3dfvf_customvertex );

pd3ddevice->drawprimitive( d3dpt_********strip, 0,

2);

OpenGL紋理高階

矩形紋理 對於二維紋理來說,除了gl texture 2d之外,使用gl texture rectangle就可以使用矩形紋理。矩形紋理幾大特點 不能mip,只能載入glteximage2d的level 0 紋理座標非標準化 不支援壓縮紋理 這種方式通常用於處理和提交影象資料的應用,比起通常的2d紋...

Mipmap紋理技術

在三維世界中,顯示一張圖的大小與攝象機的位置有關,近的地方,實際象素就大一些,遠的地方實際象素就會小一些,就要進行一些壓縮,例如一張64 64的圖,在近處,顯示出來可能是50 50,在遠處可能顯示出來是20 20.如果只限於簡單的支掉某些畫素,將會使縮小後的損失很多細節,變得很粗糙,因此,圖形學有很...

Shader 高階紋理 立方體紋理

立方體紋理 cubemap 天空盒子 skybox是遊戲中模擬背景的一種方法,每個面使用的技術就是立方體紋理對映技術。建立用於環境對映的立方體紋理 1.提供一張具有特殊布局的紋理,類似於立方體展開圖的交叉布局 全景布局等。我們需要將texturetype設定為cubemap 2.使用camera.r...