0

我正在尝试使用 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 不是很有帮助)

4

1 回答 1

0

编辑:在这种情况下,D3DXVec3TransformCoordArray 的步幅参数应该是 D3DXVECTOR3 的大小。如果要旋转和平移,请尝试传入 D3DXVec3TransformCoordArray transM 矩阵而不是 posM。

于 2014-01-26T19:59:22.703 回答