home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!ogicse!decwrl!concert!borg!pooh!cullip
- From: cullip@pooh.cs.unc.edu (Timothy Cullip)
- Newsgroups: comp.sys.sgi
- Subject: Texture Lookup Table (tlutdef) on RealityEngine
- Message-ID: <17478@borg.cs.unc.edu>
- Date: 13 Nov 92 15:48:48 GMT
- Article-I.D.: borg.17478
- Sender: news@cs.unc.edu
- Distribution: usa
- Lines: 51
-
- I've written a type of volume renderer for the RealityEngine that
- uses 3D texture. It is currently using a one component 3D texture
- (intensity component only). Since it is doing an integration through
- space (I'm modeling an xray or radiographic view) I've found that it
- renders best when using an external texture format of 16 bits
- (TX_EXTERNAL_FORMAT : TX_PACK_16) and an internal format of 12 bits
- (TX_INTERNAL_FORMAT : TX_I_12A_4) for intensity.
-
- Using 8 bit components causes too much loss of precision for my integration
- technique (each component in the integration is typically less than 5
- if I want the integral to be clamped to 256). A lot of the image detail is
- lost in the roundoff at 8 bits.
-
- It would be nice if I could use a dynamically changing texture lookup
- function that remapped my intensities. I would like to use the tlutdef()
- and tlutbind() calls to do this. Unfortunately, to the best of my
- knowledge, it looks likes the texture lookup table routines take my
- internal 12 bit texture, truncates to 8 bits, uses the 8 bits as an
- index and returns an 8 bit value for the new intensity. This loss of
- information is unacceptable for my volume renderer (which is in essense
- integrating intensity through depth).
-
- I noticed in the man page to tlutdef() that it's entries are 8 bits/component.
- It also states that you pass it the number of entries that you want, though
- I'm not sure how this parameter affects the results. Anytime I try to
- make a table bigger than 256 entries, it seems to ignore anything but
- the lower 256 entries.
-
- Is there anyway to create a 4096 entry table of 12 (or 16 bit) entries
- in a texture lookup table and have my 12 bit/intensity internal format
- texture used as an index into this 4096 entry table and have it return
- 12 bit values?
- If not, is this a hardware limitation or a software (microcode) limitation?
-
- Also, on a side note, it is my guess that the tlut lookup is done after the
- trilinear interpolation (TX_MAGFILTER: TX_TRILINEAR). Is this true? Is there
- anyway to get the lookup done before the trilerp? That is I'd prefer
- to have the 8 values transformed by the lookup table and then trilerped
- to a single value, rather than trilerp the 8 values and then use this
- single result as the index into a single lookup. This makes a difference
- because the lookup table is going to model a nonlinear process.
-
- PS: Is the reason you don't support a one component internal format
- of 16 bits because you only have 12 bits per red/green/blue/alpha in the
- framebuffer and so the anything beyond a 12 bit texture component would
- be lost anyways?
-
- --
-
- Tim Cullip
- cullip@cs.unc.edu
-