[英]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.