我正在尝试使用D3DXVec3TransformCoordArray和世界矩阵来定位和旋转三角形,但是当我绘制三角形时,它们会被扭曲变形。我究竟做错了什么? (顺便说一句。我需要在CPU上执行此操作,不是出于绘图目的......)
D3DXVECTOR3 tri[3];
tri[0] = mbuffer.vertices[mbuffer.indices[x]].position;
tri[1] = mbuffer.vertices[mbuffer.indices[x + 1]].position;
tri[2] = mbuffer.vertices[mbuffer.indices[x + 2]].position;
D3DXMatrixRotationQuaternion(&rotM, &obj->getRotation());
D3DXMatrixTranslation(&posM, obj->getPosition().x, obj->getPosition().y, obj->getPosition().z);
transM = rotM * posM;
D3DXVec3TransformCoordArray(tri, 1, tri, 1, &transM, 3);
当我注释掉最后一行D3DXVec3TransformCoordArray(tri, 1, tri, 1, &transM, 3);
时,该对象渲染得很好但当然没有变换......
编辑:
此外,obj->getPosition()
和obj->getRotation()
会返回正确的值。
EDIT2: 好吧,好像是
D3DXVec3TransformCoord(&tri[0], &tri[0], &transM);
D3DXVec3TransformCoord(&tri[1], &tri[1], &transM);
D3DXVec3TransformCoord(&tri[2], &tri[2], &transM);
而不是
D3DXVec3TransformCoordArray(tri, 1, tri, 1, &transM, 3);
解决了这个问题。
有谁能告诉我如何正确使用D3DXVec3TransformCoordArray
? (MSDN不是很有帮助)
答案 0 :(得分:0)
编辑: D3DXVec3TransformCoordArray在这种情况下,步幅参数的大小应为D3DXVECTOR3。 如果你想旋转和翻译,尝试传入D3DXVec3TransformCoordArray transM矩阵而不是posM。