Skip to Main Content

Java SE (Java Platform, Standard Edition)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

3d Theory. vcs to scs transformation.

843799Aug 14 2001 — edited Aug 17 2001
Hi you 3d gurus.
Please give me a tip!

If you have a point with coordinates given in the View Coordinate System, how do you translate it to a point on the screen?
The point is given by x,y,z in the view coordinate system (vcs). (x is horizontal, y is vertical, and z is distance stright forward from your eye.)
To obtain where to render the point at the screen, I could do something like this:
iScreenX = (400*vcs.x)/vcs.z;
iScreenY = (400*vcs.y)/vcs.z;
The problem is that this only works for z values grather than 0.
if(vcs.z <= 0)
IHaveAProblem();
Ofcorse, a point with negative (or zero) z- value shold not be shown, however, a polygon might be visible even though one of its vertexes has a negative z- value. Havent found any good solution. So far, I just dont paint the polygon at all if I find a negative or zero z.
I also tried using the distance, and not the z- value as the divisor:
double dDivisor;
dDivisor = Math.sqrt(vcs.x*vcs.x +vcs.y*vcs.y +vcs.z*vcs.z);
iScreenX = (400*vcs.x) / dDivisor;
iScreenY = (400*vcs.y) / dDivisor;
This is ok for all points not beeing positioned in the middle of your eye (givig dDivisor=0), but it gives a fisheye like view of the world, and thats not exactly what I want.

I want something close to the first solution, but that also works on negative and 0 z values.

Anybody knows?

This is my 3d engine:
http://blake.prohosting.com/ragnvald/

";-)
Ragnvald Barth
Software engineer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Sep 14 2001
Added on Aug 14 2001
7 comments
223 views