让我们说:
Vector3 vec;//has some random values
Matrix4x4 mat;//has some random values as well
现在我想将它们相乘以获得Vector3。
Vector3 mult = vec * mat;
此功能是否符合以下条件:
void Matrix4x4::Transform( Vector3 &oPoint )
{
float fX = oPoint.GetX();
float fY = oPoint.GetY();
float fZ = oPoint.GetZ();
oPoint.SetX( fX * this->matrix[0][0] + fY * this->matrix[0][1] + fZ * this->matrix[0][2] + this->matrix[0][3]);
oPoint.SetY( fX * this->matrix[1][0] + fY * this->matrix[1][1] + fZ * this->matrix[1][2] + this->matrix[1][3]);
oPoint.SetZ( fX * this->matrix[2][0] + fY * this->matrix[2][1] + fZ * this->matrix[2][2] + this->matrix[2][3]);
}
如果没有,你能带领我朝着正确的方向前进吗?
答案 0 :(得分:1)
您的代码似乎没问题。我假设,当你使用OpenGL时,你的矩阵是按列主顺序排列的,当你想在4x4矩阵上乘以3的向量时,你的第四个向量坐标为1
。
但是,由于你显然在做计算机图形学,你应该使用大小为4的向量,因为它具有同质的坐标。另外我真的不明白,为什么你想在矩阵上乘以向量,而不是相反。