Nico
Nico

Reputation: 1191

Why is this XMVector3Transform call not returning the right result?

The situation is as follows:

XMVECTOR posVec = XMLoadFloat3(&(pVertexInfos[j].pos));

// At this point posVec equals {6143.72119, -714.767151, -16615.9004, 0.000000000} 
// and new newModelMatrix's rows are as follows:
// Row 0: {1.00000000, 0.000000000, 0.000000000, 0.000000000}
// Row 1: {0.000000000, 0.000000000, -1.00000000, 0.000000000} 
// Row 2: {0.000000000, 1.00000000, 0.000000000, 0.000000000}
// Row 3: {0.000000000, 0.000000000, 0.000000000, 1.00000000}

posVec = XMVector3Transform(posVec, newModelMatrix);

// But then posVec equals **{6143.72119, -16615.9004, 714.767151, 1.00000000}** 

According to my repeated pencil and paper calculations (Khan academy confirmed that I'm doing it right) and what the correct program execution is should equal {6143.72119, 16615.9004, -714.767151, 1.00000000}

Just in case I'm going crazy, here's a screenshot of the debugger before: Debugger before op

and after: Debugger after op

So what's going on here? According to my research XMVector3Transform should be doing exactly what I want, which is Matrix times Vector = Vector, but for some reason it looks like the negative signs get messed up. As you can imagine, this causes a pretty bad visual bug later on in the app (I confirmed that correctly hacking the operation resolves the problem).

Thank you in advance for any help, Nico

Upvotes: 0

Views: 649

Answers (1)

Adam Miles
Adam Miles

Reputation: 3584

There doesn't appear to be anything wrong with the result you're getting.

The matrix you've setup takes a position (X, Y, Z) and multiplies it by a matrix that swaps the Y and Z axes and negates the resulting Z.

As you multiply through the vector by the matrix, you go across one column at a time and work down, not along the row, the same way you would with matrix multiplication.

The resulting calculation should be:

X = (6143.72119 * 1.0f) + (-714.767151 * 0.0f) + (-16615.9004 * 0.0f) = 6143.72219

Y = (6143.72119 * 0.0f) + (-714.767151 * 0.0f) + (-16615.9004 * 1.0f) = -16615.9004

Z = (6143.72119 * 0.0f) + (-714.767151 * -1.0f) + (-16615.9004 * 0.0f) = 714.767151

This is exactly what the function gives you. Perhaps you're just misunderstanding how to do vector/matrix multiplication?

Upvotes: 1

Related Questions