簡體   English   中英

如何在Direct3D中建立紋理坐標轉換矩陣

[英]how to build Texture Coordinate Transformations Matrix in Direct3D

我知道D3D中有一個函數可以轉換紋理坐標:

d3dDevice->SetTransform( D3DTS_TEXTURE0, &matrix );

問題是我如何獲得矩陣。 例如,我現在具有紋理偏移,比例,旋轉和亮度。 我應該如何設置該矩陣?

轉換 該頁面上有指向D3DX實用程序庫方法的鏈接。

讓我們考慮一下,您在寬度為(txFullWidth)和高度為(txFullHeight)的紋理圖集中有相同寬度(txTxWidth)和高度(txTxHight)的圖像集合。

步驟1:建立一個4x4比例矩陣,其大小等於紋理圖集中的圖像單元。

D3DXMatrixScaling(&matScale, txTxWidth/txFullWidth, txTxHeight/txFullHeight, 1.0f);

步驟2:使用(x,y)偏移量和圖像單元格的寬度和高度構建4x4轉換矩陣

   D3DXMATRIX matTrans;
   matTrans._13 = x / txFullWidth; // X origin
   matTrans._23 = y / txFullHeight; // Y origin
   matTrans._31 = txTxWidth / txFullWidth;  // Width;   
   matTrans._32 = txTxHeight / txFullHeight; // Height

步驟:4:不要忘記轉置轉換矩陣

   D3DXMATRIX trpos_matTrans;
   D3DXMatrixTranspose(&trpos_matTrans,&matTrans);

步驟3:根據您的要求構建4x4旋轉矩陣。

 D3DXMatrixRotationX(&matRot, D3DXToRadian(0.0f));

步驟4:乘法

 matix = matScale * matRot * trpos_matTrans ; // SRT

步驟5:設置紋理變換

device->SetTransform(D3DTS_TEXTURE0, &matrix);

第6步:設置紋理階段0

device->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS,   D3DTTFF_COUNT2);

希望這能解決您的問題。 請享用 !!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM