我知道 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);
希望这能解决您的问题。享受 !!!