From info-volumizer-owner@els.sgi.com Sun Oct  3 07:56:44 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i93EtPiJ3228888;
	Sun, 3 Oct 2004 07:55:25 -0700 (PDT)
Received: from staff.cs.usyd.edu.au (staff.cs.usyd.edu.au [129.78.8.1])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with SMTP id i925rlva3269036
	for <info-volumizer@els.sgi.com>; Fri, 1 Oct 2004 22:53:50 -0700 (PDT)
Received: from pc-lg45-18.cs.usyd.edu.au. [129.78.10.167] by staff.cs.usyd.edu.au.; Sat, 02 Oct 2004 15:53:43 +1000
Message-ID: <008901c4a844$07851060$a70a4e81@pclg4518>
From: "Hugh Macready" <hmacread@it.usyd.edu.au>
To: <info-volumizer@els.sgi.com>
References: <20040918065454.38985.qmail@web52709.mail.yahoo.com> <00a801c49ed3$52ad6580$4c5a0e86@praveenlaptop> <20040929165935.GC16751@bullet.uchicago.edu> <Pine.SGI.4.56.0409300726000.1253723@mrcoffee.engr.sgi.com>
Subject: [info-volumizer] Using pixel shading for multiple data sets
Date: Sat, 2 Oct 2004 15:52:40 +1000
MIME-Version: 1.0
Content-Type: text/plain;
	format=flowed;
	charset="iso-8859-1";
	reply-type=original
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.2180
X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2900.2180
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

Hi Praveen,

I am working on a project in which i need to try out different methods of 
fusing two volumetric data sets.  I am working on a windows platform with 
volumizer 2.7 with a an ATI Radeon 9800 pro.

Currently I am rendering both to the screen using a vzTMLUTShader.h.  This 
has yeilded very good results for a single volume and thus I would like to 
continue using it.

1.  Is there a way to use generic OpenGL calls to provide simple Alpha 
Blending of the two volume renders?  Currently I am using the following 
calls for rendering and one volume render is completely overlays the other.

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

  renderAction->beginDraw(VZ_RESTORE_GL_STATE_BIT);
  renderAction->draw(shape1);
  renderAction->draw(shape2);
  renderAction->endDraw();

2.  Were I to use vzTMFragmentProgram.h would i be able to continue using 
vzTMLUTShader.h or would all the LUT shader have to be re-written using the 
callbacks provided?

3.  Is there a reason why the vzTMISLShader has not been ported to windows? 
>From my knowledge of current graphics hardware it should be supported on the 
cards required volumizer.

The answers to these questions will be influential as to whether SGI 
Volumizer will be used as part of ongoing research involving Sydney 
University and The BMIT research group to develop software for Clinical 
Medical Visualization.

Regards

Hugh Macready 




From info-volumizer-owner@els.sgi.com Sun Oct  3 07:56:44 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i93EtP143232476;
	Sun, 3 Oct 2004 07:55:25 -0700 (PDT)
Received: from bullet.uchicago.edu (bullet.uchicago.edu [128.135.106.30])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with ESMTP id i91Gmjva3287853
	for <info-volumizer@els.sgi.com>; Fri, 1 Oct 2004 09:48:46 -0700 (PDT)
Received: from bullet.uchicago.edu (localhost.localdomain [127.0.0.1])
	by bullet.uchicago.edu (8.12.11/8.12.11) with ESMTP id i91GmiOI024499;
	Fri, 1 Oct 2004 11:48:44 -0500
Received: (from fdech@localhost)
	by bullet.uchicago.edu (8.12.11/8.12.11/Submit) id i91Gmitl024498;
	Fri, 1 Oct 2004 11:48:44 -0500
Date: Fri, 1 Oct 2004 11:48:44 -0500
From: Fred Dech <fdech@uchicago.edu>
To: Praveen Bhaniramka <praveenb@sgi.com>
Cc: info-volumizer@els.sgi.com
Subject: [info-volumizer] custom loading of DICOM datasets
Message-ID: <20041001164844.GC22546@bullet.uchicago.edu>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.4.1i
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

hi Praveen.

i was successful in loading some of our DICOM datasets using the XML method
with XMLViewer example.  it's clear to me, though, that we are going to need
to write a custom multiple DICOM datafile loader (similar to the VTK loader)
in order to get something generic enough to load any series automatically
with the correct data spacing, volume dimensions etc.

i don't see any Volumizer example code that sets up a volume from loading
multiple slice data.  there isn't one i'm missing, is there?

another topic.
speaking of VTK, i've been unable to build the modules/classes in
/usr/share/Volumizer2/src/apps/VTK/, because 'make' fails during the compile
of vtkOpenGLVolumeTextureMapper3D.cxx.
neither vtkImageData::GetSpacing nor vtkImageData::GetOrigin are found.
this is understandable since i searched through VTK classes for quite a while
looking for declarations of these in a header file and found none.  VTK uses
them all over the place in source as well.
i have VTK 4.5 installed.  do you know how to get these vz/VTK modules to
build successfully?

thanks.

--fred


From info-volumizer-owner@els.sgi.com Mon Oct  4 01:47:55 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i948l0dQ3290901;
	Mon, 4 Oct 2004 01:47:00 -0700 (PDT)
Received: from sgindia.newdelhi.sgi.com (sgindia.newdelhi.sgi.com [134.14.90.2])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with ESMTP id i948gMva2082673
	for <info-volumizer@els.sgi.com>; Mon, 4 Oct 2004 01:42:24 -0700 (PDT)
Received: from praveenlaptop ([134.14.90.76]) by sgindia.newdelhi.sgi.com (980427.SGI.8.8.8/980728.SGI.AUTOCF) via SMTP id NAA26155 for <info-volumizer@els.sgi.com>; Mon, 4 Oct 2004 13:00:19 +0530 (IST)
Message-ID: <000101c4a9ee$111e5e50$4c5a0e86@praveenlaptop>
From: "Praveen Bhaniramka" <praveenb@sgi.com>
To: <info-volumizer@els.sgi.com>
References: <20040918065454.38985.qmail@web52709.mail.yahoo.com> <00a801c49ed3$52ad6580$4c5a0e86@praveenlaptop> <20040929165935.GC16751@bullet.uchicago.edu> <Pine.SGI.4.56.0409300726000.1253723@mrcoffee.engr.sgi.com> <008901c4a844$07851060$a70a4e81@pclg4518>
Subject: Re: [info-volumizer] Using pixel shading for multiple data sets
Date: Mon, 4 Oct 2004 12:07:20 +0530
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

Hi Hugh,

The volumes that you are trying to render - are they perfectly overlapping
volumes or are these two separate volumes that you are trying to blend
together? See the XML files - twoVolumes.vz and fp.vz under data/XML
directory to see what I mean. The first case is typically more useful for
rendering multiple co-registered volumes. In this case, you need to
implement a _new shader_ to come up with the final desired effect that you
are looking for. Solutions -

    - If what you are trying to do, can be done using the "standard
fixed-function OpenGL pipeline, you can just use the existing vzTMShader
class directly and write a simple "multiple-pass shader" play with the right
blending modes, etc to do what you need to do. See CustomShader.h under
src/apps/simple/tmRenderAction. Currently, the class selects the
vzTMFragmentProgram for implementing the shader on ATI Radeon 9xxx but the
other multi-pass implementation should work well on the same hardware as
well.

    - The OpenGL fragment program extension allows binding only one fragment
program as part of the current GL state. So you will need to write a new
fragment program to do what you need to do. There are simple ones that you
can use directly or modify under src/shaders/ to get started.

    - The vzTMISLShader was not ported to Windows since it uses the OpenGL
Shader product for the shader generation. Shader however is only available
on IRIX and 32-bit Linux.

hth,
Praveen

----- Original Message -----
From: "Hugh Macready" <hmacread@it.usyd.edu.au>
To: <info-volumizer@els.sgi.com>
Sent: Saturday, October 02, 2004 11:22 AM
Subject: [info-volumizer] Using pixel shading for multiple data sets


> Hi Praveen,
>
> I am working on a project in which i need to try out different methods of
> fusing two volumetric data sets.  I am working on a windows platform with
> volumizer 2.7 with a an ATI Radeon 9800 pro.
>
> Currently I am rendering both to the screen using a vzTMLUTShader.h.  This
> has yeilded very good results for a single volume and thus I would like to
> continue using it.
>
> 1.  Is there a way to use generic OpenGL calls to provide simple Alpha
> Blending of the two volume renders?  Currently I am using the following
> calls for rendering and one volume render is completely overlays the
other.
>
> glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
>
>   renderAction->beginDraw(VZ_RESTORE_GL_STATE_BIT);
>   renderAction->draw(shape1);
>   renderAction->draw(shape2);
>   renderAction->endDraw();
>
> 2.  Were I to use vzTMFragmentProgram.h would i be able to continue using
> vzTMLUTShader.h or would all the LUT shader have to be re-written using
the
> callbacks provided?
>
> 3.  Is there a reason why the vzTMISLShader has not been ported to
windows?
> From my knowledge of current graphics hardware it should be supported on
the
> cards required volumizer.
>
> The answers to these questions will be influential as to whether SGI
> Volumizer will be used as part of ongoing research involving Sydney
> University and The BMIT research group to develop software for Clinical
> Medical Visualization.
>
> Regards
>
> Hugh Macready
>
>
>


From info-volumizer-owner@els.sgi.com Mon Oct  4 01:47:54 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i948l0Pp3308741;
	Mon, 4 Oct 2004 01:47:00 -0700 (PDT)
Received: from sgindia.newdelhi.sgi.com (sgindia.newdelhi.sgi.com [134.14.90.2])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with ESMTP id i948gMva3321033
	for <info-volumizer@els.sgi.com>; Mon, 4 Oct 2004 01:42:24 -0700 (PDT)
Received: from praveenlaptop ([134.14.90.76]) by sgindia.newdelhi.sgi.com (980427.SGI.8.8.8/980728.SGI.AUTOCF) via SMTP id NAA21420 for <info-volumizer@els.sgi.com>; Mon, 4 Oct 2004 13:00:18 +0530 (IST)
Message-ID: <000001c4a9ee$10f9bf50$4c5a0e86@praveenlaptop>
From: "Praveen Bhaniramka" <praveenb@sgi.com>
To: <info-volumizer@els.sgi.com>
References: <20041001164844.GC22546@bullet.uchicago.edu>
Subject: Re: [info-volumizer] custom loading of DICOM datasets
Date: Mon, 4 Oct 2004 11:45:19 +0530
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

Hi Fred,

I am not sure what you mean by "sets up a volume from loading multiple slice
data"? The only examples that we currently provide are for loading
individual DICOM slices into a 3D volume texture.

As for the VTK issue, we currently test and develop our VTK integration code
using VTK 4.2. I am not sure what changes VTK 4.5 might have made. I will
try to look into this and get back to you.

Cheers,
Praveen

----- Original Message -----
From: "Fred Dech" <fdech@uchicago.edu>
To: "Praveen Bhaniramka" <praveenb@sgi.com>
Cc: <info-volumizer@els.sgi.com>
Sent: Friday, October 01, 2004 10:18 PM
Subject: [info-volumizer] custom loading of DICOM datasets


> hi Praveen.
>
> i was successful in loading some of our DICOM datasets using the XML
method
> with XMLViewer example.  it's clear to me, though, that we are going to
need
> to write a custom multiple DICOM datafile loader (similar to the VTK
loader)
> in order to get something generic enough to load any series automatically
> with the correct data spacing, volume dimensions etc.
>
> i don't see any Volumizer example code that sets up a volume from loading
> multiple slice data.  there isn't one i'm missing, is there?
>
> another topic.
> speaking of VTK, i've been unable to build the modules/classes in
> /usr/share/Volumizer2/src/apps/VTK/, because 'make' fails during the
compile
> of vtkOpenGLVolumeTextureMapper3D.cxx.
> neither vtkImageData::GetSpacing nor vtkImageData::GetOrigin are found.
> this is understandable since i searched through VTK classes for quite a
while
> looking for declarations of these in a header file and found none.  VTK
uses
> them all over the place in source as well.
> i have VTK 4.5 installed.  do you know how to get these vz/VTK modules to
> build successfully?
>
> thanks.
>
> --fred
>


From info-volumizer-owner@els.sgi.com Mon Oct  4 19:57:54 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i952tScD3336142;
	Mon, 4 Oct 2004 19:55:28 -0700 (PDT)
Received: from bullet.uchicago.edu (bullet.uchicago.edu [128.135.106.30])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with ESMTP id i94ELeva3270138
	for <info-volumizer@els.sgi.com>; Mon, 4 Oct 2004 07:21:41 -0700 (PDT)
Received: from bullet.uchicago.edu (localhost.localdomain [127.0.0.1])
	by bullet.uchicago.edu (8.12.11/8.12.11) with ESMTP id i94ELdXZ005951;
	Mon, 4 Oct 2004 09:21:39 -0500
Received: (from fdech@localhost)
	by bullet.uchicago.edu (8.12.11/8.12.11/Submit) id i94ELdoK005950;
	Mon, 4 Oct 2004 09:21:39 -0500
Date: Mon, 4 Oct 2004 09:21:39 -0500
From: Fred Dech <fdech@uchicago.edu>
To: Praveen Bhaniramka <praveenb@sgi.com>
Cc: info-volumizer@els.sgi.com
Subject: Re: [info-volumizer] custom loading of DICOM datasets
Message-ID: <20041004142139.GH22546@bullet.uchicago.edu>
References: <20041001164844.GC22546@bullet.uchicago.edu> <000001c4a9ee$10f9bf50$4c5a0e86@praveenlaptop>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <000001c4a9ee$10f9bf50$4c5a0e86@praveenlaptop>
User-Agent: Mutt/1.4.1i
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

On Mon, Oct 04, 2004 at 11:45AM, Praveen Bhaniramka said:
> Hi Fred,
> 
> I am not sure what you mean by "sets up a volume from loading multiple slice
> data"? The only examples that we currently provide are for loading
> individual DICOM slices into a 3D volume texture.
>
hi Praveen.

what i was getting at was rather than pre-processing a series of DICOM files
into a single 3D data structure, to load the multiple 2D slices and gleen
the relevant information from the DICOM headers to sort them and create the
correct Volumizer structure in memory before, say, the point where the
example programs create a vzShapeSet, for example.

i think i found a starting point in the manual's discussion of vzBlock.
so i'll work from that.

just to clarify my meaning.  when we were still working in IRIX, we'd built
a DICOM loader that grabbed any series of DICOM files and constructed bricks
from the data array.  we were using Volumizer1 however.  i'd like to do
something similar to that with Volumizer2.

thanks.

--fred
 
> As for the VTK issue, we currently test and develop our VTK integration code
> using VTK 4.2. I am not sure what changes VTK 4.5 might have made. I will
> try to look into this and get back to you.
> 
> Cheers,
> Praveen
> 
> ----- Original Message -----
> From: "Fred Dech" <fdech@uchicago.edu>
> To: "Praveen Bhaniramka" <praveenb@sgi.com>
> Cc: <info-volumizer@els.sgi.com>
> Sent: Friday, October 01, 2004 10:18 PM
> Subject: [info-volumizer] custom loading of DICOM datasets
> 
> 
> > hi Praveen.
> >
> > i was successful in loading some of our DICOM datasets using the XML
> method
> > with XMLViewer example.  it's clear to me, though, that we are going to
> need
> > to write a custom multiple DICOM datafile loader (similar to the VTK
> loader)
> > in order to get something generic enough to load any series automatically
> > with the correct data spacing, volume dimensions etc.
> >
> > i don't see any Volumizer example code that sets up a volume from loading
> > multiple slice data.  there isn't one i'm missing, is there?
> >
> > another topic.
> > speaking of VTK, i've been unable to build the modules/classes in
> > /usr/share/Volumizer2/src/apps/VTK/, because 'make' fails during the
> compile
> > of vtkOpenGLVolumeTextureMapper3D.cxx.
> > neither vtkImageData::GetSpacing nor vtkImageData::GetOrigin are found.
> > this is understandable since i searched through VTK classes for quite a
> while
> > looking for declarations of these in a header file and found none.  VTK
> uses
> > them all over the place in source as well.
> > i have VTK 4.5 installed.  do you know how to get these vz/VTK modules to
> > build successfully?
> >
> > thanks.
> >
> > --fred
> >


From info-volumizer-owner@els.sgi.com Mon Oct  4 19:57:54 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i952tRuN3322903;
	Mon, 4 Oct 2004 19:55:27 -0700 (PDT)
Received: from bullet.uchicago.edu (bullet.uchicago.edu [128.135.106.30])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with ESMTP id i94Fckva3310328
	for <info-volumizer@els.sgi.com>; Mon, 4 Oct 2004 08:38:49 -0700 (PDT)
Received: from bullet.uchicago.edu (localhost.localdomain [127.0.0.1])
	by bullet.uchicago.edu (8.12.11/8.12.11) with ESMTP id i94FcjAc006634;
	Mon, 4 Oct 2004 10:38:46 -0500
Received: (from fdech@localhost)
	by bullet.uchicago.edu (8.12.11/8.12.11/Submit) id i94Fcj9C006633;
	Mon, 4 Oct 2004 10:38:45 -0500
Date: Mon, 4 Oct 2004 10:38:45 -0500
From: Fred Dech <fdech@uchicago.edu>
To: Praveen Bhaniramka <praveenb@sgi.com>
Cc: info-volumizer@els.sgi.com
Subject: [info-volumizer] VTK 4.5 issue
Message-ID: <20041004153845.GN22546@bullet.uchicago.edu>
References: <20041001164844.GC22546@bullet.uchicago.edu> <000001c4a9ee$10f9bf50$4c5a0e86@praveenlaptop>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <000001c4a9ee$10f9bf50$4c5a0e86@praveenlaptop>
User-Agent: Mutt/1.4.1i
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

On Mon, Oct 04, 2004 at 11:45AM, Praveen Bhaniramka said:
> 
> As for the VTK issue, we currently test and develop our VTK integration code
> using VTK 4.2. I am not sure what changes VTK 4.5 might have made. I will
> try to look into this and get back to you.
>
hi Praveen.

i don't know about VTK 4.2, but in VTK 4.5 i think in all the classes
that use GetSpacing() and GetOrigin(), these methods are declared in a macro
in the header files.  i just found this out.  this explains why i couldn't
find the declarations last week and the compiler errors in
/usr/share/Volumizer2/src/lib/VTK.  i've not gotten a chance to look up the
macro yet.

--fred


From info-volumizer-owner@els.sgi.com Mon Oct  4 20:54:38 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i953qlmn3280780;
	Mon, 4 Oct 2004 20:52:47 -0700 (PDT)
Received: from staff.cs.usyd.edu.au (staff.cs.usyd.edu.au [129.78.8.1])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with SMTP id i953Ziva3288621
	for <info-volumizer@els.sgi.com>; Mon, 4 Oct 2004 20:35:47 -0700 (PDT)
Received: from pc-lg45-18.cs.usyd.edu.au. [129.78.10.167] by staff.cs.usyd.edu.au.; Tue, 05 Oct 2004 13:35:39 +1000
Message-ID: <01f001c4aa8c$3ce090f0$a70a4e81@pclg4518>
From: "Hugh Macready" <hmacread@it.usyd.edu.au>
To: <info-volumizer@els.sgi.com>
References: <20040918065454.38985.qmail@web52709.mail.yahoo.com> <00a801c49ed3$52ad6580$4c5a0e86@praveenlaptop> <20040929165935.GC16751@bullet.uchicago.edu> <Pine.SGI.4.56.0409300726000.1253723@mrcoffee.engr.sgi.com> <008901c4a844$07851060$a70a4e81@pclg4518> <000101c4a9ee$111e5e50$4c5a0e86@praveenlaptop>
Subject: Re: [info-volumizer] Using pixel shading for multiple data sets
Date: Tue, 5 Oct 2004 13:34:36 +1000
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="----=_NextPart_000_01ED_01C4AAE0.0E3950D0"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.2180
X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2900.2180
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

This is a multi-part message in MIME format.

------=_NextPart_000_01ED_01C4AAE0.0E3950D0
Content-Type: text/plain;
	format=flowed;
	charset="iso-8859-1";
	reply-type=original
Content-Transfer-Encoding: 7bit

Thanks for your quick reply.

The volumes I am trying to render are uniformly overlapping and 
co-registered.  They need to be blended together with some sort of depth 
testing.  The way they are blended together is what I am most interested in. 
Refer to the screen shot and particularly to the head section.  This 
currently uses TMLUTShader.h and two seperate LUTs for the different 
volumes.

twoVolume.vz obviously does some form of depth testing to sort visibility of 
the volumes however would the same method work for overlapping volumes?

fp.vz does not successfully render anything to the screen on my system. 
Could it be that my system will not support ARB_fragment_program?

Hugh



----- Original Message ----- 
From: "Praveen Bhaniramka" <praveenb@sgi.com>
To: <info-volumizer@els.sgi.com>
Sent: Monday, October 04, 2004 4:37 PM
Subject: Re: [info-volumizer] Using pixel shading for multiple data sets


> Hi Hugh,
>
> The volumes that you are trying to render - are they perfectly overlapping
> volumes or are these two separate volumes that you are trying to blend
> together? See the XML files - twoVolumes.vz and fp.vz under data/XML
> directory to see what I mean. The first case is typically more useful for
> rendering multiple co-registered volumes. In this case, you need to
> implement a _new shader_ to come up with the final desired effect that you
> are looking for. Solutions -
>
>    - If what you are trying to do, can be done using the "standard
> fixed-function OpenGL pipeline, you can just use the existing vzTMShader
> class directly and write a simple "multiple-pass shader" play with the 
> right
> blending modes, etc to do what you need to do. See CustomShader.h under
> src/apps/simple/tmRenderAction. Currently, the class selects the
> vzTMFragmentProgram for implementing the shader on ATI Radeon 9xxx but the
> other multi-pass implementation should work well on the same hardware as
> well.
>
>    - The OpenGL fragment program extension allows binding only one 
> fragment
> program as part of the current GL state. So you will need to write a new
> fragment program to do what you need to do. There are simple ones that you
> can use directly or modify under src/shaders/ to get started.
>
>    - The vzTMISLShader was not ported to Windows since it uses the OpenGL
> Shader product for the shader generation. Shader however is only available
> on IRIX and 32-bit Linux.
>
> hth,
> Praveen
>
> ----- Original Message -----
> From: "Hugh Macready" <hmacread@it.usyd.edu.au>
> To: <info-volumizer@els.sgi.com>
> Sent: Saturday, October 02, 2004 11:22 AM
> Subject: [info-volumizer] Using pixel shading for multiple data sets
>
>
>> Hi Praveen,
>>
>> I am working on a project in which i need to try out different methods of
>> fusing two volumetric data sets.  I am working on a windows platform with
>> volumizer 2.7 with a an ATI Radeon 9800 pro.
>>
>> Currently I am rendering both to the screen using a vzTMLUTShader.h. 
>> This
>> has yeilded very good results for a single volume and thus I would like 
>> to
>> continue using it.
>>
>> 1.  Is there a way to use generic OpenGL calls to provide simple Alpha
>> Blending of the two volume renders?  Currently I am using the following
>> calls for rendering and one volume render is completely overlays the
> other.
>>
>> glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
>>
>>   renderAction->beginDraw(VZ_RESTORE_GL_STATE_BIT);
>>   renderAction->draw(shape1);
>>   renderAction->draw(shape2);
>>   renderAction->endDraw();
>>
>> 2.  Were I to use vzTMFragmentProgram.h would i be able to continue using
>> vzTMLUTShader.h or would all the LUT shader have to be re-written using
> the
>> callbacks provided?
>>
>> 3.  Is there a reason why the vzTMISLShader has not been ported to
> windows?
>> From my knowledge of current graphics hardware it should be supported on
> the
>> cards required volumizer.
>>
>> The answers to these questions will be influential as to whether SGI
>> Volumizer will be used as part of ongoing research involving Sydney
>> University and The BMIT research group to develop software for Clinical
>> Medical Visualization.
>>
>> Regards
>>
>> Hugh Macready
>>
>>
>>
>
> 

------=_NextPart_000_01ED_01C4AAE0.0E3950D0
Content-Type: image/jpeg;
	name="Hot metal colour scheme for PET.JPG"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="Hot metal colour scheme for PET.JPG"

/9j/4AAQSkZJRgABAQEAYABgAAD/4QAWRXhpZgAASUkqAAgAAAAAAAAAAAD/2wBDAAgGBgcGBQgH
BwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/
2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy
MjIyMjIyMjIyMjL/wAARCAIoAiUDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQF
BgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS
0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4
eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi
4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl
8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImK
kpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP0
9fb3+Pn6/9oADAMBAAIRAxEAPwDnr/xFLrc292d7WIlbeBzkInOMjoW9T+A4wAkVzEq/8eluT7xi
k8B6PFrevWWmzu6RTB8sgGRiNmHXjqK9d/4VHpf/AD/3eP8AdT/Cvtq+Ow+CaoyXS581LCVa8nOG
uvc8oN/GB/x6W3/foUw6jF/z523/AH6FdV4/8H2fhizsZLSSR2nldW3gdAMismw8K2l1baI0+rNb
z6v5wgQ225FaNwmGfeDyWGMKev5608bh5UlWeibts/PtfsZPCVVNwe68zKOoxf8APpbf9+hQdRi/
59Lb/v0KuyeHrax0afUNRvJ4zDqT6aYba3WUmRULE5aRBjhh+Apllo2mXmgX+rPfX0S2Ag86IWUb
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
vs/l+SO7Cfwl8/zYlFFFeYdAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA
UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFA60UDrTW4HSXP+otP+uCfyFFFz/qLT/rgn8hRX
3UPgXovyPOQniT/jx0v/AHH/AJiudrovEn/Hjpf+4/8AMVztfL5x/vs/l+SOnCfwl8/zEooorzDo
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAoHWigdaa3A6Wf/AFNr/wBcE/lRRP8A6m1/64J/Kivu4fBH0X5HmDfEf/Hjpf8A
uP8AzFc7XReI/wDjx0v/AHH/AJiudr5bOP8AfZ/L8kdeE/hL5/mJRRRXmHQFFFFABRRRQAUUUUAF
FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRTlUswVQSScADvQA2itOPRLp1BYxoO+5ulOOjO
P+XmH8zQBlUVpHR37XMGfQtim/2RcH7rwt9HFAGfRWj/AGRcj7xVfqGx+gpp0uc/caKQ+ivz+tAF
CirRsLncFMW0npuYDP5mklsriE4eFxnpgZB/GgCtRUskE0QBkidAem5SKioAKKKKACiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKB1ooHWmtwOl
n/1Nr/1wT+VFE/8AqbX/AK4J/Kivu4fBH0X5HmDfEf8Ax4aX/uyfzFc7XReI/wDjw0v/AHZP5iud
r5bOP99n8vyR14T+Evn+YlFFFeYdAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
AUUUUAFW9O/5Clp/12T+YqpVvTv+QnaY/wCeyfzFAHYmzXzGKttGOwyR/wDWqJraXPMq7ezGXj9B
VsEHJPUdwOn+FWLZv3rcnkDupz/jQBiyRTqwXDnPTDgg/pUThlJV0bPoyqa6YsCCuMr6cMPypnlR
Y3bAR65yPz7fQ0AcwQFPIC/8BZf1FG4txksP+AyD/Guhk060lbc6ur+qEr+YHX8KrPokbtv35Xtj
DD88Z/A0AZAcj5QcZ/hDdf8AgLUK+3IHyZ7D5c/8BPBq7Lo9zHkggxeobI/FT0/OqxtZo4ySny5w
Qvb6qaAGggDZtHI5UDr/AMAP9KjNrasp/cR47lVyB9f4hS7TjaF6fwgf+yn+lLk/e9P4gTx+PUfj
QBAdLtWTAQjPRlbJ/Dsf0NVH0ZghZJlY544wPp7H61phsnpnPXAGT+HQ/hzShv4s57ZB/Tnr9DQB
hzabcxANt8wdDsySD6EdaqOjRsVdSrDsRg11IbBH5ZHH4f8A1jSkK42soIIxwvX2x/TrQByVFdDJ
pVo65VSmDnKt2/Ht71Rn0eZGJiZXXsM4NAGZRUksMkEhjkUqw7VHQAUUUUAFFFFABRRRQAUUUUAF
FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABQOtFA601uB0s/8AqbX/AK4J/Kiif/U2v/XBP5UV
93D4I+i/I8wb4j/48NL/AN2T+Yrna6LxH/x4aX/uyfzFc7Xy2cf77P5fkjrwn8JfP8xKKKK8w6Ao
oooAKKKKACiiigAooooAKKKKACiinAFiAOp4oAbWxpehTajiRyUi9ccmr+heH/OInuR0OQuf516X
4Uh06HVU+25EarlDzgN2zigDlINCt4YlXYDj1UUkujQfwov5V7BN5d+RDqstnPbDOGXerL9MCuE1
O0htb2RIGLw7jsJ64oA5CXQIJBzGv/fNZF34Z25aJ2U+hHFdzgU14lcYIoA8rubSW0k2SqR6Hsar
16FqumR3Nu8bDnGQfQ15+6FHZW6g4NADat6bxqtp/wBdk/mKqVb0z/kK2n/XVf50AdsVBJI5x3A6
fj2qa3Q+YSN3Qf3f6dag7564HXHT8e341YthiQnB6A52j+lAD2ViM4PHcc//AF6Tcw+bnP8AeH+P
+NSSHPP64/woyDyRknuBg/4GgBnmZ7Yxzxkfp2/CpFkyc9c9+Mn/ABphA7YOPQkEf4fypwjDc9Sf
bn9OtAEqyA+/bj/69A2SEZUPjgYGce2D/KmbCTwd36n/AOvTACeOp9uT+Xf6daAHPZQTHJUHH3QB
kL+B5/CqsmkKxLLJk9mz938euPr0qyHY+5+n+T/UVKJiTuJOeu4Hn8/6/nQBiy6VKu7ADAdTjv7j
p+IqmYiDllYZ4B7n2z3+h5rqA4JAPX6c/lQ0ccvzMMt/eB5/+v8A5FAHKbDnHXt/9b/6xo+bHTdx
2Bz/APX/AJiugm0iKTlMZPVs/p9P5Vn3Gm3EQLAB06Ak8/j9PzoAob+pP1yDg/59/wA6cGweD07j
jH+f0+lOdcOyuvzDqD1/w/oaZtBPB6fgR/n9KAHMFkUq6hgRzxwfqKp3GkQTkshMTH+6Pl/KrWGU
/TuOCP8AP6fSnB+fcdwP6UAc/c6ZcW43AeYhJ5QE/nVGuw3ZGc/iP8/5/Oq89hbXPzOpV+m9Tj/P
+fSgDl6Kv3elXFsGfAeMc7geg96oUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU
UAFA60UDrTW4HSz/AOptf+uCfyoon/1Nr/1wT+VFfdw+CPovyPMG+I/+PHS/9x/5iudrovEf/Hjp
f+4/8xXO18tnH++z+X5I68J/CXz/ADEooorzDoCiiigAooooAKKKKACiiigAooooAKcjFHVh1BzT
aKAPRNNut0EbDGCB0rUW5wQa5Tw9PvsguclDgit9WoA1xqLlfvfrUclz5uN3X61RVs/5FLnHp+Io
As+avrSNMB0GagLH+8PwFNzx/U0ANuWLDmuD1y3EGosQMBxuru2GVrmvElrvtlnA5jOD9DQBy1W9
N/5Ctp/12T+YqpVvTP8AkK2n/XVf50Ads33v8f8AP86mtl/eN8uOB/CAarySLke3r/n+dSW7r5jf
KBwOq4oAtyA5z+uMH8xTcZ7cn2wT/Q0O4/8A1jB/PpTdwyB69iME/wBDQAueOece+CP8Kev+cjH8
qjMgPBPQdz0/H/GpExyOPXBGKAH5JP8Ae+vP/wCukDbhg8+x5/8A1/zp3BPP6/4imcEevGeef8/z
oAXhxzz356/n3+vWlKg85PY5OAfz6fjTeOc89+efxz/X86Xv/iMf/W/oaAE2HoBn2xg/l/n2pct1
yT/P/wCvRz0I6diDx/X/AApxORzz9ev+f50AOExwO59Qef8A69SiQHkHn1HBqAqpx3/n/wDXoZT2
5oAfJbQzrtZBgdcAfqKzp9HwwdHJB5JHb6f59qvLIwbqalEwOCe/cUAc5JbzwH54zgdx2/z7/wAq
i+Vuo59uorqiqSfeUHPeqdxpUMnKrt+h/wA/5FAHPlT95Tn6Hkf5/wA96UMR/iP8/wCfzqzcWU9u
WyNwXqR1/wA/571BkNjPPuOv+f8APrQA9W+mP0qpd6VBdnev7mT1AGD9as7CPmU8eopytt68fyoA
5S5s57R9s0ZUdm7H8ar12skcc6eVMiup7Nz+I9KxNR0YwbpbcExAZZSeV/xH60AYtFFFABRRRQAU
UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUDrRQOtNbgdLP/qbX/rgn8qKJ/wDU2v8A1wT+VFfdw+CP
ovyPMG+I/wDjw0v/AHZP5iudrovEf/Hhpf8AuyfzFc7Xy2cf77P5fkjrwn8JfP8AMSiiivMOgKKK
KACiiigAooooAKKKKACiiigAooooA2PD915N6YicCQcfWuxjYHrXnMUjRSrIvVTkV3tlOJ7eOVTk
MM0AXwB/nmngeh/I1Ep4qQH/AD1oAftPqfypuz6n604f55oI9v1oAYV9TmqGo24ntpIiPvKRWgRn
/wCtUEy5Q0AebMpVip6g4NTWbFb2Bh1Ein9afqUXk6hOn+1n8+aitP8Aj7h/31/nQB1YukK85BzV
qykRnfGMYH8JFZLD5RzyT60+AlHOOP8AgJFAHQNtAGCBnseKjdgmF7n+Ejr/AJ9qzkkmZgiZye2D
XQ6D4avdXuzEhAVQS8rghEGO57UAZ6Nv6Zz0wTn8j/jW7pvhjWdQQNBYSiMjcHkxGp9wWIH5V09p
a+G9D0+dmsft16h2rPKvykf7hJH86WXWtSvbeM2kF05UY2wqTgfQDgUnJLdjSb2Iofh6VtvMv9Xg
tzjJRVEn4ZDD9KlXwboQjw+suG9cDH5Y/rU1hpeu6uUjlS6tlPeSNjgfjitu2+HU+c3GqOwz0WHH
H51yVMfRho2aexl10OWbwVpzN+71yNhnvD0/Wo5fAkvlZtL6O4PZVCjP/j1ehf8ACB2IRwrygk8H
c3Ht1qrd+C7mBlksNSmjAXDIULZPrnNZRzOg3bVC9k+55Xd6DqdixEtrIAOuRkD8RVB45YuJImXP
94V6LcXsyebY60hinQgpLIo/eD8cZp8+k2OuWm2N7aOVR8rAAE/gOK74TjNc0XdESi4uzPNcggc/
getSEk+/86vazoN3pE5jnjOM8OFO0/mKzMnBHf0NUIeDnqM0MAwyDzTNx6EfnS7gT/nNADlLIwwe
KljmBznAP6H8KjB5FGA31oAsHa4wQCD+INUbnS45huX5W9fX8e9TAshBB4/SpUlDAdie3agDAmtZ
rdzuU4B+8Bz+NR8N149xXSuiyAhgOR3+nrWddaaM7oyFPOeP84oAy8FPTH6VIrZH9Cf5GhleFyrr
jseOD1ppTIwuOnQn+VAGbqejicNPbjEg6oABu/8Ar1zjKVYqwIYHBBHIruEbsc5H51narpK3cZng
AE4yTj+P/wCvQBy1FOIKkgggjgg02gAooooAKKKKACiiigAooooAKKKKACiiigAoHWigdaa3A6Wf
/U2v/XBP5UUT/wCptf8Argn8qK+7h8EfRfkeYN8R/wDHjpf+4/8AMVztdF4j/wCPHS/9x/5iudr5
bOP99n8vyR14T+Evn+YlFFFeYdAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV03hu73Rvbk8pyPpX
M1asLo2l2kvbo30oA9ARqlFU7eZZUDA5zVkNQBYXkf5NO2+3/jtQqeamH+etADSPqfwqKQZU1Men
r+NRPyD/AEoA4XxCmzVCf7yA/wBP6VRshm9gHrIv862/FEPMEw90P86yNLGdVtB6zL/OgDoTCdoz
3Pr1/Cpra0Z5Cqj68H+tXXh44IOfRsZ/DvWtpmnlnSNFy7kDjJ5oAvaD4ciKC4umaG3HRscufQVs
XWpmKP7Lb4WIcIqkgc/SrHiDbYfZrOIbFihCso4y3c/jWNp1v/aeuWVo0ioJJQSWJGQDnHQ81nVm
qcHN9C6cOeaj3O48MeCbm4aO81UBU5/0ZgHB9Cef0rvrfSbS2UiK3hQH+7GBVyNAkaqOgGKfXytb
EVKsuaTN720WxGkSJ0VR9BUlFRI0hkbOzaPTrXO2G5LRRRTEZup6LY6qgW6toZCOAWjBI+hry7xX
4cfwtJHdwXDvbSvtCHjYe3fn8q9jrzz4s3axeHUh53tKrfka68JXnTqxSejaNIRc/d8mZvh3WE1G
KTTL4LIki4UPzn25rjPEuiSaNqLRbXMTfPCzDG5aueHvNl1m0SFirNIPmB6V0nxNhWO10osFMvzj
d3I4r6o4jzMHP096U8tjv6GmqOuOgYjn60pyDg/gDQA9cg8c/wA6cHz160wHn+hpc5JHWgCQN3H5
0FQ2SP0qPnginK2ev6UAPDsnB5H5ipd4I4P4VCWBBJ5Hr1pGO0/KRj05xQA54o5lKMB9CP8AOKzb
ixeE5jyy45BHT/PrV9XyPoencVKsgYYf5hjqOooAxMBx7+lKjEHnOfXv+NaF1p4wHi24xngcH/A1
RK7uCCGHqORQBla3pX2iM3UC/vlHzKo++PX61y1egxE5wcf0Ncxr2liynE8K4gl7Afcb0oAxaKKK
ACiiigAooooAKKKKACiiigAooooAKB1ooHWmtwOln/1Nr/1wT+VFE/8AqbX/AK4J/Kivu4fBH0X5
HmDfEf8Ax46X/uP/ADFc7XReI/8Ajx0v/cf+Yrna+Wzj/fZ/L8kdeE/hL5/mJRRRXmHQFFFFABRR
RQAUUUUAFFFFABRRRQAUUUUAFFFFAHRaNeMYNueVOMVux3X96uL06fybpR/Cxwa6iM8CgDVSdT3q
ykikcGsYe1So5B60Aa5Yeo/EVFI4weap+Y+OGNRu7Eck0AZniDEtidoyVYNWBpX/ACF7T/rsv866
WVBJG6tzkYrIj05rTUYp15RJA2PbNAHZWkLXNwERWYjso612eiabLaSpeXBMKKflDHBP4dRWJ4G1
CG31b7TKm6MnGDjgYxXVavZ3dssiK7ToSHjdASGU9/8AH3oAqa+kV7L5yPl9uCQevpXVfDvR7FtJ
i1BIw1wSQ0m45yDyMZwK8+ErclnxjsTWr4H8T3GiXU+nEB4GbemTjGa8zNIzdG8ej19DqwseZyit
+h7dSVhWfimxuEXzGMLnghgcA/WtiG6huATHIGA9K+cuVKnOHxIlPShRgUbveq0+oWttxLMqn86N
CUm9Ei1RWUNfsT9yQvx2Uj+lUr7xOtrGGW2Zs+rY/pTuXGjUbtY0NY1SHSrKSaRwrAfKOMk+wrxv
xhez6oqyzOXeRgqrgDqa2Ne1qXV7yK1DMSTubJztHpWNLbwXWqwxXEnl28IMj45J9AOR3zXVg6Tn
Wj6noxpLD0XJ72NDwtoFyxN3LttYbYAySMysR+tZnjbX11bVEZAFggTZGOvHrV7XvFIe3e00+H7P
bscFUxlvqe9cJcymVHZj8x+XmvqzwSnDdOAD68n+dW1uEcAdPaqJj2H0yKCOaANQAEjFHcg+ves5
J3jOQcirUV0r8Nxz3oAnHUf5NLwQf8mk4IGPyNJ7HtQA85Az1HqKQvz1/maQn8ffv/8AXobByQfx
FACZyCOhz605W5wf/r1EfTj+hpwOflPPsaAL8bDGOxGDVa5tEbaScejDt9afGSOmSPyNOuG/cDnH
I6GgDMaNg2GGG9exp0ltHqFq9rLnbIMcdVPYirUnUHHI6HGaWEDzFbHfgAY/+vQB5jIhjkZD1UkG
mVNdf8fc3/XRv51DQAUUUUAFFFFABRRRQAUUUUAFFFFABQOtFA601uB0s/8AqbX/AK4J/Kiif/U2
v/XBP5UV93D4I+i/I8wb4j/48dL/ANx/5iudrovEf/Hjpf8AuP8AzFc7Xy2cf77P5fkjrwn8JfP8
xKKKK8w6AooooAKKKKACiiigAooooAKKKKACiiigAooooAUEggjqK6/T3F1ZJIp+bGD9a4+tnw/e
eTcmBz8snT60AdDsI7UoqyFBGaDDQBGvIx/9egr/AJAqQRGnmIkf/XoAolOelPaAEc81OIfmxirP
lYHagCDTJzaSvERgPytdppHieQWUtjLIQjqQrAcqcfy9a4uWP50KjLKd1WGRlAmhPvgUAXboXFmG
a4GYmOElRsqT/Mfjiq8y/adNkubeUCaHH3TzVqw1FgN8UhR15xmtIX9lNbzm4s4nmkjZfMVQr5Pf
I6n60pJNWZdOTjJSRe8N+IStlbm+QOCMbz3Hoa6h/EMUUWLGZvu8dj9DXBeGbq3is5re5YGNc4DD
nFZEk97G8slpdokO4hVJ6ivmJYOU6kox6H0jdOSUpdTu5vG195qWiyOG7N5h5rRlS5WFrm6keRgM
43k4yK8djuLk36yGQMyv6161bSm70ZQGAJUFhu7VFXD+wa8wnGPLeGgmk6rm7CMDh8gbv89a1rme
OOKcSfMqZIJ/Os+2sbe1i83cDLnj6VynjPxXCii0s2/eEYkPcVkqbqT5YEQgm79CGDV4o2munK+Z
IxxnsozWcl08ry3D8byMZ64rnLRpb25UHKxL1Getbz5Z9o4FfQYPCKk+d7nBj8Spfu4/Mc7+YwUk
8iqG1jceSQSBznFXJNsZ3HqBVe0k3FpeOT69q9A8oryIQw9h2qMj/OK0khDruPU/mKZJa9x29P8A
CgDOYd6bjFWXhZeaiIIoARJnjPB49DVuO6VxhuDjoaqCPfIqDjca14bJEUcDNAERIPIOf50hOTnP
45q39nXHFMa37g80AVGOR9fxFAPQfp1p7xEcdDTDlT83T6ZFAFuHOCPbpT7lQYhzxkdKZAPlOOeO
lOuD+6/4EP50AV5AQfX3Az+lEH3gAOp7A8/nRJ+fuKdAcuCMckcjPP50Aea3XF3P/wBdG/nUFTXX
/H1N/wBdG/nUNABRRRQAUUUUAFFFFABRRRQAUUUUAFA60UDrTW4HSz/6m1/64J/Kiif/AFNr/wBc
E/lRX3cPgj6L8jzBviP/AI8dL/3H/mK52ui8R/8AHjpf+4/8xXO18tnH++z+X5I68J/CXz/MSiii
vMOgKKKKACiiigAooooAKKKKACiiigAooooAKKKKACnxu0ciupwVORTKKAO4067FzaxyDqRyK0Vb
NcfoF55dz9nc/K/T2NdYhJA70AWlwe1ShAe36Zqsp5qwh4oAaUG+lcYPWpByR/jSSA54BoArso3p
7g/0qy9rIoV4myjDP0qrOShQ9QDyav2lwNnlt07ZoAoPC0UokA68Nip1imU5TJDdia0j5UrCMDJO
KlVUM8ZVSRk/d4oGmcrcRyRXBQFlY+9EcjANGD0GeDWxr1oy3STRqenIPeubkmY3TFehrnqr3W1u
ehhJN1FFu6JtLWJrz962ADXSR63qFoDLAu6LnC57VysMZd2OcH+dbNo8jWhUscZIOKylhqdT3pq5
s8TNScIdx9346uZ7cwpD5bjjd6VzThpZw0jbnc5JPNXL63VZMqME+lUU3JIGPIFZUaVOlP3VY66k
5SpPuaumoYpDx0rVOM8cVTtWEqhx+NWCcDNeitjwKjvIhut0h2Ke2D+NEUfkxBR1J6UkkgALMcVJ
ZqZVEh6ds0yC0vygKecevWgsD7/zFK2eB+hqMj/JoAkMat1/MVXltQeR+YqxyMf5NLvyxP6igDKR
PLvh6AY4/wA/StpTuXNZBO+Z5OOWP+H9KuQzcdeaALyK0jqijLMcAetbR8J6vtY/ZlLKMlRIMj8M
1jW8m145AeVINdjNqun37JdzSzw3AUBxFJgOR36daAOMntmjmMcqFXXqD2qCWBdhOOlb/iLVv7Xv
klCBRHGIwR1IHqaw5nATGeTQBXtyVcx8kEZANLeYMHr8w+vWmI3+kxqMcg/yp95/qCCO44P1oArb
8kKeT29amgOZAcg8jnJP61QnJGCD0554x+VWrOYTENnJBwec0Aec3X/H1N/10b+dQ1Nc/wDHzN/v
t/OoaACiiigAooooAKKKKACiiigAooooAKB1ooHWmtwOln/1Nr/1wT+VFE/+ptf+uCfyor7uHwR9
F+R5g3xH/wAeOl/7j/zFc7XReI/+PHS/9x/5iudr5bOP99n8vyR14T+Evn+YlFFFeYdAUUUUAFFF
FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAD43aORXU4ZTkGu5026F3aRyjGSOR71wdbnh2+8m6+z
Ofkfp7GgDrx7/hUy1GqnaPSpUHNAEseaQ/fxUiDjj+dGPnzmgCtMgdGU9CMVWglK/KeGHUVdkG5j
xVK7gYr5sfDr+ooAvWkwFyGJ6A/yq3bTb5Vy3YDI61g2ErSTNn+7Wikm0g5GfrzQBqRMJ53icOeD
gtyPyrlr21WPU3EZypOa0I77Zdl8jODznJrLN21xfvjkk1z4h2gz0cDFuqrdiS0VFuWDEdOlaMSB
Y3XGec8LmsuXTrhnMkZJYc8UyK9kjZo5OHArOjWjOKimdFfCzhN1OhYuwHYnGMdyKyncKrZ6mppb
kMhAb5iaikt2wjdjWbV56nVFclNvyNbS8/ZR1xVx+FOaZbRiOBFX0qO7lCRMAfmPFegj52Tu7kF0
6mIqACTitDTiPsuM96xyMgD3rVsAULRk4BAYf1/pQIuFeelMK08gqf6UbvUUAN2kYB7dqY5AVmPY
Z96sEDOP0NV7kbYHznn5efegClEuIwDSjKnBp6D5aRhQBKkzDHerAuyBVECnc54oAtNck1A8pNR8
mkINAEbOUljkHZu/0NWbidHtc+hGQfrVafGxf94fzqJ/u49TQAXGMAgjHucfr2pbKTbcAlsjIB+b
OKhlDBRtOB+lV45XL4LHI984oA5G4IN1KR0Ln+dQ05/9Y31NNoAKKKKACiiigAooooAKKKKACiii
gAoHWigdaa3A6Wf/AFNr/wBcE/lRRP8A6m1/64J/Kivu4fBH0X5HmDfEf/Hjpf8AuP8AzFc7XReI
/wDjx0v/AHH/AJiudr5bOP8AfZ/L8kdeE/hL5/mJRRRXmHQFFFFABRRRQAUUUUAFFFFABRRRQAUU
UUAFFFFABRRRQAU9HaN1dThgcg0yigD0TQ71b+yjfPzjhh71pbMNXC+GL422oiFj8kvH416JtDKD
QBEoI4pCSoPvVnYMZquwzJj0oAh/GkwvensD6YpMHHegCgiLDeTbTwUBA/E1NJMI1JLZwOwqK+R1
VZlHK8H6GqrtNcW7kZ24zzQOOrIvMyzHPb1pbCP7PbtcyDIOcGq06vGgPOGGAR3rW1J44dBtoFT5
8Dcc15uIk5KMV1Z72GioSb7FvSNSgcsZOlUtVtoLu4zCQGPSqWjQGeVogPm6ip7sPp+rxLJ0PNcb
pclVuL1O+NWNSNmtyCfRJYLNpzkleoqGOcCz2t1B4rtneG50a4C4Y7M151GrPKVGeT0rbC1JVL8/
QyqxUU1E6BboCJQvpVWR2llUHnnNRxMdhVuq8YqzaQGRmkI46CvXTurny8k4tpjo48sv1rQWVbee
KRjhM7WPoD/9cCmCMKPxp0yeZCw9RTEaZiB6dD0xyKjMZ/8Ar1StL5rdRFKNy84PpWpBNHcKGQ9e
f8/5/rQBXZcE9h6HpVa7b9xg9yODWm8YIJxjP5Vl6oRBBHk9XH8jQBEv3aaaEYMgxig0AIBinZpA
eKXFAC5ppopD7UARSjKgf7S/zFRuuBj3qccyxj/bX+Yqe4t8c4/Ed6AKGP8APaq8kO2QEdPrVxkK
n+tKse/Cn244oA87f/WN9TTalnGJ5B6Mf51FQAUUUUAFFFFABRRRQAUUUUAFFFFABQOtFA601uB0
s/8AqbX/AK4J/Kiif/U2v/XBP5UV93D4I+i/I8wb4j/48dL/ANx/5iudrovEf/Hjpf8AuP8AzFc7
Xy2cf77P5fkjrwn8JfP8xKKKK8w6AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
B8cjRSLIpwykEV6rZ3Akto5ByrKCD9a8nr0Pw7c+bo1vnnau38uKAN9ZBgnPaox96oXOF4PX0pyP
+eaAHFaQj3NTA+wP1pp25OV/KgCpPH5kLru7VBpxEiPCcBgSP0q+wTGKzpk+zagskZwJB+o//XQB
Umj/AHsUJHKyYIrQ1KyE1rkAhVXrjoff2qhcuftaEjlm7VrajeCDSyoJ3EYBHp3Brx8XzQqxUT6P
By9pS5nuZOlulpqVvKxG1ztb2qx4xRX1WB4Rxt5AOeay5CXSIxn5iQa2b23T+z4ppZAXzwD3FViL
Rqxn3FhYtwd+hd8Otu0e5MnoR1qv4Z0iK51SR5FyqtkVR0q9MUVxCTgOSRj+VQJrD6a8hiY7mBHF
czpVOaUY9TqjJOPNck1SNBrd1FDgruwMVdijEUQT0FUtJhaRHupsmSRifpWnt5xXt0ouFNRfRHzO
IkpVZSXcYq7wT6dKdGNwOe1SAY4GKROGYe9aGJVlh3NgColE9u+6FsY61otjGQMmoJFwrM5CqBk0
AKuvJHGfPTaw6be9Y15dS3tyJZBtQZ2r6U7yhPOJMcdQD2FOliwBgds0AJHKyAc5FWFnD/WquMCm
cg0AaQOehp2azhKy96kFye4oAuk0wmqxuj71E9wzDHSgC0Jf9JiUZzvX+das4zEDjPzDkfWsC1yb
uI9fnH866CdcxdM/MPr1oAqTJnDd/UUQqA449OOP6U+TsP8A9f8A9eiMYccY/AD9KAPM7z/j8n/6
6N/OoKnvP+P2f/ro386goAKKKKACiiigAooooAKKKKACiiigAoHWigdaa3A6Wf8A1Nr/ANcE/lRR
P/qbX/rgn8qK+7h8EfRfkeYN8R/8eOl/7j/zFc7XReI/+PHS/wDcf+Yrna+Wzj/fZ/L8kdeE/hL5
/mJRRRXmHQFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFdf4Rn3QTQE8o24fQ1
yFbXhi48nWUQ/dlBU/zoA7zHGfSkyMdakYfu89agP9aALKvxyCKMg9G5qMN2pG9xz6UASktxzn61
VvVLxKWXADcn/P4VICexI+tI5d4ymQQRigDGvUeGSOQsSo9qlfdfRYU5OKdcgm3aGUYYc/WqllN9
mmAPKtxXBi6TfvrdHt5ZXXL7Nl2xsHSDzJMegyelVr6d2iSLPAbpWxGElb5WAHc9qwdRdlvTFHk7
W4rlw7dWonLoduItSpyUSMyiJiQMHvVaZd8pYnPFOuoWif52ySOlMCsWBwa7Z03zXRx0a0XTXMdD
or+Za7PQ1phdtZWjI654+X1xWwqnr6V1x2PHqpKbSGNUEjfvOO9Wimahkj28nr0pmY1ZO3Jqley+
dKIF+6OXx+gqS5uGgjwgw5HFV4ImC7upJ5JoAcqY3EfSnsgLYx24qWOP5f1pHGHX8RQBWlgxyKrt
GRWkwytRFFb2oAobSO1NNaAg+lRNBgmgCmfxpuCe1XRb+op3kc0AQ2kZ+0RnHRh/OugnUbAMdx1+
tZkChZYwB/GP51rXHCc9iOD9RQBUmToMZ9u//wBemxjDAYxz/dxVl1DgAc57Go1j2MOMc/3cUAeW
Xn/H5P8A9dG/nUFWLz/j+uP+urfzNV6ACiiigAooooAKKKKACiiigAooooAKB1ooHWmtwOln/wBT
a/8AXBP5UUT/AOptf+uCfyor7uHwR9F+R5g3xH/x46X/ALj/AMxXO10XiP8A48dL/wBx/wCYrna+
Wzj/AH2fy/JHXhP4S+f5iUUUV5h0BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
BViym+z3sE2cBHBP0zVeigD1mBxJEKjI5YDs1UNHnM2mwSZySgz9avxZLSZ/v/0FACEEUm5hxn86
lxg00qDQAwMO4IpcKehxSbCOlIV9RQA24gEybWH496ybmwkRhsbIPrWyuRx1HvS3gXyUZRnPaplG
6NaVRwd0ULSGa3XdvJLdQKVrceeZWH3ucmtG1UPGwPUfpUd4vCj27VnGjGLujaeKnUsmYN+PMlH8
6T5U29/XNTX68qUznvSSwMFjYrgEZp2aNOaMkrm9pqoYhg8kVoBRxxWbpCZXdkkL2zWjNcLGpJAA
9utaLY4pbiMVA57fpWZd3yx8RqGY8ClnlafgAhPWq8cAc7iOg4+tMkgSN3ZmkO5zVuFcA4pVjIcH
oe/vU6oPxoAVVGBUMid/Q1aVdq0wj5GzQBWaoj8rdKsFcio5EO3igBFah/vZ9aav0pWOR0oAPypj
HnmlJ4703vQBPZqZbuFB/fB/Ln+la93HtXGO469OtZ2lLu1KMkgbQW/p/Wtu7GYsjjJHb3oAym+R
gMcHseafsGV4xz6Y/n1pbhACMjg+oyDTYo28wYH0OD/M9aAPKb3i+uB/01b+ZqvVrUP+Qhc/9dW/
maq0AFFFFABRRRQAUUUUAFFFFABRRRQAUDrRQOtNbgdLP/qbX/rgn8qKJ/8AU2v/AFwT+VFfdw+C
PovyPMG+I/8Ajx0v/cf+Yrna6LxH/wAeOl/7j/zFc7Xy2cf77P5fkjrwn8JfP8xKKKK8w6AooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7TwpP5mnGM9Y3IH06/1roFOJWHsD
/OuO8Jz7byWEn7y7h+H/AOuuwziVcH+GgCcHj2pNueVNNDfgaXv6GgBpBB5GDSjJHQEU7ce4DCnA
K33T+BoAh2jPB/A1JJ81unBJB/EUOvqORUsPMWDzzQBBASSW6VWunZrhQDkelaWEHTP5Vn3Ug8wK
B8xPB9KBp2F+xxXGCO3amXUYWHBBOO5FK7mCLAbAA496ricyq4c8dqTKjfcm0+QrHIF65HSpsOx5
OfY02wi2pv7eoFWioY5NC2FJ3k2RhRt8vt3pRHs49O9JgjnqKcsvY80yR20N1qSOME+nvTVAJ4qz
HxjkEUAIybUP3h/Sq5SrUnIJAH1B4pijigCoI8ZprpmrxReSPzqMxj/9VAGcy7TSH3q3JD3FQ7GH
SgCucAUnTtUzI1M2epoAs6WM3LnOCoUKc+uc/wAhWtPIRDjvkYIHB5rJ00cu/q/BHB4FX55D5fqQ
RyO/NAEU7qwB4Hr6U63dcqeOvUZP6mopcPhhwR3FJGAJEbIPI7k/r/SgDyu+bdf3LesrH9TVap7w
5vJz/wBNG/nUFABRRRQAUUUUAFFFFABRRRQAUUUUAFA60UDrTW4HSz/6m1/64J/Kiif/AFNr/wBc
E/lRX3cPgj6L8jzBviP/AI8dL/3H/mK52ui8R/8AHjpf+4/8xXO18tnH++z+X5I68J/CXz/MSiii
vMOgKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKANLQpvJ1i2OcBm2n8eK7
0H9+cHoo/r/9avNYJDDPHKOqMG/I16QpyzSDux/w/pQBY60u7HBGRTAcjIp+QRzxQAoweQaevJGR
URFPjcjjt6GgCxjj5hn3p4hHO0j6Gmqw2n+tS7h3FAEMkbIuT0rMZGMhkYZrVkUsvyn8Kh8tXXb+
lAFaWJZrUc4YdjVRrZ44CM96uyxGJcjt61HNKWtldT1OOKTRcZNaElsmy3X19jTmZgMdRUMEpON3
NTFhtHUfWmS9xvmAdPyNJw59DTWAJ5/ShVYcigRYQMuMH6GpN7f3R9ahViOg/Cl3Z/hP50ASs5Iz
wfpSibA5qFmIUU0SA9aALiyhh1qQENz1/CqII9alH+9+ZwaAJZF6/wCBqs2M9akPI5NVpMAnmgBH
KjndVeSUKpIHA70rkc4GagkBkeOMnhm5+negDY0+EpDEGHJG4/U8mp7lMp68j69abaMMqD+VWLhc
xj+Lkd+etAGe/wArA+nccU9BuZD1GRzkn/8AVSTLgj2/AinwHcQM5OfXP/6qAPJrv/j7n/66N/Oo
KsXvF9cf9dW/nVegAooooAKKKKACiiigAooooAKKKKACgdaKB1prcDpZ/wDU2v8A1wT+VFE/+ptf
+uCfyor7uHwR9F+R5g3xH/x46X/uP/MVztdF4j/48dL/ANx/5iudr5bOP99n8vyR14T+Evn+YlFF
FeYdAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFej6cxk063dvvMgb86
8+t4TcXMcK9XYLXpcMYSJYwOFGBQAoyOn404c9Pyox60m2gBwOD1pytzyKZnnB/OlAzypoAsggjg
9acCR0/Kq4JA5qVHyOeaAJMk5PQ02Vtq7sc+1SjBT3phXjB5HpQAh/e2xzzxms+6ANmAF6N2rQ8w
KpAA59KwLm6EbFffpSbsaU4uTsi/AyugAABXuasMM9uPaqGmybkfjIq8oGeCRQtUTNcsmhAlPCe1
PXPcA/SnAZ6D8KZJHt9SPxo2DPGPw5qXafR6Xae+fx6/lQBA65FRbeatlRyDUZQUARgU4EjoTSqC
OD+tPx6igCNifWonUk9Ks7fQUwqTQBVK45NQRDfO0nYHaP61ZuHEcbHqcVHCm2NR3HUigC/anJGM
f0q3O+YcHnkdT0qlbHD1anYeWOnUcE0AQzOMZ7j8CKWB8urE5I45bP8AKopQOnbPQ8frT4W+dBk8
EdSOPyoA8pvDm9uD6yN/Oq9T3YxeTj/po386goAKKKKACiiigAooooAKKKKACiiigAoHWigdaa3A
6Wf/AFNr/wBcE/lRRP8A6m1/64J/Kivu4fBH0X5HmDfEf/Hjpf8AuP8AzFc7XReI/wDjx0v/AHH/
AJiudr5bOP8AfZ/L8kdeE/hL5/mJRRRXmHQFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR
QAUUUUAFFFFAGx4ag8/WY8/8s1L/ANP613g557jrXIeDo92oTyY4WPb+Z/8ArV2JXa2RQAo5/wAa
Tbg04AHkUUANI9KhkfadpXn1qztyKrTqxk6E8YoAmVyUBHIPY1JFhl9DnoabDEPKAJ5qxHHkYPOK
AByUUA1WmmZVG0nPpUs2VY7TkelVZPnB7H0oAri7zuUnn3rIuctLnPGeKtsSrNn8RVCeQYAUfNWF
Vtqx6WFhyy5jR0cON/vzitcH1FZ2lAhCW/P0rTzzzwf51rD4Vc4q7TqNocGx1yPeng5HQH6GmdOx
H0o4Pp+IxVGRJn2P4tRvGOOh9P8APNMAGOP5f40UAIXyT/jTC2Dml79aa3IoAkDZp4fHUVAvrUgN
ADy4HbrUTuTSmmOaAKs4LEKO7D+dSIp7DP8AOmuMzRdMbu/0NWFUE46kdj1FAEsJAYetTz/cHOOe
5yKhjX94DnpU8pbYAOBu9eKAK8g7dM9u360kZIkUcjHYkcfgKdIP1/I/nSIpBUYI56YA/QUAeV3v
/H9cf9dW/nVep7v/AI/J8/8APRv51BQAUUUUAFFFFABRRRQAUUUUAFFFFABQOtFA601uB0s/+ptf
+uCfyoon/wBTa/8AXBP5UV93D4I+i/I8wb4j/wCPHS/9x/5iudrovEf/AB46X/uP/MVztfLZx/vs
/l+SOvCfwl8/zEooorzDoCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDs
/BsI+xXE2OTJt/ID/GupABHP/wCquf8ABADaVMO/nH+S10bJtoAjKEc/rSdev51MORSbPSgCNQc+
1OK80FSPalHNACrxU8I2q/uO9QHgf41OmcY/z/n/AOtQBAyg5z1qB1AUlhmrTjqTWbqNwsFseeW4
AoY0m3ZGbMw8vjuxyaqwW6uxZ+vpTDI7ThMcVNPmLaBxnmuKT5lZM9unDkfvdi9bSeU+wdD7VpAj
sfwNZlipdlLfWtIjnkY966oX5dTycQ4ub5Rc/wCQadu/2mpnPoDQP9wVZiP3Z9/qaM5H9TTcnvge
2KXJ5oAT+dHUdTz60mCadjj3+tACDqaeDjvTQOacPSgANRmpDTGoAiX/AFy5x0J5/CplX88dDzUI
B+0KQSMI38xVhTztI/DqKAJ4fvEc5H6VNLxEDnHPUUyEZk4/LNTXA/cZ/UUAUHfzCAoIz6DOfwNP
hQqwBGM47Y/SmxxFSXHIPGQM/oetWEXBXjGSP4duf60AeR3v/H9cf9dW/nVerF5/x/XH/XVv5mq9
ABRRRQAUUUUAFFFFABRRRQAUUUUAFA60UDrTW4HSz/6m1/64J/Kiif8A1Nr/ANcE/lRX3cPgj6L8
jzBviP8A48dL/wBx/wCYrna6LxH/AMeOl/7j/wAxXO18tnH++z+X5I68J/CXz/MSiiivMOgKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO78DnGny56GY/wAhXXKEnQlDnHBr
kvBQzpUp7icj9BXWWICQhiDyOT70ARvHj86YcjrVw45zzj8x/n+lNaMcHj/P+f50AQDBFGwU4xkE
9qACpoAb5fIqVVwaFIDD3p54FAFS5UvGVX8q5u8Je+iibkA5ArqHXIrnrtANdiBHy4rHEO1Ns7cA
r1opi3+ntFAtyvCisx2eebKDIArqb1Ga0aE42kdKwrIwW87I5zXj4evLlb3Z9DWpRluS2BbzQh49
q1duOP0NZ0Lp/aG5DhTxWpt7dPY9K9qjJygmz5rFwUKrSI9v1FOC/wC0fyp23A6EUvHq1aHMMCgf
4mlOOlLj2x9etIcAc8UAJ1p4Ax/9brTAST8oz7mnbWPU0AJinBTTlAz94H68U7aPbP1FAEZFMIqc
io2AAoAhhINxJ1+VR+uanCAntj8xVOJj5kj9AW4I9B/9fNW4ny60AWoBiTB6duaszLlF78+tJboH
/AdKfPG2FXryOp5FAELINu0c/qfy70xE2tjAAJHRcZ/PmiRiG2sM/qf/AK9SrgqGA5yOcEfqeaAP
Gr3/AI/rn/rq38zVep7zP2yfPXzG/nUFABRRRQAUUUUAFFFFABRRRQAUUUUAFA60UDrTW4HSz/6m
1/64J/Kiif8A1Nr/ANcE/lRX3cPgj6L8jzBviP8A48dL/wBx/wCYrna6LxH/AMeOl/7j/wAxXO18
tnH++z+X5I68J/CXz/MSiiivMOgKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKAO58ENjT5x6Tf0FddCjAOo6Bsj6HmuK8Eygx3cfcMrfnn/Cu2gb5gPWgBpcq1PWQeuPpRImTU
O0qeP0oAtKRx/Sn7VIJ/l0qmrn/9VTxze9AEvkA+1I0RVSf8/wCf896mVwAMcGnEgjP8v8/54oAz
264PH1rmtYzHqkLDIJ711csWRwK5fWxnVLdOgH61lX/hs7MB/vES/cPKbUHHbrXMEk3WW711kgVE
ClvlI4rnr2ICfK+teNg5pSPpcVFypuxas9glU5+tbnQdQRXMRkpID39a6S1B+zqTxn16GvapyTWh
8xiabhLVjtrfwn8jRsf1P51J5f8Asn8KTZ7N+VaHKRFMHlh+HNKEHpn1qUIR2x9etKE65/z9aAI9
uOv6U4LnoKccA0ck9PzoAUA9i34AYpfx/X/CkCEnnv6jJ/KniIkc0ARnA/8ArVBKflJPAAyau+Tg
ZNUr0jyxEo5dgv4d/wBKAIootsMYIOSMkdwTzQFKuCOnripN2Xxj8KegDMCOTnqOtAFywm/eAE8Y
9TWpPg7DwTkfeP8AWsa3UiTKntzz1q7NM3loM/xDg80ALdQrIQB+R5pLaPnkg8jnn+ZpGnDbN2OP
Un+YpwlGQw5IIGdxb9TQB4tfjGoXI/6at/M1Wqe7O68nPrIx/WoKACiiigAooooAKKKKACiiigAo
oooAKB1ooHWmtwOln/1Nr/1wT+VFE/8AqbX/AK4J/Kivu4fBH0X5HmDfEf8Ax46X/uP/ADFc7XRe
I/8Ajx0v/cf+Yrna+Wzj/fZ/L8kdeE/hL5/mJRRRXmHQFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA
FFFFABRRRQAUUUUAFFFFAGjo2pHTNQSf/lmflcYzxXp1vMksSTRnKMAQe1eQV0nhvxAdPkFrcHNu
7cMT9z/61AHo6sDwf1pdu7/PNQRurKGQ5U8jniplbp9OlACNGM/1qrMMy8EgDnP+e9XVbPXmopYy
0oI5z7f55oAS3Zmj65x3FTiUr/8AWpwi2xjkEnkmonT2oAlEgYdRz+Vcz4gtyb2AqfmJNbnzKf61
mauGYxSqOV71nVTcGkdOEko1otjPL862VsncBg+9ULyzZVD+mK1tMUTsqEkc85qfV4FjZEj5BPav
CoycaygfS4iS5GzLh09pfLZRjj1rXiiaOMKMkDuBn9KtQIRCqleMZI/qKmEQ6kEf7Qr34xUVZHy1
WrKo7sogH/Z/A4pTu+n1erpjHqp+opu1Qeqj6CqMisqt2GPcf40eWf8AD/61WiAACR+J/wAKBk/j
+ZoArGH5hTwqintgnJIpjSAUASADPTr+v1pcgDt7YquZj+Of8/jTCzMfWgCWWYAcGsDU9Uh064t5
LjdtYtyBnHHUj05rYKZ5PSuJ8Zybr22iH8MZb8zj+lAHUQzR3KrJE2VYZHvU8Z+cA88+vNeb6dqk
+myBozuTqUJOD+FdvpOswaiBj5ZB1Rm5/D1oA6CzYNI2T265qxdjy/LccfNg9CDVS0OJD82ffNW7
18QIenzDoAQaAK8ij5XU4X36fp0qSIFx97PI/i3Y59aoSXYtpEY8IeG54+vtWnCQQrBtw4IIfd+v
SgDxS8GL24HpI386gqxe/wDH9cf9dW/nVegAooooAKKKKACiiigAooooAKKKKACgdaKB1prcDpZ/
9Ta/9cE/lRRP/qbX/rgn8qK+7h8EfRfkeYN8R/8AHjpf+4/8xXO10XiP/jx0v/cf+Yrna+Wzj/fZ
/L8kdeE/hL5/mJRRRXmHQFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR
RRQBv6H4jm00rDKd9v2+XJWu8sdSttQhWSB8qw4yMV5JVi2up7WQPDIyHOTg4B+tAHsCk1Ksnr16
dK4HTvGUibY7qMYA++Cf5c109lr2n3gAS4j3ddu7BFAGyJdxycn+dJnNRLJG2drgj607nP8AnNAD
3j4B61BJbrIpHr7VOGyAPT0/z/n8aMgj+o/z/nrQBlpaSwtlPzBxUvluzqz5GOxOef6Gr2AcH+Qo
2DHt+f8AkVkqMFLmtqbyxNWUeRvQbHIV9h+X/wCqrC3B6jI/3Rx+VRLH83fp2P8AnNBQjjBz9K1M
CczZHT/xwVEZ8DuPxApBDlAcfkBTDGQO4/IUAI0x6/qD/U0zzSeO30/zml8rLZ6+45/Wl8sDJ/P/
AOuaAISzE9T1oCEmpwgz6fWnbQO1AEIi9akCADH9aXd/npTGfA60AMkcAd6838Wy79dYZ5SNV/r/
AFrvru4it4XlmcKijJJry7Ubs3uoT3J48xsge3QfpQBAHB4PWpI5HhkDxttYHINV6cr460AegeGf
EyXMqW14xW4bhWxw34+tdVfAtCu3P3uq/wCFeMM2NpU8jng10KeLrw6WltJnz4SGin3HLYYHDevG
eaAOp1CQqEzx7g4H/wBar2i3vmR+QxyVOV5B7+3ArnIvEdpqcEZuGS3uR94bsA+4J4/Cp49asNOT
zzcxyOvKIrhiT6YXp+NAHC3f/H3Pnr5jfzqCpJZDLM8h6uxY/jUdABRRRQAUUUUAFFFFABRRRQAU
UUUAFA60UDrTW4HSz/6m1/64J/Kiif8A1Nr/ANcE/lRX3cPgj6L8jzBviP8A48dL/wBx/wCYrna6
LxH/AMeOl/7j/wAxXO18tnH++z+X5I68J/CXz/MSiiivMOgKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKejvGwZGZWHQqcGmUUAalrr+pWmAlyzKBgK/P/wBe
up0nxjHNsjvPkc4GdvBPtXBUUAezR3Ec+GjbIP51Lu7/AKivI7HVrrT2zFISvTYxOB9K63TvGcMm
Fu1ETZxnJP64oA67dwf8/wCf6U4N+nOf8/zqhbanaXSboZ42HqrVaVgeVYcenb/P5UAWVcDrj9P/
ANVShlxkqPrtx/KqgLDnPXuDj/61G4g9Me4BH8uKALZcEdj9CD/OoyRnpj/vkVFvZu+fyNLznp+i
igB+Qx6g/m1Izc47j8T/AICoy56E/gW/oKbk9DwPQjj8qAHg8f4f5/Wmlufy6UhIGcsP5/5+lVZ7
+2tkLSTIoGcktigCyWPb+dU76+gsIGmnfaoHpWBqfjGCEFbXEz+obj88Vx19qNzqM3mTvn0UE4H0
FAF3WtfuNUlKKzJbA8J0z9axqKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CgdaKB1prcDpZv8AU2v/AFwT+VFE3+ptf+uCfyor7uHwR9F+R5g3xH/x46X/ALj/AMxXO10XiP8A
48dL/wBx/wCYrna+Wzj/AH2fy/JHXhP4S+f5iUUUV5h0BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAE0VzPbnMM0kZzn5WIrUtfE2pW7fP
OZF9DgEfQ4rFooA62LxvcI2JICR6q4z/ACwatr45hU828p+mFP6GuHooA79fHdmw+aOcH/aVTTv+
E3sev7z/AL9ivPqKAO9fxzaAHalw30VRVeTxwhU+Xbyg+hIGfqa4qigDfu/FeoXK4jYw+pBz+XHF
ZE97c3RJnnkfPYnj8qr0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
RRRQAUDrRQOtNbgdLP8A6m1/64J/Kiif/U2v/XBP5UV93D4I+i/I8wb4j/48NL/3ZP5iudrovEf/
AB4aX/uyfzFc7Xy2cf77P5fkjrwn8JfP8xKKKK8w6AooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKB1ooHWmtwOln/wBTa/8A
XBP5UUT/AOptf+uCfyor7uHwR9F+R5g3xH/x46X/ALj/AMxXO10XiP8A48dL/wBx/wCYrna+Wzj/
AH2fy/JHXhP4S+f5iUUUV5h0BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR
QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUDrRQOtNbgdLP/AKm1/wCuCfyoon/1Nr/1wT+V
Ffdw+CPovyPMG+I/+PHS/wDcf+Yrna6LxH/x46X/ALj/AMxXO18tnH++z+X5I68J/CXz/MSiiivM
OgKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC
iiigAooooAKKKKACgdaKB1prcDpZ/wDU2v8A1wT+VFE/+ptf+uCfyor7uHwR9F+R5g3xH/x46X/u
P/MVztdF4j/48dL/ANx/5iudr5bOP99n8vyR14T+Evn+YlFFFeYdAUUUUAFFFFABRRRQAUUUUAFF
FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU
UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFA60UDrTW4
HSz/AOptf+uCfyoon/1Nr/1wT+VFfdw+CPovyPMG+I/+PHS/9x/5iudrovEf/Hjpf+4/8xXO18tn
H++z+X5I68J/CXz/ADEooorzDoCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoHWigdaa3A6Wf/U2v/XBP5UUT/6m1/64J/Ki
vu4fBH0X5HmE9/HaahaWkbXZjMKsCBHuzkg+orN/se0/6CP/AJB/+vRRWVXA4etVlOpG79WEJzgu
VPT5AdHtf+gh/wCQf/r0n9j2v/QQP/fr/wCvRRWH9nYT+T8X/mV7Wp/N+X+Qf2Pa/wDQQ/8AIX/1
6P7Htf8AoIH/AL9f/Xooqv7Nwn8n4v8AzD2tT+b8v8g/se1/6CB/79f/AF6P7Htf+ggf+/X/ANei
ij+zcJ/J+L/zD2tT+b8v8g/se1/6CB/79f8A16P7Itf+gh/5C/8Ar0UUf2bhP5Pxf+Ye1qfzfl/k
L/ZFp/0EP/IX/wBej+yLT/oIf+Qv/r0UUv7Nwn8n4v8AzK56n8z/AA/yE/si1/6CH/kL/wCvR/Y9
r/0ED/36/wDr0UU/7Nwn8n4v/Mn2tT+b8v8AIP7Itf8AoIf+Qf8A69H9kWv/AEEP/IP/ANeiij+z
cJ/J+L/zD2tT+b8g/si1/wCgh/5C/wDr0f2Ra/8AQQ/8hf8A16KKP7Nwn8n4v/MPa1P5vy/yF/si
0/6CH/kL/wCvR/ZFp/0EP/IX/wBeiil/ZuE/k/F/5lc9T+Z/h/kJ/Y9r/wBBD/yF/wDXo/se1/6C
B/79f/Xoop/2bhP5Pxf+ZPtan835f5B/Y9r/ANBA/wDfr/69H9kWv/QQ/wDIX/16KKP7Nwn8n4v/
ADD2tT+b8v8AIP7Itf8AoIf+Qv8A69H9j2v/AEED/wB+v/r0UUf2bhP5Pxf+Ye1qfzfl/kH9j2v/
AEED/wB+v/r0f2Pa/wDQQP8A36/+vRRR/ZuE/k/F/wCYe1qfzfl/kH9j2v8A0ED/AN+v/r0f2Pa/
9BA/9+v/AK9FFH9m4T+T8X/mHtan835f5B/ZFr/0EP8AyD/9ej+yLX/oIf8AkH/69FFH9m4T+T8X
/mHtan835B/ZFr/0EP8AyF/9ej+yLX/oIf8AkL/69FFH9m4T+T8X/mHtan835f5B/Y9r/wBBA/8A
fr/69H9kWv8A0EP/ACF/9eiij+zcJ/J+L/zD2tT+b8v8g/si1/6CH/kL/wCvR/Y9r/0ED/36/wDr
0UUf2bhP5Pxf+Ye1qfzfl/kH9j2v/QQP/fr/AOvR/Y9r/wBBA/8Afr/69FFH9m4T+T8X/mHtan83
5f5B/Y9r/wBBA/8Afr/69H9j2v8A0ED/AN+v/r0UUf2bhP5Pxf8AmHtan835f5B/Y9r/ANBA/wDf
r/69H9j2v/QQP/fr/wCvRRU/2dhP5Pxf+Ye1qfzfl/kH9j2v/QQ/8hf/AF6P7Htf+ggf+/X/ANei
iq/s3Cfyfi/8w9rU/m/L/IP7Htf+ggf+/X/16P7Htf8AoIH/AL9f/Xooo/s3Cfyfi/8AMPa1P5vy
/wAg/se1/wCggf8Av1/9ej+x7X/oIH/v1/8AXooo/s3Cfyfi/wDMPa1P5vy/yD+x7X/oIH/v1/8A
Xo/se1/6CB/79f8A16KKP7Nwn8n4v/MPa1P5vy/yD+x7X/oIH/v1/wDXo/se1/6CB/79f/Xooo/s
3Cfyfi/8w9rU/m/L/IP7Htf+ggf+/X/16P7Htf8AoIH/AL9f/Xooo/s3Cfyfi/8AMPa1P5vy/wAg
/se1/wCggf8Av1/9ej+yLX/oIf8AkL/69FFH9m4T+T8X/mHtan835f5B/ZFr/wBBD/yF/wDXo/si
1/6CH/kL/wCvRRR/ZuE/k/F/5h7Wp/N+X+Qf2Pa/9BA/9+v/AK9H9j2v/QQP/fr/AOvRRR/ZuE/k
/F/5h7Wp/N+X+Qf2Pa/9BA/9+v8A69H9j2v/AEED/wB+v/r0UUf2bhP5Pxf+Ye1qfzfl/kH9j2v/
AEED/wB+v/r0f2Pa/wDQQP8A36/+vRRR/ZuE/k/F/wCYe1qfzfl/kH9j2v8A0ED/AN+v/r0v9j2v
/QQP/fr/AOvRRR/ZuE/k/F/5h7Wp/N+X+RauWQiJUk3BECbsYziiiiuglH//2Q==

------=_NextPart_000_01ED_01C4AAE0.0E3950D0--




From info-volumizer-owner@els.sgi.com Mon Oct  4 21:17:12 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i954F0V63282229;
	Mon, 4 Oct 2004 21:15:00 -0700 (PDT)
Received: from sgindia.newdelhi.sgi.com (sgindia.newdelhi.sgi.com [134.14.90.2])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with ESMTP id i954B9va3349508
	for <info-volumizer@els.sgi.com>; Mon, 4 Oct 2004 21:11:11 -0700 (PDT)
Received: from praveenlaptop ([134.14.90.76]) by sgindia.newdelhi.sgi.com (980427.SGI.8.8.8/980728.SGI.AUTOCF) via SMTP id IAA83332 for <info-volumizer@els.sgi.com>; Tue, 5 Oct 2004 08:29:02 +0530 (IST)
Message-ID: <055b01c4aa91$57f6fa00$4c5a0e86@praveenlaptop>
From: "Praveen Bhaniramka" <praveenb@sgi.com>
To: <info-volumizer@els.sgi.com>
References: <20041001164844.GC22546@bullet.uchicago.edu> <000001c4a9ee$10f9bf50$4c5a0e86@praveenlaptop> <20041004153845.GN22546@bullet.uchicago.edu>
Subject: Re: [info-volumizer] VTK 4.5 issue
Date: Tue, 5 Oct 2004 09:41:08 +0530
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

Hi Fred,

I looked at the VTK web site but VTK 4.5 does not seem to be available for
download. The current release is still 4.2 and 4.4 still seems to be under
development.

So, for now we would continue to stick to the stable VTK release. I would
suggest posting a message to the vtkusers alias about this specific problem
and see if anyone there knows how to workaround this issue. If I come across
anything, I will let you know.

- Praveen

----- Original Message -----
From: "Fred Dech" <fdech@uchicago.edu>
To: "Praveen Bhaniramka" <praveenb@sgi.com>
Cc: <info-volumizer@els.sgi.com>
Sent: Monday, October 04, 2004 9:08 PM
Subject: [info-volumizer] VTK 4.5 issue


> On Mon, Oct 04, 2004 at 11:45AM, Praveen Bhaniramka said:
> >
> > As for the VTK issue, we currently test and develop our VTK integration
code
> > using VTK 4.2. I am not sure what changes VTK 4.5 might have made. I
will
> > try to look into this and get back to you.
> >
> hi Praveen.
>
> i don't know about VTK 4.2, but in VTK 4.5 i think in all the classes
> that use GetSpacing() and GetOrigin(), these methods are declared in a
macro
> in the header files.  i just found this out.  this explains why i couldn't
> find the declarations last week and the compiler errors in
> /usr/share/Volumizer2/src/lib/VTK.  i've not gotten a chance to look up
the
> macro yet.
>
> --fred
>


From info-volumizer-owner@els.sgi.com Mon Oct  4 21:30:14 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i954SNYc2101585;
	Mon, 4 Oct 2004 21:28:23 -0700 (PDT)
Received: from sgindia.newdelhi.sgi.com (sgindia.newdelhi.sgi.com [134.14.90.2])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with ESMTP id i954R2va3319415
	for <info-volumizer@els.sgi.com>; Mon, 4 Oct 2004 21:27:04 -0700 (PDT)
Received: from praveenlaptop ([134.14.90.76]) by sgindia.newdelhi.sgi.com (980427.SGI.8.8.8/980728.SGI.AUTOCF) via SMTP id IAA85615 for <info-volumizer@els.sgi.com>; Tue, 5 Oct 2004 08:44:53 +0530 (IST)
Message-ID: <057501c4aa93$8f98d990$4c5a0e86@praveenlaptop>
From: "Praveen Bhaniramka" <praveenb@sgi.com>
To: <info-volumizer@els.sgi.com>
References: <20040918065454.38985.qmail@web52709.mail.yahoo.com> <00a801c49ed3$52ad6580$4c5a0e86@praveenlaptop> <20040929165935.GC16751@bullet.uchicago.edu> <Pine.SGI.4.56.0409300726000.1253723@mrcoffee.engr.sgi.com> <008901c4a844$07851060$a70a4e81@pclg4518> <000101c4a9ee$111e5e50$4c5a0e86@praveenlaptop> <01f001c4aa8c$3ce090f0$a70a4e81@pclg4518>
Subject: Re: [info-volumizer] Using pixel shading for multiple data sets
Date: Tue, 5 Oct 2004 09:57:00 +0530
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

Hugh,

No, the technique used by twoVolumes.vz file would not work for your case
since it treats the two volumes as 'two separate shapes, each with a
separate 3D volume'. If the two shapes intersect, you will get incorrect
results for the overlapping region. What you really want is to have 'one
shape with two 3D volumes', which are combined together using the pixel
shader. (Let me know if that does not make sense!).

The ATI Radeon 9800 definitely supports ARB_fragment_program. The reason why
you don't see anything right now is probably that fp.vz is not readily
loadable on Windows as is (it tries to load /usr/tmp/cubes.tiff which
probably does not exist on your Windows system!). Try the other ones like
fpWithBiasAndAdd.vz file which do similar things or modify the fp.vz file to
point it to a valid 3D tiff for the second volume.

Let me know if you still have problems.

- Praveen

----- Original Message -----
From: "Hugh Macready" <hmacread@it.usyd.edu.au>
To: <info-volumizer@els.sgi.com>
Sent: Tuesday, October 05, 2004 9:04 AM
Subject: Re: [info-volumizer] Using pixel shading for multiple data sets


> Thanks for your quick reply.
>
> The volumes I am trying to render are uniformly overlapping and
> co-registered.  They need to be blended together with some sort of depth
> testing.  The way they are blended together is what I am most interested
in.
> Refer to the screen shot and particularly to the head section.  This
> currently uses TMLUTShader.h and two seperate LUTs for the different
> volumes.
>
> twoVolume.vz obviously does some form of depth testing to sort visibility
of
> the volumes however would the same method work for overlapping volumes?
>
> fp.vz does not successfully render anything to the screen on my system.
> Could it be that my system will not support ARB_fragment_program?
>
> Hugh
>
>
>
> ----- Original Message -----
> From: "Praveen Bhaniramka" <praveenb@sgi.com>
> To: <info-volumizer@els.sgi.com>
> Sent: Monday, October 04, 2004 4:37 PM
> Subject: Re: [info-volumizer] Using pixel shading for multiple data sets
>
>
> > Hi Hugh,
> >
> > The volumes that you are trying to render - are they perfectly
overlapping
> > volumes or are these two separate volumes that you are trying to blend
> > together? See the XML files - twoVolumes.vz and fp.vz under data/XML
> > directory to see what I mean. The first case is typically more useful
for
> > rendering multiple co-registered volumes. In this case, you need to
> > implement a _new shader_ to come up with the final desired effect that
you
> > are looking for. Solutions -
> >
> >    - If what you are trying to do, can be done using the "standard
> > fixed-function OpenGL pipeline, you can just use the existing vzTMShader
> > class directly and write a simple "multiple-pass shader" play with the
> > right
> > blending modes, etc to do what you need to do. See CustomShader.h under
> > src/apps/simple/tmRenderAction. Currently, the class selects the
> > vzTMFragmentProgram for implementing the shader on ATI Radeon 9xxx but
the
> > other multi-pass implementation should work well on the same hardware as
> > well.
> >
> >    - The OpenGL fragment program extension allows binding only one
> > fragment
> > program as part of the current GL state. So you will need to write a new
> > fragment program to do what you need to do. There are simple ones that
you
> > can use directly or modify under src/shaders/ to get started.
> >
> >    - The vzTMISLShader was not ported to Windows since it uses the
OpenGL
> > Shader product for the shader generation. Shader however is only
available
> > on IRIX and 32-bit Linux.
> >
> > hth,
> > Praveen
> >
> > ----- Original Message -----
> > From: "Hugh Macready" <hmacread@it.usyd.edu.au>
> > To: <info-volumizer@els.sgi.com>
> > Sent: Saturday, October 02, 2004 11:22 AM
> > Subject: [info-volumizer] Using pixel shading for multiple data sets
> >
> >
> >> Hi Praveen,
> >>
> >> I am working on a project in which i need to try out different methods
of
> >> fusing two volumetric data sets.  I am working on a windows platform
with
> >> volumizer 2.7 with a an ATI Radeon 9800 pro.
> >>
> >> Currently I am rendering both to the screen using a vzTMLUTShader.h.
> >> This
> >> has yeilded very good results for a single volume and thus I would like
> >> to
> >> continue using it.
> >>
> >> 1.  Is there a way to use generic OpenGL calls to provide simple Alpha
> >> Blending of the two volume renders?  Currently I am using the following
> >> calls for rendering and one volume render is completely overlays the
> > other.
> >>
> >> glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
> >>
> >>   renderAction->beginDraw(VZ_RESTORE_GL_STATE_BIT);
> >>   renderAction->draw(shape1);
> >>   renderAction->draw(shape2);
> >>   renderAction->endDraw();
> >>
> >> 2.  Were I to use vzTMFragmentProgram.h would i be able to continue
using
> >> vzTMLUTShader.h or would all the LUT shader have to be re-written using
> > the
> >> callbacks provided?
> >>
> >> 3.  Is there a reason why the vzTMISLShader has not been ported to
> > windows?
> >> From my knowledge of current graphics hardware it should be supported
on
> > the
> >> cards required volumizer.
> >>
> >> The answers to these questions will be influential as to whether SGI
> >> Volumizer will be used as part of ongoing research involving Sydney
> >> University and The BMIT research group to develop software for Clinical
> >> Medical Visualization.
> >>
> >> Regards
> >>
> >> Hugh Macready
> >>
> >>
> >>
> >
> >
>


From info-volumizer-owner@els.sgi.com Tue Oct  5 23:40:16 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i966ct9n3348466;
	Tue, 5 Oct 2004 23:38:55 -0700 (PDT)
Received: from staff.cs.usyd.edu.au (staff.cs.usyd.edu.au [129.78.8.1])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with SMTP id i966Y3va3325546
	for <info-volumizer@els.sgi.com>; Tue, 5 Oct 2004 23:34:06 -0700 (PDT)
Received: from pc-lg45-18.cs.usyd.edu.au. [129.78.10.167] by staff.cs.usyd.edu.au.; Wed, 06 Oct 2004 16:34:00 +1000
Message-ID: <03e101c4ab6e$5103eae0$a70a4e81@pclg4518>
From: "Hugh Macready" <hmacread@it.usyd.edu.au>
To: <info-volumizer@els.sgi.com>
References: <20040918065454.38985.qmail@web52709.mail.yahoo.com> <00a801c49ed3$52ad6580$4c5a0e86@praveenlaptop> <20040929165935.GC16751@bullet.uchicago.edu> <Pine.SGI.4.56.0409300726000.1253723@mrcoffee.engr.sgi.com> <008901c4a844$07851060$a70a4e81@pclg4518> <000101c4a9ee$111e5e50$4c5a0e86@praveenlaptop> <01f001c4aa8c$3ce090f0$a70a4e81@pclg4518> <057501c4aa93$8f98d990$4c5a0e86@praveenlaptop>
Subject: Re: [info-volumizer] Using pixel shading for multiple data sets
Date: Wed, 6 Oct 2004 16:32:56 +1000
MIME-Version: 1.0
Content-Type: text/plain;
	format=flowed;
	charset="iso-8859-1";
	reply-type=original
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.2180
X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2900.2180
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

Hi Praveen,

> No, the technique used by twoVolumes.vz file would not work for your case
> since it treats the two volumes as 'two separate shapes, each with a
> separate 3D volume'. If the two shapes intersect, you will get incorrect
> results for the overlapping region. What you really want is to have 'one
> shape with two 3D volumes', which are combined together using the pixel
> shader. (Let me know if that does not make sense!).
>

That makes perfect sense.  My knowledge of how to program the pixel shader 
of a GPU stops there unfortunately.

The way i interpret the example in the programming guide is that the pixel 
shader facilitates arithmetic operators which can be used to combine volumes 
at a per voxel (or per pixel?) level 'on the fly' in  hardware.  This would 
be very useful .  Even more useful to me would be one of the fragment 
programs which i presume by the name (twoVolumesTwoLuts.fp) allows two 
volumes to be combined with two seperate luts applied to them first.

Please correct me if i'm wrong before i jump in and figure out how to do it. 
Also any other documentation you could point me to on how to write arb 
fragment programs would be much appreciated.

Thanks again for your help

Regards
Hugh Macready


P.S. Here is twoVolumesTwoLuts.fp for reference:

!!ARBfp1.0
TEMP volume;
TEMP volume2;
TEX volume, fragment.texcoord[0], texture[0], 3D;
TEX volume2, fragment.texcoord[1], texture[1], 3D;
TEX volume, volume, texture[2], 1D;
TEX volume2, volume2, texture[3], 1D;
MUL result.color, volume2, volume;
END


> The ATI Radeon 9800 definitely supports ARB_fragment_program. The reason 
> why
> you don't see anything right now is probably that fp.vz is not readily
> loadable on Windows as is (it tries to load /usr/tmp/cubes.tiff which
> probably does not exist on your Windows system!). Try the other ones like
> fpWithBiasAndAdd.vz file which do similar things or modify the fp.vz file 
> to
> point it to a valid 3D tiff for the second volume.
>
> Let me know if you still have problems.
>
> - Praveen
>
> ----- Original Message -----
> From: "Hugh Macready" <hmacread@it.usyd.edu.au>
> To: <info-volumizer@els.sgi.com>
> Sent: Tuesday, October 05, 2004 9:04 AM
> Subject: Re: [info-volumizer] Using pixel shading for multiple data sets
>
>
>> Thanks for your quick reply.
>>
>> The volumes I am trying to render are uniformly overlapping and
>> co-registered.  They need to be blended together with some sort of depth
>> testing.  The way they are blended together is what I am most interested
> in.
>> Refer to the screen shot and particularly to the head section.  This
>> currently uses TMLUTShader.h and two seperate LUTs for the different
>> volumes.
>>
>> twoVolume.vz obviously does some form of depth testing to sort visibility
> of
>> the volumes however would the same method work for overlapping volumes?
>>
>> fp.vz does not successfully render anything to the screen on my system.
>> Could it be that my system will not support ARB_fragment_program?
>>
>> Hugh
>>
>>
>>
>> ----- Original Message -----
>> From: "Praveen Bhaniramka" <praveenb@sgi.com>
>> To: <info-volumizer@els.sgi.com>
>> Sent: Monday, October 04, 2004 4:37 PM
>> Subject: Re: [info-volumizer] Using pixel shading for multiple data sets
>>
>>
>> > Hi Hugh,
>> >
>> > The volumes that you are trying to render - are they perfectly
> overlapping
>> > volumes or are these two separate volumes that you are trying to blend
>> > together? See the XML files - twoVolumes.vz and fp.vz under data/XML
>> > directory to see what I mean. The first case is typically more useful
> for
>> > rendering multiple co-registered volumes. In this case, you need to
>> > implement a _new shader_ to come up with the final desired effect that
> you
>> > are looking for. Solutions -
>> >
>> >    - If what you are trying to do, can be done using the "standard
>> > fixed-function OpenGL pipeline, you can just use the existing 
>> > vzTMShader
>> > class directly and write a simple "multiple-pass shader" play with the
>> > right
>> > blending modes, etc to do what you need to do. See CustomShader.h under
>> > src/apps/simple/tmRenderAction. Currently, the class selects the
>> > vzTMFragmentProgram for implementing the shader on ATI Radeon 9xxx but
> the
>> > other multi-pass implementation should work well on the same hardware 
>> > as
>> > well.
>> >
>> >    - The OpenGL fragment program extension allows binding only one
>> > fragment
>> > program as part of the current GL state. So you will need to write a 
>> > new
>> > fragment program to do what you need to do. There are simple ones that
> you
>> > can use directly or modify under src/shaders/ to get started.
>> >
>> >    - The vzTMISLShader was not ported to Windows since it uses the
> OpenGL
>> > Shader product for the shader generation. Shader however is only
> available
>> > on IRIX and 32-bit Linux.
>> >
>> > hth,
>> > Praveen
>> >
>> > ----- Original Message -----
>> > From: "Hugh Macready" <hmacread@it.usyd.edu.au>
>> > To: <info-volumizer@els.sgi.com>
>> > Sent: Saturday, October 02, 2004 11:22 AM
>> > Subject: [info-volumizer] Using pixel shading for multiple data sets
>> >
>> >
>> >> Hi Praveen,
>> >>
>> >> I am working on a project in which i need to try out different methods
> of
>> >> fusing two volumetric data sets.  I am working on a windows platform
> with
>> >> volumizer 2.7 with a an ATI Radeon 9800 pro.
>> >>
>> >> Currently I am rendering both to the screen using a vzTMLUTShader.h.
>> >> This
>> >> has yeilded very good results for a single volume and thus I would 
>> >> like
>> >> to
>> >> continue using it.
>> >>
>> >> 1.  Is there a way to use generic OpenGL calls to provide simple Alpha
>> >> Blending of the two volume renders?  Currently I am using the 
>> >> following
>> >> calls for rendering and one volume render is completely overlays the
>> > other.
>> >>
>> >> glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
>> >>
>> >>   renderAction->beginDraw(VZ_RESTORE_GL_STATE_BIT);
>> >>   renderAction->draw(shape1);
>> >>   renderAction->draw(shape2);
>> >>   renderAction->endDraw();
>> >>
>> >> 2.  Were I to use vzTMFragmentProgram.h would i be able to continue
> using
>> >> vzTMLUTShader.h or would all the LUT shader have to be re-written 
>> >> using
>> > the
>> >> callbacks provided?
>> >>
>> >> 3.  Is there a reason why the vzTMISLShader has not been ported to
>> > windows?
>> >> From my knowledge of current graphics hardware it should be supported
> on
>> > the
>> >> cards required volumizer.
>> >>
>> >> The answers to these questions will be influential as to whether SGI
>> >> Volumizer will be used as part of ongoing research involving Sydney
>> >> University and The BMIT research group to develop software for 
>> >> Clinical
>> >> Medical Visualization.
>> >>
>> >> Regards
>> >>
>> >> Hugh Macready
>> >>
>> >>
>> >>
>> >
>> >
>>
>
> 




From info-volumizer-owner@els.sgi.com Wed Oct  6 00:16:13 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i967Fhpt3298756;
	Wed, 6 Oct 2004 00:15:43 -0700 (PDT)
Received: from sgindia.newdelhi.sgi.com (sgindia.newdelhi.sgi.com [134.14.90.2])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with ESMTP id i967Erva3381397
	for <info-volumizer@els.sgi.com>; Wed, 6 Oct 2004 00:15:00 -0700 (PDT)
Received: from praveenlaptop ([134.14.90.76]) by sgindia.newdelhi.sgi.com (980427.SGI.8.8.8/980728.SGI.AUTOCF) via SMTP id LAA65218 for <info-volumizer@els.sgi.com>; Wed, 6 Oct 2004 11:32:48 +0530 (IST)
Message-ID: <0b4601c4ab74$2e525440$4c5a0e86@praveenlaptop>
From: "Praveen Bhaniramka" <praveenb@sgi.com>
To: <info-volumizer@els.sgi.com>
References: <20040918065454.38985.qmail@web52709.mail.yahoo.com> <00a801c49ed3$52ad6580$4c5a0e86@praveenlaptop> <20040929165935.GC16751@bullet.uchicago.edu> <Pine.SGI.4.56.0409300726000.1253723@mrcoffee.engr.sgi.com> <008901c4a844$07851060$a70a4e81@pclg4518> <000101c4a9ee$111e5e50$4c5a0e86@praveenlaptop> <01f001c4aa8c$3ce090f0$a70a4e81@pclg4518> <057501c4aa93$8f98d990$4c5a0e86@praveenlaptop> <03e101c4ab6e$5103eae0$a70a4e81@pclg4518>
Subject: Re: [info-volumizer] Using pixel shading for multiple data sets
Date: Wed, 6 Oct 2004 12:44:55 +0530
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

Hello again,

> That makes perfect sense.  My knowledge of how to program the pixel shader
> of a GPU stops there unfortunately.

:-)

> The way i interpret the example in the programming guide is that the pixel
> shader facilitates arithmetic operators which can be used to combine
volumes
> at a per voxel (or per pixel?) level 'on the fly' in  hardware.  This
would
> be very useful .  Even more useful to me would be one of the fragment
> programs which i presume by the name (twoVolumesTwoLuts.fp) allows two
> volumes to be combined with two seperate luts applied to them first.

Yes, the volumes can be combined on a per-voxel basis in the fragment
program. The fragment program itself is applied to each rasterized fragment
(you can just think of a fragment as 'a pixel in the graphics pipeline').

> Please correct me if i'm wrong before i jump in and figure out how to do
it.
> Also any other documentation you could point me to on how to write arb
> fragment programs would be much appreciated.

I typically end up looking at the ARB_fragment_program specifications
directly and they work reasonably well for me. See -
http://oss.sgi.com/projects/ogl-sample/registry/ARB/fragment_program.txt.
Unfortunately, if you are doing this for the first time, you might find the
spec very hard to read/comprehend.

I would suggest just playing with the existing examples like the following
twoVolumesTwoLuts.fp program. If you have very specific needs, chances are
that you can hack your way to getting what you need without having to learn
a whole lot about using the fragment program interface. You should only need
to understand the Volumizer interface through the vzTMFragmentProgram class.
This should be explained to some extent in the pguide and the ref manuals.

Some of this would be become even easier once we support the OpenGL Shading
language in Volumizer, which would allow you to write shaders using a C-type
interface and load them into Volumizer. I am adding some comments in the
following program to help you understand what it does. If you have any more
questions, let me know.

# ARB fragment program version 1.0 header
> !!ARBfp1.0

# Two temporaries - to store the values from the two volumes
> TEMP volume;
> TEMP volume2;

# Sample texture unit 0 to get the value at the current texture coordinate
# This could be your CT/MR volume data for example.
> TEX volume, fragment.texcoord[0], texture[0], 3D;


# Sample texture unit 1 to get the value at the current texture coordinate
# This could be your PET volume data
> TEX volume2, fragment.texcoord[1], texture[1], 3D;

# Now apply the LUT to first volume's sample value using a 1D lookup table
# This lookup table is bound to texture unit 2 using
# vzTMFragmentProgram::setMultiTexCallbacks()
> TEX volume, volume, texture[2], 1D;

# Apply the LUT to second volume's sample value similar to above
# using texture unit 3 in this case.
> TEX volume2, volume2, texture[3], 1D;

# Multiply the results of the above two. You could similarly use other
# arithmetic operations here like ADD, SUB, etc.
> MUL result.color, volume2, volume;

# End... phew!
> END

The following is the list of instructions from the ARB_fragment_program
spec. This list should come in handy if you just want to play around with
the program a bit.

      Instruction    Inputs  Output   Description
      -----------    ------  ------   --------------------------------
      ABS            v       v        absolute value
      ADD            v,v     v        add
      CMP            v,v,v   v        compare
      COS            s       ssss     cosine with reduction to [-PI,PI]
      DP3            v,v     ssss     3-component dot product
      DP4            v,v     ssss     4-component dot product
      DPH            v,v     ssss     homogeneous dot product
      DST            v,v     v        distance vector
      EX2            s       ssss     exponential base 2
      FLR            v       v        floor
      FRC            v       v        fraction
      KIL            v       v        kill fragment
      LG2            s       ssss     logarithm base 2
      LIT            v       v        compute light coefficients
      LRP            v,v,v   v        linear interpolation
      MAD            v,v,v   v        multiply and add
      MAX            v,v     v        maximum
      MIN            v,v     v        minimum
      MOV            v       v        move
      MUL            v,v     v        multiply
      POW            s,s     ssss     exponentiate
      RCP            s       ssss     reciprocal
      RSQ            s       ssss     reciprocal square root
      SCS            s       ss--     sine/cosine without reduction
      SGE            v,v     v        set on greater than or equal
      SIN            s       ssss     sine with reduction to [-PI,PI]
      SLT            v,v     v        set on less than
      SUB            v,v     v        subtract
      SWZ            v       v        extended swizzle
      TEX            v,u,t   v        texture sample
      TXB            v,u,t   v        texture sample with bias
      TXP            v,u,t   v        texture sample with projection
      XPD            v,v     v        cross product

Cheers,
Praveen


From info-volumizer-owner@els.sgi.com Mon Oct 11 10:06:32 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i9BH5NFf3504494;
	Mon, 11 Oct 2004 10:05:23 -0700 (PDT)
Received: from bullet.uchicago.edu (bullet.uchicago.edu [128.135.106.30])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with ESMTP id i9BGtSva3504674
	for <info-volumizer@els.sgi.com>; Mon, 11 Oct 2004 09:55:29 -0700 (PDT)
Received: from bullet.uchicago.edu (localhost.localdomain [127.0.0.1])
	by bullet.uchicago.edu (8.12.11/8.12.11) with ESMTP id i9BGtRMm004707;
	Mon, 11 Oct 2004 11:55:27 -0500
Received: (from fdech@localhost)
	by bullet.uchicago.edu (8.12.11/8.12.11/Submit) id i9BGtQq6004706;
	Mon, 11 Oct 2004 11:55:26 -0500
Date: Mon, 11 Oct 2004 11:55:26 -0500
From: Fred Dech <fdech@uchicago.edu>
To: Praveen Bhaniramka <praveenb@sgi.com>
Cc: info-volumizer@els.sgi.com
Subject: [info-volumizer] lseek compilation problem
Message-ID: <20041011165526.GB2831@bullet.uchicago.edu>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.4.1i
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

howdy.

is there a more elegant hack for the following issue besides commenting
out the second declaration of lseek in /usr/include/unistd.h?  there seems
to be a conflict of some global #defines that allows both to be declared

extern __off_t lseek(...) and
#  define lseek lseek64
extern __off64_t lseek64(...)

in /usr/share/Volumizer2/src/lib/loaders/
~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/c++ -g -DLINUX -MMD -I/usr/X11R6/include -I. -I../../../src/lib/  -I. -I../../../src/lib/ -Wno-deprecated -c VolumeLoader.cxx
In file included from /usr/include/c++/3.3.3/i386-redhat-linux/bits/gthr-default.h:38,
                 from /usr/include/c++/3.3.3/i386-redhat-linux/bits/gthr.h:98,
                 from /usr/include/c++/3.3.3/i386-redhat-linux/bits/c++io.h:37,
                 from /usr/include/c++/3.3.3/bits/fpos.h:44,
                 from /usr/include/c++/3.3.3/iosfwd:49,
                 from /usr/include/c++/3.3.3/ios:44,
                 from /usr/include/c++/3.3.3/ostream:45,
                 from /usr/include/c++/3.3.3/iostream:45,
                 from /usr/include/c++/3.3.3/backward/iostream.h:32,
                 from VolumeLoader.cxx:51:
/usr/include/unistd.h:298: error: declaration of C function `__off64_t 
   lseek(int, long long int, int)' conflicts with
/usr/include/unistd.h:286: error: previous declaration `__off_t lseek(int, long 
   int, int)' here

~~~~~~~~~~~~~~~~~~~~~~~~~~~

i'm running version gcc-c++-3.3.3-7 on Fedora Core2

thanks much.

--fred

From info-volumizer-owner@els.sgi.com Tue Oct 12 08:16:56 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i9CFFqsb3431046;
	Tue, 12 Oct 2004 08:15:52 -0700 (PDT)
Received: from internal-mail-relay.corp.sgi.com (internal-mail-relay.corp.sgi.com [198.149.32.51])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with ESMTP id i9CFE6va3512310
	for <info-volumizer@els.sgi.com>; Tue, 12 Oct 2004 08:14:06 -0700 (PDT)
Received: from mtv-atc-012e--n.corp.sgi.com (mtv-atc-012e--n.corp.sgi.com [192.26.78.44])
	by internal-mail-relay.corp.sgi.com (8.12.9/8.12.10/SGI_generic_relay-1.2) with ESMTP id i9CFE5lb139501058
	for <info-volumizer@sgi.com>; Tue, 12 Oct 2004 08:14:05 -0700 (PDT)
Received: by mtv-atc-012e--n.corp.sgi.com with Internet Mail Service (5.5.2655.55)
	id <441HW6G8>; Tue, 12 Oct 2004 08:14:05 -0700
Message-ID: <AC2D724DEEDEFE46B41B72DC49579A526B56A1@mtv-atc-012e--n.corp.sgi.com>
From: Thomas Tannert <ttannert@sgi.com>
To: "'info-volumizer@sgi.com'" <info-volumizer@sgi.com>
Subject: [info-volumizer] IEEE Vis 2004 OpenGL Volumizer + Linux Visualization Meeting Info
	rmation
Date: Tue, 12 Oct 2004 08:13:58 -0700
MIME-Version: 1.0
X-Mailer: Internet Mail Service (5.5.2655.55)
Content-Type: multipart/alternative;
	boundary="----_=_NextPart_001_01C4B06E.18E719CA"
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.

------_=_NextPart_001_01C4B06E.18E719CA
Content-Type: text/plain

=============================================

  OpenGL Volumizer and Linux Visualization

        "Birds-of-a-Feather" Meeting

            Tuesday, October 12

               5:30pm-7:30pm

           Hyatt Regency Austin

      Room: Texas Ballroom I and II 

=============================================

 

Volumizers and all IEEE Visualization 2004 attendees,

 

Sorry for the late notice, but please join us for the OpenGL Volumizer and
Linux Visualization "Birds-of-a-Feather" meeting tonight in Austin, TX at
IEEE Visualization 2004.  

http://vis.computer.org/vis2004/ <http://vis.computer.org/vis2004/>  

 

We will be discussing the latest news about OpenGL Volumizer Features and
Futures as well as the latest advancements in visualization on Linux.  

 

At the BOF we will be showcasing the new Silicon Graphics Prism, the latest
in advanced visualization on Linux.  For further information on Silicon
Graphics Prism please see the SGI web site at
http://www.sgi.com/products/visualization/prism/
<http://www.sgi.com/products/visualization/prism/> .

 

Agenda:

5:30pm   Social Reception; Drinks & Snacks

5:45pm   Welcome & OpenGL Volumizer Update

         Linux Visualization and SGI Core Rendering News & Updates

         Q&A

7:30pm   Adjourn

 

Following the BOF, please join us at for the Silicon Graphics Prism launch
party.  Shuttles will be provided to take you from the BOF to the party and
back.

 

We look forward to seeing you there!

 

Thank you,

Thomas Tannert  

-------------------------------------------- 

VSG Marketing - SGI 
1500 Crittenden Lane, M/S 526 
Mountain View, CA 94043 
E-mail: ttannert@sgi.com 
Phone: (650) 933 5237 

 


------_=_NextPart_001_01C4B06E.18E719CA
Content-Type: text/html
Content-Transfer-Encoding: quoted-printable

<html xmlns:o=3D"urn:schemas-microsoft-com:office:office" =
xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:st1=3D"urn:schemas-microsoft-com:office:smarttags" =
xmlns=3D"http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Dus-ascii">


<meta name=3DGenerator content=3D"Microsoft Word 11 (filtered medium)">
<o:SmartTagType =
namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags"
 name=3D"State"/>
<o:SmartTagType =
namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags"
 name=3D"City"/>
<o:SmartTagType =
namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags"
 name=3D"place" downloadurl=3D"http://www.5iantlavalamp.com/"/>
<o:SmartTagType =
namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags"
 name=3D"Street"/>
<o:SmartTagType =
namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags"
 name=3D"address"/>
<!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Times New Roman";}
a:link, span.MsoHyperlink
	{color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{color:purple;
	text-decoration:underline;}
p
	{mso-margin-top-alt:auto;
	margin-right:0in;
	mso-margin-bottom-alt:auto;
	margin-left:0in;
	font-size:12.0pt;
	font-family:"Times New Roman";}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Courier New";
	color:windowtext;
	font-weight:normal;
	font-style:normal;
	text-decoration:none none;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
	{page:Section1;}
-->
</style>

</head>

<body lang=3DEN-US link=3Dblue vlink=3Dpurple>

<div class=3DSection1>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'>=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<o:=
p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>&nbsp; OpenGL =
Volumizer and Linux
Visualization<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'>&nbsp;&nbsp;&nbsp;&nbsp; =
&nbsp;&nbsp;&nbsp;&quot;Birds-of-a-Feather&quot;
Meeting<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'>&nbsp;&nbsp;&nbsp;&nbsp; =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tuesday,
October 12<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5:30pm-7:30pm<o:p></o:p></span></fon=
t></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;Hyatt Regency <st1:City w:st=3D"on"><st1:place =
w:st=3D"on">Austin</st1:place></st1:City><o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; =
&nbsp;&nbsp;Room:
<st1:State w:st=3D"on"><st1:place =
w:st=3D"on">Texas</st1:place></st1:State>
Ballroom I and II <o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'>=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<o:=
p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>Volumizers and all =
IEEE
Visualization 2004 attendees,<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>Sorry for the late =
notice,
but please join us for the OpenGL Volumizer and Linux Visualization
&quot;Birds-of-a-Feather&quot; meeting tonight in Austin, TX at IEEE
Visualization 2004.&nbsp; <o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'><a
href=3D"http://vis.computer.org/vis2004/">http://vis.computer.org/vis200=
4/</a> <o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>We will be =
discussing the
latest news about OpenGL Volumizer Features and Futures as well as the =
latest
advancements in visualization on Linux. =
&nbsp;<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>At the BOF we will =
be showcasing
the new Silicon Graphics Prism, the latest in advanced visualization on =
Linux. &nbsp;For
further information on Silicon Graphics Prism please see the SGI web =
site at <a
href=3D"http://www.sgi.com/products/visualization/prism/">http://www.sgi=
.com/products/visualization/prism/</a>.<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'>Agenda:<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>5:30pm&nbsp;&nbsp; =
Social
Reception; Drinks &amp; Snacks<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>5:45pm&nbsp;&nbsp; =
Welcome
&amp; OpenGL Volumizer Update<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Linux Visualization and SGI Core Rendering News &amp; =
Updates<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Q&amp;A<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>7:30pm&nbsp;&nbsp; =
Adjourn<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>Following the BOF, =
please
join us at for the Silicon Graphics Prism launch party.&nbsp; Shuttles =
will be
provided to take you from the BOF to the party and =
back.<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>We look forward to =
seeing
you there!<o:p></o:p></span></font></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Thank you,<o:p></o:p></span></font></p>

<p><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:
"Courier New"'>Thomas Tannert&nbsp; </span></font><o:p></o:p></p>

<p><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:
"Courier =
New"'>--------------------------------------------</span></font> =
<o:p></o:p></p>

<p><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:
"Courier New"'>VSG Marketing - SGI</span></font> <br>
<st1:Street w:st=3D"on"><st1:address w:st=3D"on"><font size=3D2 =
face=3D"Courier New"><span
  style=3D'font-size:10.0pt;font-family:"Courier New"'>1500 Crittenden =
Lane</span></font></st1:address></st1:Street><font
size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>,
M/S</span></font> <font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>526</span></font> <br>
<font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>Mountain
View, CA 94043</span></font> <br>
<font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>E-mail:
ttannert@sgi.com</span></font> <br>
<font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>Phone:
(650) 933 5237</span></font> <o:p></o:p></p>

<p class=3DMsoNormal><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

</div>

</body>

</html>

------_=_NextPart_001_01C4B06E.18E719CA--

From info-volumizer-owner@els.sgi.com Mon Oct 18 23:04:26 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i9J61aQJ3634378;
	Mon, 18 Oct 2004 23:01:36 -0700 (PDT)
Received: from sgindia.newdelhi.sgi.com (sgindia.newdelhi.sgi.com [134.14.90.2])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with ESMTP id i9J5u5va3597173
	for <info-volumizer@els.sgi.com>; Mon, 18 Oct 2004 22:56:09 -0700 (PDT)
Received: from praveenlaptop ([134.14.90.76]) by sgindia.newdelhi.sgi.com (980427.SGI.8.8.8/980728.SGI.AUTOCF) via SMTP id KAA96417 for <info-volumizer@els.sgi.com>; Tue, 19 Oct 2004 10:13:55 +0530 (IST)
Message-ID: <08cd01c4b5a0$5dc3bbc0$4c5a0e86@praveenlaptop>
From: "Praveen Bhaniramka" <praveenb@sgi.com>
To: <info-volumizer@els.sgi.com>
References: <20041011165526.GB2831@bullet.uchicago.edu>
Subject: Re: [info-volumizer] lseek compilation problem
Date: Tue, 19 Oct 2004 11:26:23 +0530
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

Hi Fred,

You should be better off simply modifying the code under src/lib/loaders to
remove the declaration for lseek64. I think that there is a declaration in
VolumeLoader.h header file...

- Praveen

P.S. Sorry for the late reply. We were out to attend the IEEE Visualization
conference in Austin for the whole of last week!

----- Original Message -----
From: "Fred Dech" <fdech@uchicago.edu>
To: "Praveen Bhaniramka" <praveenb@sgi.com>
Cc: <info-volumizer@els.sgi.com>
Sent: Monday, October 11, 2004 10:25 PM
Subject: [info-volumizer] lseek compilation problem


> howdy.
>
> is there a more elegant hack for the following issue besides commenting
> out the second declaration of lseek in /usr/include/unistd.h?  there seems
> to be a conflict of some global #defines that allows both to be declared
>
> extern __off_t lseek(...) and
> #  define lseek lseek64
> extern __off64_t lseek64(...)
>
> in /usr/share/Volumizer2/src/lib/loaders/
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
usr/bin/c++ -g -DLINUX -MMD -I/usr/X11R6/include -I. -I../../../src/lib/  -I
. -I../../../src/lib/ -Wno-deprecated -c VolumeLoader.cxx
> In file included from
/usr/include/c++/3.3.3/i386-redhat-linux/bits/gthr-default.h:38,
>                  from
/usr/include/c++/3.3.3/i386-redhat-linux/bits/gthr.h:98,
>                  from
/usr/include/c++/3.3.3/i386-redhat-linux/bits/c++io.h:37,
>                  from /usr/include/c++/3.3.3/bits/fpos.h:44,
>                  from /usr/include/c++/3.3.3/iosfwd:49,
>                  from /usr/include/c++/3.3.3/ios:44,
>                  from /usr/include/c++/3.3.3/ostream:45,
>                  from /usr/include/c++/3.3.3/iostream:45,
>                  from /usr/include/c++/3.3.3/backward/iostream.h:32,
>                  from VolumeLoader.cxx:51:
> /usr/include/unistd.h:298: error: declaration of C function `__off64_t
>    lseek(int, long long int, int)' conflicts with
> /usr/include/unistd.h:286: error: previous declaration `__off_t lseek(int,
long
>    int, int)' here
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> i'm running version gcc-c++-3.3.3-7 on Fedora Core2
>
> thanks much.
>
> --fred


From info-volumizer-owner@els.sgi.com Tue Oct 19 03:57:02 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i9JAu2w03664957;
	Tue, 19 Oct 2004 03:56:02 -0700 (PDT)
Received: from web60909.mail.yahoo.com (web60909.mail.yahoo.com [216.155.196.85])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with SMTP id i9J6jtva3600651
	for <info-volumizer@els.sgi.com>; Mon, 18 Oct 2004 23:45:56 -0700 (PDT)
Message-ID: <20041019064554.38465.qmail@web60909.mail.yahoo.com>
Received: from [69.225.241.46] by web60909.mail.yahoo.com via HTTP; Mon, 18 Oct 2004 23:45:54 PDT
Date: Mon, 18 Oct 2004 23:45:54 -0700 (PDT)
From: "Dr. Michael Wiley" <wiley_michael@yahoo.com>
Subject: [info-volumizer] How to specify transfer function?
To: info-volumizer@els.sgi.com
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

Hi Praveen,

I need to use the vzParameterLookupTable to specify a
transfer function for a DICOM series that I am trying
to render.

Consider this as an example: I have a DICOM dataset
consisting of a series of CT slices for which the
voxel intensity ranges from -1000 Hounsfield unit to
3000 Hounsfield unit. I want to specify a transfer
function which maps these x values (ranging from -1000
to 3000) to corresponding r,g,b,a values.

Specifically, lets say I want to map -1000 voxel
intensity to R=255, G=0, B=0, alpha=0.5. (Its
important for medical applications to let the user see
the transfer function in terms of modality unit, e.g
hounsfield unit in CT)

Now the constructor of vzParameterLookupTable is as
follows: vzParameterLookupTable ( int width, void*
data, vzTextureType type, vzExternalTextureFormat
format); 

In this specific example (stated above) I understand
that the width should be 4000 (=3000 + 1000). I also
understand the intent of arguments 'data', 'type' and
'format'. What I don't understand is how volumizer
would know that it needs to start the x values of the
transfer function at -1000 (and not at 0 or some other
number).

Thanks,
Michael


		
_______________________________
Do you Yahoo!?
Declare Yourself - Register online to vote today!
http://vote.yahoo.com

From info-volumizer-owner@els.sgi.com Tue Oct 19 05:23:33 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i9JCMa193651657;
	Tue, 19 Oct 2004 05:22:36 -0700 (PDT)
Received: from sgindia.newdelhi.sgi.com (sgindia.newdelhi.sgi.com [134.14.90.2])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with ESMTP id i9JCBgva3676819
	for <info-volumizer@els.sgi.com>; Tue, 19 Oct 2004 05:11:45 -0700 (PDT)
Received: from praveenlaptop ([134.14.90.76]) by sgindia.newdelhi.sgi.com (980427.SGI.8.8.8/980728.SGI.AUTOCF) via SMTP id QAA12512 for <info-volumizer@els.sgi.com>; Tue, 19 Oct 2004 16:29:31 +0530 (IST)
Message-ID: <0a5501c4b5d4$d69527d0$4c5a0e86@praveenlaptop>
From: "Praveen Bhaniramka" <praveenb@sgi.com>
To: <info-volumizer@els.sgi.com>
References: <20041019064554.38465.qmail@web60909.mail.yahoo.com>
Subject: Re: [info-volumizer] How to specify transfer function?
Date: Tue, 19 Oct 2004 17:42:00 +0530
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

Dr Wiley,

Volumizer uses the OpenGL hardware to apply the lookup table to the 3D
texture data that gets loaded into the 3D volume. For all practical
purposes, you can assume that the hardware uses floating point values in the
range [0..1] for texture values and coordinates alike. When using the
vzParameterLookupTable class, the texture values from the volume texture are
sampled and then this value is used as an index into the lookup table (which
is a 1D table). The value at this index in the table gives the output RGBA
value.

In your case, you would need to -
    - create a vzParameterVolumeTexture using a 16-bit data type
(VZ_UNSIGNED_SHORT for example) to represent the DICOM data correctly since
8-bit would lead to quantization of the input values. I could recommend that
you re-scale your input data values to the range [0..2^16-1] so that you get
better contrast between different voxel values. The idea is to do something
like the following :
            for all voxel i
                data[i] = (data[i] - min)/(max-min) * scale
            where,
                min = -1000, max = 3000, scale = 2^16 -1 in your case.

            I would also recommend using VZ_UNSIGNED_SHORT since typically
signed types are slow/buggy on most systems.

    - create a vzParameterLookupTable with 'power-of-two' entries. The
maximum size of the table is system dependent and typically would range from
1024 to 2096 on most of the currently supported systems. In 2.8, this
restriction would be removed using a smart backend for vzTMLUTShader
implementation.

    - create a vzTMLUTShader and use it to render the volume.

Let me know if you have any further questions.

- Praveen

----- Original Message -----
From: "Dr. Michael Wiley" <wiley_michael@yahoo.com>
To: <info-volumizer@els.sgi.com>
Sent: Tuesday, October 19, 2004 12:15 PM
Subject: [info-volumizer] How to specify transfer function?


> Hi Praveen,
>
> I need to use the vzParameterLookupTable to specify a
> transfer function for a DICOM series that I am trying
> to render.
>
> Consider this as an example: I have a DICOM dataset
> consisting of a series of CT slices for which the
> voxel intensity ranges from -1000 Hounsfield unit to
> 3000 Hounsfield unit. I want to specify a transfer
> function which maps these x values (ranging from -1000
> to 3000) to corresponding r,g,b,a values.
>
> Specifically, lets say I want to map -1000 voxel
> intensity to R=255, G=0, B=0, alpha=0.5. (Its
> important for medical applications to let the user see
> the transfer function in terms of modality unit, e.g
> hounsfield unit in CT)
>
> Now the constructor of vzParameterLookupTable is as
> follows: vzParameterLookupTable ( int width, void*
> data, vzTextureType type, vzExternalTextureFormat
> format);
>
> In this specific example (stated above) I understand
> that the width should be 4000 (=3000 + 1000). I also
> understand the intent of arguments 'data', 'type' and
> 'format'. What I don't understand is how volumizer
> would know that it needs to start the x values of the
> transfer function at -1000 (and not at 0 or some other
> number).
>
> Thanks,
> Michael
>
>
>
> _______________________________
> Do you Yahoo!?
> Declare Yourself - Register online to vote today!
> http://vote.yahoo.com


From info-volumizer-owner@els.sgi.com Tue Oct 19 21:07:24 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i9K46FvB3649534;
	Tue, 19 Oct 2004 21:06:15 -0700 (PDT)
Received: from web60902.mail.yahoo.com (web60902.mail.yahoo.com [216.155.196.78])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with SMTP id i9K428va3632337
	for <info-volumizer@els.sgi.com>; Tue, 19 Oct 2004 21:02:10 -0700 (PDT)
Message-ID: <20041020040207.69926.qmail@web60902.mail.yahoo.com>
Received: from [69.225.241.46] by web60902.mail.yahoo.com via HTTP; Tue, 19 Oct 2004 21:02:07 PDT
Date: Tue, 19 Oct 2004 21:02:07 -0700 (PDT)
From: "Dr. Michael Wiley" <wiley_michael@yahoo.com>
Subject: Re: [info-volumizer] How to specify transfer function?
To: info-volumizer@els.sgi.com
In-Reply-To: <0a5501c4b5d4$d69527d0$4c5a0e86@praveenlaptop>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

Praveen,

Thanks for your response. However, I find the
following explanation confusing:

> you re-scale your input data values to the range
> [0..2^16-1] so that you get
> better contrast between different voxel values. The
> idea is to do something
> like the following :
>             for all voxel i
>                 data[i] = (data[i] - min)/(max-min)
> * scale
>             where,
>                 min = -1000, max = 3000, scale =
> 2^16 -1 in your case.
> 
>             I would also recommend using
> VZ_UNSIGNED_SHORT since typically
> signed types are slow/buggy on most systems.
> 
>     - create a vzParameterLookupTable with
> 'power-of-two' entries. The
> maximum size of the table is system dependent and
> typically would range from
> 1024 to 2096 on most of the currently supported
> systems.

First of all you said that the input voxels should be
scaled between 0 to 2^16-1 (65535). On the other hand,
you suggested that the maximum range of the transfer
function (texture lookup table) supported by current
systems is 2096. There is a huge discrepancy between
65535 and 2096! So, shouldn't I scale my input voxels
between 0 and 2096? I also don't want to lose a lot of
precision. How do I do this?

FYI, I am using a Windows OS with ATI FireGL2 graphics
card.

Thanks,
Michael

--- Praveen Bhaniramka <praveenb@sgi.com> wrote:

> Dr Wiley,
> 
> Volumizer uses the OpenGL hardware to apply the
> lookup table to the 3D
> texture data that gets loaded into the 3D volume.
> For all practical
> purposes, you can assume that the hardware uses
> floating point values in the
> range [0..1] for texture values and coordinates
> alike. When using the
> vzParameterLookupTable class, the texture values
> from the volume texture are
> sampled and then this value is used as an index into
> the lookup table (which
> is a 1D table). The value at this index in the table
> gives the output RGBA
> value.
> 
> In your case, you would need to -
>     - create a vzParameterVolumeTexture using a
> 16-bit data type
> (VZ_UNSIGNED_SHORT for example) to represent the
> DICOM data correctly since
> 8-bit would lead to quantization of the input
> values. I could recommend that
> you re-scale your input data values to the range
> [0..2^16-1] so that you get
> better contrast between different voxel values. The
> idea is to do something
> like the following :
>             for all voxel i
>                 data[i] = (data[i] - min)/(max-min)
> * scale
>             where,
>                 min = -1000, max = 3000, scale =
> 2^16 -1 in your case.
> 
>             I would also recommend using
> VZ_UNSIGNED_SHORT since typically
> signed types are slow/buggy on most systems.
> 
>     - create a vzParameterLookupTable with
> 'power-of-two' entries. The
> maximum size of the table is system dependent and
> typically would range from
> 1024 to 2096 on most of the currently supported
> systems. In 2.8, this
> restriction would be removed using a smart backend
> for vzTMLUTShader
> implementation.
> 
>     - create a vzTMLUTShader and use it to render
> the volume.
> 
> Let me know if you have any further questions.
> 
> - Praveen
> 
> ----- Original Message -----
> From: "Dr. Michael Wiley" <wiley_michael@yahoo.com>
> To: <info-volumizer@els.sgi.com>
> Sent: Tuesday, October 19, 2004 12:15 PM
> Subject: [info-volumizer] How to specify transfer
> function?
> 
> 
> > Hi Praveen,
> >
> > I need to use the vzParameterLookupTable to
> specify a
> > transfer function for a DICOM series that I am
> trying
> > to render.
> >
> > Consider this as an example: I have a DICOM
> dataset
> > consisting of a series of CT slices for which the
> > voxel intensity ranges from -1000 Hounsfield unit
> to
> > 3000 Hounsfield unit. I want to specify a transfer
> > function which maps these x values (ranging from
> -1000
> > to 3000) to corresponding r,g,b,a values.
> >
> > Specifically, lets say I want to map -1000 voxel
> > intensity to R=255, G=0, B=0, alpha=0.5. (Its
> > important for medical applications to let the user
> see
> > the transfer function in terms of modality unit,
> e.g
> > hounsfield unit in CT)
> >
> > Now the constructor of vzParameterLookupTable is
> as
> > follows: vzParameterLookupTable ( int width, void*
> > data, vzTextureType type, vzExternalTextureFormat
> > format);
> >
> > In this specific example (stated above) I
> understand
> > that the width should be 4000 (=3000 + 1000). I
> also
> > understand the intent of arguments 'data', 'type'
> and
> > 'format'. What I don't understand is how volumizer
> > would know that it needs to start the x values of
> the
> > transfer function at -1000 (and not at 0 or some
> other
> > number).
> >
> > Thanks,
> > Michael
> >
> >
> >
> > _______________________________
> > Do you Yahoo!?
> > Declare Yourself - Register online to vote today!
> > http://vote.yahoo.com
> 
> 



		
_______________________________
Do you Yahoo!?
Declare Yourself - Register online to vote today!
http://vote.yahoo.com

From info-volumizer-owner@els.sgi.com Tue Oct 19 21:57:16 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i9K4ufeC3666647;
	Tue, 19 Oct 2004 21:56:41 -0700 (PDT)
Received: from sgindia.newdelhi.sgi.com (sgindia.newdelhi.sgi.com [134.14.90.2])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with ESMTP id i9K4srva2470384
	for <info-volumizer@els.sgi.com>; Tue, 19 Oct 2004 21:54:54 -0700 (PDT)
Received: from praveenlaptop ([134.14.90.76]) by sgindia.newdelhi.sgi.com (980427.SGI.8.8.8/980728.SGI.AUTOCF) via SMTP id JAA48836 for <info-volumizer@els.sgi.com>; Wed, 20 Oct 2004 09:12:41 +0530 (IST)
Message-ID: <02ea01c4b660$f9e0a020$4c5a0e86@praveenlaptop>
From: "Praveen Bhaniramka" <praveenb@sgi.com>
To: <info-volumizer@els.sgi.com>
References: <20041020040207.69926.qmail@web60902.mail.yahoo.com>
Subject: Re: [info-volumizer] How to specify transfer function?
Date: Wed, 20 Oct 2004 10:25:08 +0530
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

Hi again,

> First of all you said that the input voxels should be
> scaled between 0 to 2^16-1 (65535). On the other hand,
> you suggested that the maximum range of the transfer
> function (texture lookup table) supported by current
> systems is 2096. There is a huge discrepancy between
> 65535 and 2096! So, shouldn't I scale my input voxels
> between 0 and 2096? I also don't want to lose a lot of
> precision. How do I do this?

As I said, OpenGL looks at things in the range of [0..1] floating point
values. This makes the indexing scheme independent of the texture
resolution/values. e.g. if the sampled texel value from your volume texture
is 0.5, this value will be used to index into the lookup table (LUT). So, if
your LUT has 2096 entries, the looked up entry is 1024. This mapping is done
transparently by OpenGL. Similarly, if the data type is 2-byte unsigned
values (VZ_UNSIGNED_SHORT), 0.5 corresponds to approximately 32K.

When you scale the data values to 0 to 2096 (2095 actually so that you have
2^11 values), using 2-byte texels will map the internal texel values in the
range of [0 - 2095/65535] and you will only be able to index the
corresponding entries in the LUT. Scaling the values to the range 0 - 65535
ensures that you index the whole range of entries [0..1] in the LUT. The
loss of precision will correspond to the fact that the output LUT only has
2096 entries in this case, even though you ideally want 4096. This will be
fixed in 2.8 release, which will allow using larger LUTs on systems
supporting the ARB_fragment_program OpenGL extension.

Depending on your graphics hardware, the maximum LUT size might be less than
2096. With 2.7, you can find this value by increasing the LUT size in
multiples of 2 until Volumizer reports an error. With 2.8, Volumizer will
only give an error if the system does not support ARB_fragment_program.
Otherwise, it will try to accomodate the application's request for larger
LUTs using the new back-end.

Hope this helps clear things a bit. Let me know if it doesn't :-)

Cheers,
Praveen

> --- Praveen Bhaniramka <praveenb@sgi.com> wrote:
>
> > Dr Wiley,
> >
> > Volumizer uses the OpenGL hardware to apply the
> > lookup table to the 3D
> > texture data that gets loaded into the 3D volume.
> > For all practical
> > purposes, you can assume that the hardware uses
> > floating point values in the
> > range [0..1] for texture values and coordinates
> > alike. When using the
> > vzParameterLookupTable class, the texture values
> > from the volume texture are
> > sampled and then this value is used as an index into
> > the lookup table (which
> > is a 1D table). The value at this index in the table
> > gives the output RGBA
> > value.
> >
> > In your case, you would need to -
> >     - create a vzParameterVolumeTexture using a
> > 16-bit data type
> > (VZ_UNSIGNED_SHORT for example) to represent the
> > DICOM data correctly since
> > 8-bit would lead to quantization of the input
> > values. I could recommend that
> > you re-scale your input data values to the range
> > [0..2^16-1] so that you get
> > better contrast between different voxel values. The
> > idea is to do something
> > like the following :
> >             for all voxel i
> >                 data[i] = (data[i] - min)/(max-min)
> > * scale
> >             where,
> >                 min = -1000, max = 3000, scale =
> > 2^16 -1 in your case.
> >
> >             I would also recommend using
> > VZ_UNSIGNED_SHORT since typically
> > signed types are slow/buggy on most systems.
> >
> >     - create a vzParameterLookupTable with
> > 'power-of-two' entries. The
> > maximum size of the table is system dependent and
> > typically would range from
> > 1024 to 2096 on most of the currently supported
> > systems. In 2.8, this
> > restriction would be removed using a smart backend
> > for vzTMLUTShader
> > implementation.
> >
> >     - create a vzTMLUTShader and use it to render
> > the volume.
> >
> > Let me know if you have any further questions.
> >
> > - Praveen
> >
> > ----- Original Message -----
> > From: "Dr. Michael Wiley" <wiley_michael@yahoo.com>
> > To: <info-volumizer@els.sgi.com>
> > Sent: Tuesday, October 19, 2004 12:15 PM
> > Subject: [info-volumizer] How to specify transfer
> > function?
> >
> >
> > > Hi Praveen,
> > >
> > > I need to use the vzParameterLookupTable to
> > specify a
> > > transfer function for a DICOM series that I am
> > trying
> > > to render.
> > >
> > > Consider this as an example: I have a DICOM
> > dataset
> > > consisting of a series of CT slices for which the
> > > voxel intensity ranges from -1000 Hounsfield unit
> > to
> > > 3000 Hounsfield unit. I want to specify a transfer
> > > function which maps these x values (ranging from
> > -1000
> > > to 3000) to corresponding r,g,b,a values.
> > >
> > > Specifically, lets say I want to map -1000 voxel
> > > intensity to R=255, G=0, B=0, alpha=0.5. (Its
> > > important for medical applications to let the user
> > see
> > > the transfer function in terms of modality unit,
> > e.g
> > > hounsfield unit in CT)
> > >
> > > Now the constructor of vzParameterLookupTable is
> > as
> > > follows: vzParameterLookupTable ( int width, void*
> > > data, vzTextureType type, vzExternalTextureFormat
> > > format);
> > >
> > > In this specific example (stated above) I
> > understand
> > > that the width should be 4000 (=3000 + 1000). I
> > also
> > > understand the intent of arguments 'data', 'type'
> > and
> > > 'format'. What I don't understand is how volumizer
> > > would know that it needs to start the x values of
> > the
> > > transfer function at -1000 (and not at 0 or some
> > other
> > > number).
> > >
> > > Thanks,
> > > Michael
> > >
> > >
> > >
> > > _______________________________
> > > Do you Yahoo!?
> > > Declare Yourself - Register online to vote today!
> > > http://vote.yahoo.com
> >
> >
>
>
>
>
> _______________________________
> Do you Yahoo!?
> Declare Yourself - Register online to vote today!
> http://vote.yahoo.com


From info-volumizer-owner@els.sgi.com Wed Oct 20 19:50:28 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i9L2nGDd3705095;
	Wed, 20 Oct 2004 19:49:16 -0700 (PDT)
Received: from mproxy.gmail.com (rproxy.gmail.com [64.233.170.193])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with ESMTP id i9KH1Jva3421575
	for <info-volumizer@els.sgi.com>; Wed, 20 Oct 2004 10:01:20 -0700 (PDT)
Received: by mproxy.gmail.com with SMTP id 74so454949rnl
        for <info-volumizer@els.sgi.com>; Wed, 20 Oct 2004 10:01:18 -0700 (PDT)
DomainKey-Signature: a=rsa-sha1; c=nofws;
        s=beta; d=gmail.com;
        h=received:message-id:date:from:reply-to:to:subject:mime-version:content-type:content-transfer-encoding;
        b=KJwVsUsvCNppSwOXXH+KiDac9peoET5BkddVeeYevBd8N/kA2G5JiHDTGjToA7IDxoLpJeuW8Fj5ItFNuJ8BgK755n6CYpn8Xe7r8g7eH+aubDYSdYc1vrWgJ5L5vfHrR2UFPdXEoLMuUz5owFXPSIsVreaox0JwJGhfoLliGbg
Received: by 10.39.1.26 with SMTP id d26mr2624416rni;
        Wed, 20 Oct 2004 10:01:18 -0700 (PDT)
Received: by 10.38.162.24 with HTTP; Wed, 20 Oct 2004 10:01:18 -0700 (PDT)
Message-ID: <fafba5fe041020100112a8456d@mail.gmail.com>
Date: Wed, 20 Oct 2004 13:01:18 -0400
From: Abhijit Lothe <alothe@gmail.com>
To: info-volumizer@els.sgi.com
Subject: [info-volumizer] Color settings problem
Mime-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

Hi,
 I am using opengl volumizer 2.7 windows version on NVIDIA GeForce FX
5200 Pro graphics card. I rendered the example data that comes with
OpenGL volumizer "CT.small.Head.tif" using vzTMRenderAction. The data
was loaded using IFL loader that ships with the volumizer. I want to
display a cube with red color after displaying the volume. So I set
the color using glColor3f(1.0, 0, 0) after rendering the volume . Now
the whole volume gets a red tinge. Could anyone please tell me what
could be wrong ?. I am pasting my code for rendering below:

void display()
{
	glClear(GL_COLOR_BUFFER_BIT);
	glClearColor(0, 0, 0, 0);	
	glViewport(viewport1[0], viewport1[1], (GLsizei) viewport1[2],
(GLsizei)  viewport1[3]);

	/* set projection */
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(-1.5, 1.5, -1.5, 1.5, -1.5, 1.5);

	/* set model view transformations */
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

	glRotated( 90 , 1, 0, 0);
                glRotated(180 , 0, 0, 1);
	glEnable(GL_BLEND);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
	glTranslatef(-0.6, 0, -0.6);
	glScalef(2, 2, 2);

                // Begin drawing
                renderAction->beginDraw(VZ_RESTORE_GL_STATE_BIT);
                renderAction->draw(volumeShape);
                renderAction->endDraw();
	glColor3f(1.0, 0, 0);
	glutSwapBuffers();

Thank you.

Aby

From info-volumizer-owner@els.sgi.com Wed Oct 20 20:17:49 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i9L3HLnk3704701;
	Wed, 20 Oct 2004 20:17:21 -0700 (PDT)
Received: from sgindia.newdelhi.sgi.com (sgindia.newdelhi.sgi.com [134.14.90.2])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with ESMTP id i9L3FSva3647167
	for <info-volumizer@els.sgi.com>; Wed, 20 Oct 2004 20:15:30 -0700 (PDT)
Received: from praveenlaptop ([134.14.90.76]) by sgindia.newdelhi.sgi.com (980427.SGI.8.8.8/980728.SGI.AUTOCF) via SMTP id HAA99764 for <info-volumizer@els.sgi.com>; Thu, 21 Oct 2004 07:33:20 +0530 (IST)
Message-ID: <05b501c4b71c$429cb4f0$4c5a0e86@praveenlaptop>
From: "Praveen Bhaniramka" <praveenb@sgi.com>
To: <info-volumizer@els.sgi.com>
References: <fafba5fe041020100112a8456d@mail.gmail.com>
Subject: Re: [info-volumizer] Color settings problem
Date: Thu, 21 Oct 2004 08:45:47 +0530
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
Sender: owner-info-volumizer@els.sgi.com
Precedence: bulk
Reply-To: info-volumizer@els.sgi.com

Hi Abhijit,

Short answer: You would need to reset the color back to white (1, 1, 1),
before you render the volume data.

Long'ish answer: OpenGL is a state machine, and hence any OpenGL state that
you set (the current color in this case), would apply to all geometry that
gets rendered following that state setting. When using textures with OpenGL,
the behaviour of rendering texture data is determined by the value of
GL_TEXTURE_ENV_MODE set using glTexEnv, which can be one of GL_MODULATE,
GL_DECAL, GL_BLEND, or GL_REPLACE. The default is GL_MODULATE, which
Volumizer does not modify. See the OpenGL reference on glTexEnv for more
information.

- Praveen

----- Original Message -----
From: "Abhijit Lothe" <alothe@gmail.com>
To: <info-volumizer@els.sgi.com>
Sent: Wednesday, October 20, 2004 10:31 PM
Subject: [info-volumizer] Color settings problem


> Hi,
>  I am using opengl volumizer 2.7 windows version on NVIDIA GeForce FX
> 5200 Pro graphics card. I rendered the example data that comes with
> OpenGL volumizer "CT.small.Head.tif" using vzTMRenderAction. The data
> was loaded using IFL loader that ships with the volumizer. I want to
> display a cube with red color after displaying the volume. So I set
> the color using glColor3f(1.0, 0, 0) after rendering the volume . Now
> the whole volume gets a red tinge. Could anyone please tell me what
> could be wrong ?. I am pasting my code for rendering below:
>
> void display()
> {
> glClear(GL_COLOR_BUFFER_BIT);
> glClearColor(0, 0, 0, 0);
> glViewport(viewport1[0], viewport1[1], (GLsizei) viewport1[2],
> (GLsizei)  viewport1[3]);
>
> /* set projection */
> glMatrixMode(GL_PROJECTION);
> glLoadIdentity();
> glOrtho(-1.5, 1.5, -1.5, 1.5, -1.5, 1.5);
>
> /* set model view transformations */
> glMatrixMode(GL_MODELVIEW);
> glLoadIdentity();
>
> glRotated( 90 , 1, 0, 0);
>                 glRotated(180 , 0, 0, 1);
> glEnable(GL_BLEND);
> glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
> glTranslatef(-0.6, 0, -0.6);
> glScalef(2, 2, 2);
>
>                 // Begin drawing
>                 renderAction->beginDraw(VZ_RESTORE_GL_STATE_BIT);
>                 renderAction->draw(volumeShape);
>                 renderAction->endDraw();
> glColor3f(1.0, 0, 0);
> glutSwapBuffers();
>
> Thank you.
>
> Aby


From info-volumizer-owner@els.sgi.com Sun Oct 24 21:07:09 2004
Received: (from majordom@localhost)
	by els.sgi.com (8.12.10/8.12.2/els-2.2) id i9P44ard3760534;
	Sun, 24 Oct 2004 21:04:36 -0700 (PDT)
Received: from rproxy.gmail.com (rproxy.gmail.com [64.233.170.195])
	by els.sgi.com (8.12.10/8.12.2/els-2.2) with ESMTP id i9