[Bug 33456] New: D3DXMatrixTransformation: Broken calculation when scalingrotation and scaling is used

wine-bugs at winehq.org wine-bugs at winehq.org
Thu Apr 25 01:53:47 CDT 2013


http://bugs.winehq.org/show_bug.cgi?id=33456

             Bug #: 33456
           Summary: D3DXMatrixTransformation: Broken calculation when
                    scalingrotation and scaling is used
           Product: Wine
           Version: unspecified
          Platform: x86
        OS/Version: Linux
            Status: NEW
          Keywords: testcase
          Severity: normal
          Priority: P2
         Component: directx-d3dx9
        AssignedTo: wine-bugs at winehq.org
        ReportedBy: kgbricola at web.de
                CC: wine-bugs at winehq.org
    Classification: Unclassified


Created attachment 44286
  --> http://bugs.winehq.org/attachment.cgi?id=44286
D3DXMatrixTransformation test case - 22 failed tests

While trying to improve the speed of D3DXMatrixTransformation(), I found that
the calculation when using scalingrotation and scaling at the same time is
wrong.

The full formula is (according to msdn):
Mout = (Msc)-1 * (Msr)-1 * Ms * Msr * Msc * (Mrc)-1 * Mr * Mrc * Mt
while the failing part is:
(Msr)-1 * Ms * Msr

So this might not be the correct equivalent:
...
D3DXMatrixRotationQuaternion(&m4, pscalingrotation); //Msr
D3DXMatrixInverse(&m2, NULL, &m4); //Msr-1
D3DXMatrixScaling(&m3, pscaling->x, pscaling->y, pscaling->z); //Ms
...
D3DXMatrixMultiply(&m1, &m1, &m2);
D3DXMatrixMultiply(&m1, &m1, &m3);
D3DXMatrixMultiply(&m1, &m1, &m4);
...

This may affect other functions as well (e.g. D3DXMatrixTransformation2D()).

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list