I have read some treatments (e.g. Foley & van Dam, 1982, section 8.2) of
perspective projection where they assume
- centre of projection (viewpoint) is (0,0,0)
- projection plane (view plane) is the plane z = b0
I would like to do projection onto an arbitrary plane:
z = b0 + b1*x + b2*y + b3*x*y
and the centre of projection is somewhere behind that plane on a line
normal to it.
The FAQ says:
=================================
The trick is to take an arbitrary viewpoint and plane, and
transform the world so we have the simple viewing
situation. There are two steps: move the viewpoint to the
origin, then move the viewplane to the z=1 plane. If the
viewpoint is at (vx,vy,vz), transform every point by the
translation (x,y,z) --> (x-vx,y-vy,z-vz). This includes
the viewpoint and the viewplane. Now we need to rotate
so that the z axis points straight at the viewplane, then
scale so it is 1 unit away.
=================================
But this is too brief for me to follow. Can anyone point me to a fuller
treatment? (The Foley and Van Damm treatment in section 8.3 is very hard
for me to follow because it contains a lot of stuff, e.g. clipping to view
volume, I would like to skip at this point)
Here are some specific questions.
I am aiming to simulate some real scene. The scene may not be at z=1,Quote:> There are two steps: move the viewpoint to the
> origin, then move the viewplane to the z=1 plane.
maybe z=100. So z=1 will produce unrealistic amount of perspective
distortion. So how to modify the procedure to use some other z-value?
OK so now the viewpoint is (vx-vx,vy-vy,vz-vz)=(0,0,0)Quote:> If the viewpoint is at (vx,vy,vz), transform every point by the
> translation (x,y,z) --> (x-vx,y-vy,z-vz). This includes
> the viewpoint and the viewplane.
The new viewplane is
(z-vz) = b0 + b1*(x-vx) + b2*(y-vy) + b3*(x-vx)*(y-vy)
z = b0 + b1*(x-vx) + b2*(y-vy) + b3*(x-vx)*(y-vy) + vz
It that right?
How to do this?Quote:> Now we need to rotate
> so that the z axis points straight at the viewplane,
How?Quote:> then scale so it is 1 unit away.
Then I plot the points (x/z, y/z)?
Thanks very much for any help.
Bill Simpson