我知道D3D中有一个转换纹理坐标的函数:
d3dDevice->SetTransform( D3DTS_TEXTURE0, &matrix );
问题是如何获得矩阵。例如,我现在有纹理偏移,缩放,旋转和亮度。我该如何设置该矩阵?
答案 0 :(得分:1)
Transforms。该页面上有D3DX Utility Library方法的链接。
答案 1 :(得分:0)
让我们考虑在宽度(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);
希望这能解决你的问题。享受!!!