在DX9中,如何实现一个D3DXVECTOR3与一个三行三列的矩阵相乘?

时间:2021-04-09 19:42:03
有一个D3DXVECTOR3 vPos;的三维向量。
有一个D3DXMATRIX matProj;的4X4投影矩阵。
我想让这个三维向量只与4X4矩阵的左上角的3X3矩阵相乘。
1、用D3DX提供的现成函数,能实现吗?
2、在VERTEX SHADER中HLSL能实现吗?
谢谢

3 个解决方案

#1


哪里一定要三维向量只与4X4矩阵的左上角的3X3矩阵相乘吗?
一般在 shader里都是这样写的,mul (float4(vPos, matProj));

#2


shader里可以支持大矩阵转换为小矩阵,比如

(float3x3)M,  M为float4x4的矩阵。

如果dx不能这样转换,可以自己转换,取出4x4矩阵中的左上3x3元素生成一个新矩阵即可。或者把3维向量用4维齐次坐标来表示

#3


向量乘矩阵得一个向量。DX里是有这个函数,真正做计算的4x4个也只有4个,有一个一直保持为1。
平移、缩放、旋转。用到的变量都不一样。
希望能为你提供帮助
相关函数:
平移:
D3DXMATRIX *D3DXMatrixTranslation(
    D3DXMATRIX* pOut,//返回的结果
    FLOAT x, //X轴上的平移量
    FLOAT y, //Y轴上的平移量
    FLOAT z) //Z轴上的平移量

绕X轴旋转:
D3DXMATRIX *D3DXMatrixRotationX(
    D3DXMATRIX* pOut, //返回的结果
    FLOAT Angle //旋转的弧度
);

绕Y轴旋转:
D3DXMATRIX *D3DXMatrixRotationY(
    D3DXMATRIX* pOut, //返回的结果
    FLOAT Angle //旋转的弧度
);

绕Z轴旋转:
D3DXMATRIX *D3DXMatrixRotationZ(
    D3DXMATRIX* pOut, //返回的结果
    FLOAT Angle //旋转的弧度
);

绕指定轴旋转:
D3DXMATRIX *D3DXMatrixRotationAxis( 
    D3DXMATRIX *pOut,//返回的结果
    CONST D3DXVECTOR3 *pV,//指定轴的向量
    FLOAT Angle//旋转的弧度
);

缩放:
D3DXMATRIX *D3DXMatrixScaling(
    D3DXMATRIX* pOut, //返回的结果
    FLOAT sx, //X轴上缩放的量
    FLOAT sy, //Y轴上缩放的量
    FLOAT sz //Z轴上缩放的量
);
//变换向量随矩阵。
D3DXVECTOR3 * D3DXVec3TransformCoord(
  D3DXVECTOR3 * pOut,//输出向量
  CONST D3DXVECTOR3 * pV,//输入向量
  CONST D3DXMATRIX * pM//输入矩阵
);

#1


哪里一定要三维向量只与4X4矩阵的左上角的3X3矩阵相乘吗?
一般在 shader里都是这样写的,mul (float4(vPos, matProj));

#2


shader里可以支持大矩阵转换为小矩阵,比如

(float3x3)M,  M为float4x4的矩阵。

如果dx不能这样转换,可以自己转换,取出4x4矩阵中的左上3x3元素生成一个新矩阵即可。或者把3维向量用4维齐次坐标来表示

#3


向量乘矩阵得一个向量。DX里是有这个函数,真正做计算的4x4个也只有4个,有一个一直保持为1。
平移、缩放、旋转。用到的变量都不一样。
希望能为你提供帮助
相关函数:
平移:
D3DXMATRIX *D3DXMatrixTranslation(
    D3DXMATRIX* pOut,//返回的结果
    FLOAT x, //X轴上的平移量
    FLOAT y, //Y轴上的平移量
    FLOAT z) //Z轴上的平移量

绕X轴旋转:
D3DXMATRIX *D3DXMatrixRotationX(
    D3DXMATRIX* pOut, //返回的结果
    FLOAT Angle //旋转的弧度
);

绕Y轴旋转:
D3DXMATRIX *D3DXMatrixRotationY(
    D3DXMATRIX* pOut, //返回的结果
    FLOAT Angle //旋转的弧度
);

绕Z轴旋转:
D3DXMATRIX *D3DXMatrixRotationZ(
    D3DXMATRIX* pOut, //返回的结果
    FLOAT Angle //旋转的弧度
);

绕指定轴旋转:
D3DXMATRIX *D3DXMatrixRotationAxis( 
    D3DXMATRIX *pOut,//返回的结果
    CONST D3DXVECTOR3 *pV,//指定轴的向量
    FLOAT Angle//旋转的弧度
);

缩放:
D3DXMATRIX *D3DXMatrixScaling(
    D3DXMATRIX* pOut, //返回的结果
    FLOAT sx, //X轴上缩放的量
    FLOAT sy, //Y轴上缩放的量
    FLOAT sz //Z轴上缩放的量
);
//变换向量随矩阵。
D3DXVECTOR3 * D3DXVec3TransformCoord(
  D3DXVECTOR3 * pOut,//输出向量
  CONST D3DXVECTOR3 * pV,//输入向量
  CONST D3DXMATRIX * pM//输入矩阵
);