[comp.graphics] how to view f

chasman@athena.mit.edu (David Chasman) (03/15/91)

Umm, I've never read or posted to either of these groups.  What I am looking
for is some code to take the function zz = f(x,y,z) and render the 3-D surface
which corresponds to this.  

Ideally, I'd like C-code for a silicon graphics machine.

My current technique is to evaluate f(x,y,z) for all discretized
(x,y,z) inside of a cube - and to light up a point 
if :
	 | f(x,y,z) - constant | < Epsilon

if you have any ideas - please help.

--David Chasman
chasman@athena.mit.edu

krogh@talon.ncsa.uiuc.edu (Mike Krogh) (03/15/91)

This type of surface is known as an isosurface.  You can get some public
domain software from NCSA's anonymous ftp server (ftp.ncsa.uiuc.edu or
128.174.20.50 [this may change to 141.142.20.50 any day now]).  After
logging into the server, go into the directory 'isovis' and get the
stuff in there, which includes binaries, source, and documentation.
This code will work on most machines, but has a option for displaying
the output on an SGI workstation.

You can also find a lot of other visualization tools on our server.


Mike Krogh
NCSA
krogh@ncsa.uiuc.edu


In article <1991Mar14.234739.15281@athena.mit.edu>, chasman@athena.mit.edu (David Chasman) writes:
> Umm, I've never read or posted to either of these groups.  What I am looking
> for is some code to take the function zz = f(x,y,z) and render the 3-D surface
> which corresponds to this.  
> 
> Ideally, I'd like C-code for a silicon graphics machine.
> 
> My current technique is to evaluate f(x,y,z) for all discretized
> (x,y,z) inside of a cube - and to light up a point 
> if :
> 	 | f(x,y,z) - constant | < Epsilon
> 
> if you have any ideas - please help.
> 
> --David Chasman
> chasman@athena.mit.edu

foo@erfordia.rice.edu (Mark Hall) (03/15/91)

In article <1991Mar14.234739.15281@athena.mit.edu> chasman@athena.mit.edu (David Chasman) writes:
)What I am looking
)for is some code to take the function zz = f(x,y,z) and render the 3-D surface
)which corresponds to this.  

  see 

@Article{WMW:soft,
  author =      "Geoff Wyvill and Craig McPheeters and Brian Wyvill",
  title =       "Data Structure for {\it Soft} Objects",
  journal =     viscomp,
  year =        1986,
  volume =      2,
  number =      4,
  month =       "August",
  pages =       "227--234"
}

@Article{Upson:Amorphous,
  author = "Craig Upson",
  title = "The Visual Simulation of Amorphous Phenomena",
  journal = viscomp,
  volume = 2,
  number = 5,
  month =   "September",
  year =   1986,
  pages = "321--326"
}


@Article{LC:MCubes,
  author =      "W. Lorenson and H. Cline",
  title =       "Marching Cubes: A High Resolution 3D Surface Construction Alg$
  journal =     siggraph,
  year =        1987,
  month =       "August",
  volume =      21,
  number =      4,
  pages =       "163--169"
}

@Article{Bloom:ImpSurf,
  author =      "Jules Bloomenthal",
  title =       "Polygonalization of Implicit Surfaces",
  journal =     cagd,
  year =        1988,
  volume =      5,
  pages =       "341--355"
}

  Also, there is a very brief summary in the book "Graphics Gems", 
 the article is "Defining Surfaces from Sampled Data". 

  - mark

okeefe@cs.Buffalo.EDU (Paul O'Keefe) (03/16/91)

In article <1991Mar14.234739.15281@athena.mit.edu>, chasman@athena.mit.edu (David Chasman) writes:
|> What I am looking
|> for is some code to take the function zz = f(x,y,z) and render the 3-D surface
|> which corresponds to this.  
|> 
|> Ideally, I'd like C-code for a silicon graphics machine.
|>

In addition to those already cited:

One)	apE from OSU has a module Onion which implements 
	Lorenson and Cline's Marching Cubes alogorithm.
	It comes with SGI binaries and source. Since apE
	is a complete environment, it can render the results.
	However, apE also comes with a $75.00 price and some
	license restrictions which differ for academic and
	non-academic users. Info on apE is available via
	anonymous ftp at apE.osgp.osc.edu (128.146.18.18).

Two) 	There is a C code implementation of Marching Cubes
	by Steve Lamont formerly of the NC SuperComputer Center.
	It's available via anonymous ftp at szechuan.ncsc.org.

Three)  Although Marc Levoy is most famous for his volume rendering
	algorithm, he also has an iso-value surface rendering algorithm.

@Article{LC:,
  author =      "Levoy, Marc",
  title =       "Display of Surfaces from Volume Data",
  journal =     IEEE Computer Graphics and Applications,
  year =        1988,
  month =       "May",
  volume =      8,
  number =      3,
  pages =       "29-37"
}

-Paul O'Keefe

jk87377@cc.tut.fi (Juhana Kouhia) (03/16/91)

In article <1991Mar14.234739.15281@athena.mit.edu>
chasman@athena.mit.edu (David Chasman) writes:
>
>My current technique is to evaluate f(x,y,z) for all discretized
>(x,y,z) inside of a cube - and to light up a point 
>if :
>	 | f(x,y,z) - constant | < Epsilon

Try use a ray tracing (hopefully you know that method):

1. ray from eye through a pixel to the world
   Ray = Eye+t*normalize(Pixel-Eye)  ; t is distance from eye
2. calculate an intersection points of cube and ray --> t1, t2
3. for (t = t1; t < t2; t = t + small_step) {
     Ray = Eye+t*Direction;
     F = f(Ray);
     if (abs(F-constant) < Epsilon) return Ray;  /* point is found */
   }
   /* point is not found */

Rest of this home exam is your job.
I use something similar to calculate 4D Mandelbrot.
Similarly you can make this algorithm much faster, because you have a
mathematical function.

Juhana Kouhia
jk87377@cs.tut.fi
        ^^^