Game Development Stack Exchange is a question and answer site for professional and independent game developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm trying to get an object from object space, into projected space using these intermediate matrices:

The first matrix (I) is the one that transforms from object space into inertial space, but since my object is not rotated or translated in any way inside the object space, this matrix is the 4x4 identity matrix.

The second matrix (W) is the one that transforms from inertial space into world space, which is just a scale transform matrix of factor a = 14.1 on all coordinates, since the inertial space origin coincides with the world space origin.

    /a 0 0 0\
W = |0 a 0 0|
    |0 0 a 0|
    \0 0 0 1/

The third matrix (C) is the one that transforms from world space, into camera space. This matrix is a translation matrix with a translation of (0, 0, 10), because I want the camera to be located behind the object, so the object must be positioned 10 units into the z axis.

    /1 0 0  0\
C = |0 1 0  0|
    |0 0 1 10|
    \0 0 0  1/

And finally, the fourth matrix is the projection matrix (P). Bearing in mind that the eye is at the origin of the world space and the projection plane is defined by z = 1, the projection matrix is:

    /1 0 0   0\
P = |0 1 0   0|
    |0 0 1   0|
    \0 0 1/d 0/

where d is the distance from the eye to the projection plane, so d = 1.

I'm multiplying them like this: (((P x C) x W) x I) x V, where V is the vertex' coordinates in column vector form:

V = |y|

After I get the result, I divide x and y coordinates by w to get the actual screen coordinates.

Apparenly, I'm doing something wrong or missing something completely here, because it's not rendering properly. Here's a picture of what is supposed to be the bottom side of the Stanford Dragon:

Stanford Dragon band render

Also, I should add that this is a software renderer so no DirectX or OpenGL stuff here.

share|improve this question
Your matrices look reasonable to me. You might try taking a few example points and doing the calculations by hand / drawing diagrams to see what the results should be at each stage, then putting those points into your code and stepping through it in a debugger to ensure all the results match. – Nathan Reed Dec 4 '12 at 21:29
@NathanReed I tried several points just now and the results coincide perfectly. – toby Dec 4 '12 at 22:10
Then, are you sure there is not something wrong with your triangle clipper or rasterizer? Perhaps trying a simpler model, like a cube or just a single triangle, would help illuminate things. – Nathan Reed Dec 4 '12 at 23:03
up vote 2 down vote accepted

OK, I have fixed it. I used a more simple shape as per Nathan Reed's suggestion. Turns out the eye was too close to the projection plane. I have set a d of 1000 units and now it appears to render properly.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.