How to write the projection(…) and unprojecton(…) likes gluProject and gluUnproject?

Does anybody know it? Thanks

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.