dnettles@eeserv1.ic.sunysb.edu (David E Nettles) (05/28/91)
Hello everyone! Does anybody know how to make objects appear transparenet on the IRIS using the IRIS library routines? I am building modeles of objects using polygons right now and it is necessary that I be able to see through the outermost walls of my models. Thanks in advance!!!! --- David E. Nettles dnettles@eeserv1.ic.sunysb.edu dnettles@eeserv1.ic.sunysb.edu dnettles@eeserv1.ic.sunysb.edu "JUSTICE: It's what comes _before_ the law." -- me
alain@paris.asd.sgi.com (Alain Dumesny) (05/29/91)
use the getgdesc(GD_BLEND) routine to see if the blendfunction() routine is available on your machine (GT/GTX/VGX have it, PIs don't). 1) if you do then blendfunction(BF_SA,BF_MSA) will turn alpha blending on and blendfunction(BF_ONE,BF_ZERO) turns it back off. You specify the transparency of an object using the ALPHA value when specifying a material in lmdef(). To get transparency to really work correctly though, you will need to render the transparent polygons from back to front after you have rendered the regular polygons. A quick and easy hack which doesn't require the sortings of the polygons and which partially works is to : a) render all regular polygons (zbuffer on) b) render all transparent polygon in the order they come, have zbuffer on for correct clipping, BUT turn off the zbuffer write mask so that transparent polygones behind other transparent ones still get drawn. Turning backfacing off also helps. 2) If you don't have blendfunction(), or don't want to sort your transparent polygons and your transparency needs are pretty basic (i.e. only a few discreat transparency levels) then you need to define transparency patterns using defpattern()/setpattern(). for example : unsigned short mask1[] = { 0x5555, 0xAAAA, 0x5555, 0xAAAA, 0x5555, 0xAAAA, 0x5555, 0xAAAA, 0x5555, 0xAAAA, 0x5555, 0xAAAA, 0x5555, 0xAAAA, 0x5555, 0xAAAA, }; main() { defpattern(1,16,mask1); .... start drawing your scene .... setpattern(1); // call before transparent polygones. setpattern(0); // back to solid pattern. } this will draw with a pattern with half of the pixels on, half off, which looks like 50% tranparent. I have 16 contiguous patterns like that to define different levels of transparency. send me mail if you want a copy of them... Enjoy !, P.S. I would recommend using #2 in most cases because it doesn't require pre- sorting or a two passes approach, and works pretty well in most cases where only a few transparency levels are needed. The hard thing is to pick a nice set of patterns which limit the aliasing affect of 16x16 patterns... ------------------------------------------------------------------------- Alain Dumesny alain@sgi.com (415)335-7250 Silicon Graphics Inc.