[comp.lang.postscript] 3D PostScript, Warps, and more

drwho@athena.mit.edu (Jonathan Monsarrat) (06/21/91)

3D PostScript is now available!

There is a new set of libraries for 3D PostScript, Warping, Tiling,
and Filling Paths with Text, written by Jonathan Monsarrat and Kevin
Iga at the Massachusetts Institute of Technology. You can anonymous
ftp the files from eddie.mit.edu, /distrib/three-d-zone/threed-zone,
which is a 115K tar file that include the libraries and several
examples.

In addition, a large example which takes the Dec UseNet world map and
projects it onto a globe in three space is the ASCII file (not tar file)
/distrib/three-d-zone/globe-threedzone.ps.

Please try out the code, tell all your friends, and send us your
comments. Better yet, we'd love to start a 3D PostScript image library
or receive example of modified code that you make. Also, we're hoping
that some of you experts can give us memory and speed optimization
hints.

Please send e-mail to drwho@athena.mit.edu. Thank you!

-Jon and Kevin

------------------------------------------
You're traveling through another dimension.
A dimension not only of length and width, but of depth.
That's the signpost up ahead.
Your next stop -- the POSTSCRIPT ZONE.

Welcome to Zone.

With it you can pretend your Postscript printer is three dimensional.
This package is a set of headers that you can add to your files to
make them know how to draw in three dimensions.

The page, of course is a perspective two-dimensional projection of this
three-dimensional drawing space.  You can adjust this projection, rotate
your three-dimensional coordinate system, translate, and so on.

There's also linmap.ps that allows you to take a 2-d path and map it
onto a plane in the three-dimensional drawing space.  Or warpmap.ps that
maps it onto a user-defined surface with a user-defined map.  Spheres
and cylinders are here as examples.

zone.ps       macros that allow you to draw in three dimensions
linmap.ps     macros that allow you to take 2-d Postscript paths and put
              them in a plane in the 3-d space
warpmap3.ps   macros that allow you to take 2-d Postscript paths and map
              them on an arbitrary surface in the 3-d space using a
              user-defined function
breakpath.ps  breaks the path (intended for a fill region) into trapezoids
              to make them more manageable for warpmap.ps
spherewarp.ps a ready-defined function for warpmap that maps stereographically
              onto a sphere

drwho@athena.mit.edu (Jonathan Monsarrat) (06/22/91)

Thank you for the comments we've been receiving in loads!

Apparently I left out some useful information in my last post.

The ftp site was broken during the first 12 hours we announced it. We
forgot to use 'binary more' (see below).

Some of the examples simply won't work on anything less than an LPS40
or an on-line interpreter. Sorry!! We're trying to deal with memory
issues for our next release. The good news is none of the code depends
on having a PostScript 2 interpreter. 1 is fine.

I would be happy to e-mail the stuff to anyone without ftp access.

For those of you unfamiliar with ftp, my UNIX session looks like this:

prompt% ftp eddie.mit.edu
Connected to eddie.mit.edu.
220 eddie FTP server (Version 5.66 Sun Feb 17 13:49:17 EST 1991) ready.
Name (eddie.mit.edu:drwho): anonymous
331 Guest login ok, send your user ident as password.
Password: ident
230 Guest login ok, access restrictions apply.
ftp> bin
200 Type set to I.
ftp> cd /distrib/three-d-zone
250 CWD command successful.
ftp> get threed-zone
200 PORT command successful.
150 Opening BINARY mode data connection for threed-zone (102400 bytes).
226 Transfer complete.
local: threed-zone remote: threed-zone
102400 bytes received in 12 seconds (8 Kbytes/s)
ftp> get globe-threedzone.ps
200 PORT command successful.
150 Opening BINARY mode data connection for globe-threedzone.ps (114741 bytes).226 Transfer complete.
local: globe-threedzone.ps remote: globe-threedzone.ps
114741 bytes received in 9.6 seconds (12 Kbytes/s)
ftp> quit
221 Goodbye.
prompt% tar xvf threed-zone
x Threed/HOWTO-EXAMPLE.txt, 6944 bytes, 14 tape blocks
x Threed/breakpath.ps, 5966 bytes, 12 tape blocks
x Threed/butterflywarp.ps, 331 bytes, 1 tape blocks
x Threed/cylinderwarp.ps, 258 bytes, 1 tape blocks
x Threed/ex_break.ps, 8289 bytes, 17 tape blocks
x Threed/ex_linmap.ps, 541 bytes, 2 tape blocks
x Threed/ex_norm.ps, 411 bytes, 1 tape blocks
x Threed/ex_warp1.ps, 623 bytes, 2 tape blocks
x Threed/ex_warp2.ps, 7653 bytes, 15 tape blocks
x Threed/ex_warpclock.ps, 3888 bytes, 8 tape blocks
x Threed/ex_zone.ps, 4488 bytes, 9 tape blocks
x Threed/howtozone.tex, 32565 bytes, 64 tape blocks
x Threed/latlongwarp.ps, 234 bytes, 1 tape blocks
x Threed/linmap.ps, 669 bytes, 2 tape blocks
x Threed/sphere2warp.ps, 339 bytes, 1 tape blocks
x Threed/spherewarp.ps, 300 bytes, 1 tape blocks
x Threed/warpmap3.ps, 937 bytes, 2 tape blocks
x Threed/zone.ps, 12109 bytes, 24 tape blocks
prompt% du -s Threed
94      Threed
prompt%

Happy hacking. 

-Jon Monsarrat
 drwho@athena.mit.edu