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...