Matrix multiplication question

Started by
2 comments, last by Qoy 22 years, 8 months ago
If I'm multiplying a 4x4 matrix by a vector, using a homogeneous coordinate for the vector, then I understand that if the matrix is such that the homogeneous coordinate becomes other than 1 after the operation, I'm supposed to multiply the vector by the reciprocal of what it becomes to renormalize it. But what if the matrix is such that the coordinate becomes 0? If that's the case, do I just ignore it and skip the extra multiplications? I hope this question makes sense, it's late Thanks! Edited by - Qoy on July 30, 2001 3:59:23 AM
Advertisement
In general you should not see this. If you make a matrix the normal way, combining a rotation with a translation, you should get something like:

(a b c p)
(d e f q)
(g h i r)
(0 0 0 1)

The abcdefghi is the rotation matrix, the pqr the translation vector. But the interesting row is the last one, as with it set to (0 0 0 1) it will mean the homogeneous (w) coordinate is preserved by the multiplication, and so if it is 1 in the input vector it will be 1 in the output vector, and you will not need to renormalise.

If your matrix looks different from this you are either doing something wrong or trying to do something different from just transforming a vector. If it''s wrong I suggest you look at your matrix creation routine(s) to see what''s going on. Otherwise it might help if you say a bit more about what you''re trying to do.
John BlackburneProgrammer, The Pitbull Syndicate
Thanks. It''s not output from my transformation functions, but there is need to renormalize from projection matrices, and I know that if the projection matrix is done right then the homogeneous coordinate shouldn''t become zero either (at least, that''s how it seems to me).

I''m pretty new to 3D programming, and I wasn''t sure whether or not this situation would come up at any point in using valid matrices for some purposes other than transformation. Could it?
Are you really transforming a pure vector----such as a direction vector or a normal vector? Or are you transforming a coordinate? For a coordinate the homogeneous coordinate should be 1 and for a pure vector it should be 0.

Regardless, as johnb mentions, the homogeneous coordinate is preserved in the multiplication.

Graham Rhodes
Senior Scientist
Applied Research Associates, Inc.
Graham Rhodes Moderator, Math & Physics forum @ gamedev.net

This topic is closed to new replies.

Advertisement