【问题标题】:DirectX Matrix transformationDirectX 矩阵变换
【发布时间】:2014-01-26 19:17:16
【问题描述】:

我正在尝试使用 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() 返回正确的值。

编辑2: 好吧,好像

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 不是很有帮助)

【问题讨论】:

    标签: c++ directx d3dx matrix-transform


    【解决方案1】:

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

    【讨论】:

    • 哦,是的,它应该是 transM 而不是 posM,但我想知道它是否至少只适用于 position 并且忘记将其改回。我会编辑那个。确定参数 2 和 4? MSDN 说的不同。我试图将它们更改为 3,但它没有帮助。看起来更糟^^
    猜你喜欢
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多