Project and unProject

How to write the projection(…) and unprojecton(…) likes gluProject and gluUnproject?
Does anybody know it? Thanks

This is explained in the blue book, and should be in the glu source from SGI

I don’t know why you want to unproject, but this is how you project a point. Do this for each point in your triangle.

// Create your 1/z value
double OneOverZ = ( double )1.0 / ( double )tri[i].z;

// Project the X point
point.X = ((tri[i].x * gfCameraScale) * OneOverZ) + (ScreenWidth / 2);

// Project the Y point
point.Y = ((tri[i].y * (-gfCameraScale)) * OneOverZ) + (ScreenHeight / 2);

// Project the UV of the triangle if need be
tri[i].U = ( double ) NewA[ Count ].U * OneOverZ;
tri[i].V = ( double ) NewA[ Count ].V * OneOverZ;

gfCameraScale is usually a value between 100 and 600 depending on the screen width and height and the angle of the fustrum. I don’t know how to calculate that.

do the above with your translated points.

howie’s responce is no where near what it takes to project a point in 3D space. for one thing, it does not take into account parallel projections.

The process of projecting a point is very complex. The red book MIGHT have it (though I don’t recall it), I doubt the blue book has it, as that is just documentation on the ogl functions.

Pickup a copy (it’s expensive though) of “Computer Graphics: Principles and Practice” by Foley, Va Dam, Feiner, and Hughes. It will have all of what you need, practically for anything related to graphics (unless it’s something uber-new). I don’t really think I can explain all of what you have to do in order to project a point.

However, once you figure out how to project a point, unprojecting it is easy. You just find the inverse of the projection matrix and use THAT matrix to “project” your point.

I’ve written 2 software rendering, texture mapping, Gouraud shaded, 3D engines. I know how to project a point. Perhaps your thinking about clipping and translation.

The code above assumes the point has been translated by your matrix. Before you project a point, say on a quad or a try, you have to clip all the points to the near Z plain. But that was not part of his question.

He asked how to project a point, and that’s how I do it. Perhaps there’s more then one way to do it, but that’s how I do it.