daedalic 104 Report post Posted April 13, 2011 We are trying to replace this direct x method with our own method. We tried just multiplying a matrix by a vector and got some very different results. What is this method doing that's different from simple multiplication? 0 Share this post Link to post Share on other sites
MJP 19753 Report post Posted April 13, 2011 If "vec" is the vector your transforming, it transforms (vec.x, vec.y, vec.z, 1.0f) by the transform matrix. It then divides the result by w. 0 Share this post Link to post Share on other sites
Aqua Costa 3691 Report post Posted April 13, 2011 [font="Arial"][size="2"]When you multiply a 3D vector and a matrix the result is a 4D vector with w != 1. On the other hand [/size][/font][font="Arial"][size="2"]D3DXVec3TransformCoord returns a 3D vector, which is a 4D vector projected back to w = 1.[/size][/font] 0 Share this post Link to post Share on other sites
daedalic 104 Report post Posted April 13, 2011 Here's an example of a transform matrix we are using: 0 0 -1 0 1 0 0 0 0 -1 0 0 0 0 0 1 When we multiply this matrix by the unit vector: (0, 0, 1) using D3DXVecTransformCoord, we get (0, -1, 0) as a result. However, when we use our multiplication method we get (-1, 0, 0) as a result. Here's our multiplication method: It ignores the 4th dimension since it shouldn't be needed for our purposes... as you can see, the transform matrix is equal to the identity matrix in the 4th dimensional positions. [code] INLINE Vector3D Matrix::operator* (const Vector3D vector) { return Vector3D (m11 * vector.x + m12 * vector.y + m13 * vector.z, m21 * vector.x + m22 * vector.y + m23 * vector.z, m31 * vector.x + m32 * vector.y + m33 * vector.z); } [/code] 0 Share this post Link to post Share on other sites
Buckeye 10747 Report post Posted April 13, 2011 It appears you should be multiplying the row vector by the matrix columns, rather than the other way 'round. I.e., m11*x + m21*y + m31*z = 0 m12*x + m22*y + m32*z = -1 m13*x + m23*y + m33*z = 0 Also, if you're going to "ignore" the 4th elements, then you should be using/comparing-to D3DXTransformNormal. 1 Share this post Link to post Share on other sites
daedalic 104 Report post Posted April 13, 2011 The problem was that I had assumed DirectX used column vectors instead of row vectors. So that takes care of that problem. Thanks! 0 Share this post Link to post Share on other sites