0

我知道 D3D 中有一个函数可以转换纹理坐标:

d3dDevice->SetTransform( D3DTS_TEXTURE0, &matrix );

问题是我如何获得矩阵。例如,我现在有纹理偏移、缩放、旋转和亮度。我应该如何设置该矩阵?

4

2 回答 2

1

变换。该页面上有指向 D3DX 实用程序库方法的链接。

于 2011-02-20T14:32:37.080 回答
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);

希望这能解决您的问题。享受 !!!

于 2016-09-13T17:26:21.033 回答