Re: Performer Node [again]

New Message Reply Date view Thread view Subject view Author view

From: Fred Dech (fred@cerulean.bvis.uic.edu)
Date: 05/18/2000 10:13:38


Dave Akers wrote:
>
> Hi Fred,
>
> To help us understand how we can help, could you give us a list of
> exactly the things you'd like to be able to do? In each case (as with
> lookup tables) we can answer implementation questions.
>
> > the Caveat below, along with its adendum in the next email you sent, is
> > alittle unclear to me, but it seems to imply that i should be able to do
> > things like dynamically modify polygon caching parameters, volume region-of-
> > interest size and locaton, etc., etc., from, i guess, the APP process.
> > please correct me if i'm wrong here.
>
> Yes, there's nothing preventing you from making changes to these
> parameters in the APP process...
>
> > hmmm. there needs to be a way for these to be exposed in the pfVolume class
> > API, somehow i know, for there to be useful functionality here.
>
> Again, let us know specifically what Volumizer functionality you're
> looking to get at through the Performer node interface.. This will allow
> us to help you better.
>
> Thanks!
>
> Dave
>
hi Dave.

here's a list of things that we have implimented or quasi implimented using
the 1st Performer node. we need to be able to do the following things, plus
other not yet implimented proceedures as we continue to develop our software.

1. we used OGL clipping planes mainly because i did not find a suitable
   analog in Performer. the ability to set and manipulate multiple clipping
   planes is a must for our use of Volumizer. it looks like there may be
   a way to do this by setting a pfGeoState attribute, but we haven't done
   that, and it's not clear to me that Performer has the flexibility of
   OGL in this respect. for example, allow a user to select 1 of a number
   (i don't recall, i believe OGL supports 5) clipping planes and manipulate
   it with respect to the volume.

2. as i said earlier, being able to change the color LUT dynamimcally. and
   your reply to use pfColortable with the pfGeoState seems very straight-
   forward. i wonder if it acts on the geometry in a similar way to
   OGLVolumizer voLookupTablePost()?

3. being able to change the threshold value of voDrawActionCache for image
   and performance tradeoffs as an application is running is important to us.

4. being able to interactively modify voIndexedTetraSet. for example, have
   the ability from the APP process to send new values to x_sz, y_sz, z_sz,
   x_dev, y_dev, z_dev in the Performer Volumizer node as illustrated in the
   fragment below:

------------
    static float vtxData[8][3];
    static int cubeIndices[20];

    // Set vertex coordinates.
    vtxData[0][0]=x_dev; vtxData[0][1]=y_dev; vtxData[0][2]=z_dev;
    vtxData[1][0]=x_dev+x_sz; vtxData[1][1]=y_dev; vtxData[1][2]=z_dev;
    vtxData[2][0]=x_dev+x_sz; vtxData[2][1]=y_dev+y_sz; vtxData[2][2]=z_dev;
    vtxData[3][0]=x_dev; vtxData[3][1]=y_dev+y_sz; vtxData[3][2]=z_dev;
    vtxData[4][0]=x_dev; vtxData[4][1]=y_dev; vtxData[4][2]=z_dev+z_sz;
    vtxData[5][0]=x_dev+x_sz; vtxData[5][1]=y_dev; vtxData[5][2]=z_dev+z_sz;
    vtxData[6][0]=x_dev+x_sz; vtxData[6][1]=y_dev+y_sz;
                                                vtxData[6][2]=z_dev+z_sz;
    vtxData[7][0]=x_dev; vtxData[7][1]=y_dev+y_sz; vtxData[7][2]=z_dev+z_sz;

    // Define the geometry to be drawn. Each row defines one tetrahedron,
    // 5 of which define a cube. Values index into vtxData[].
    int *ci = cubeIndices;
    ci[0] = 0; ci[1] = 2; ci[2] = 5; ci[3] = 7;
    ci[4] = 3; ci[5] = 2; ci[6] = 0; ci[7] = 7;
    ci[8] = 1; ci[9] = 2; ci[10] = 5; ci[11] = 0;
    ci[12] = 2; ci[13] = 7; ci[14] = 6; ci[15] = 5;
    ci[16] = 5; ci[17] = 4; ci[18] = 0; ci[19] = 7;

    int tetraCount =
      sizeof(cubeIndices) / (VO_TETRA_VERTICES * sizeof(cubeIndices[0]));

    int valuesPerVtx = sizeof(vtxData[0]) / sizeof(float);

    // Construct the tetra set
    if (tetraSet) delete tetraSet;

    tetraSet = new voIndexedTetraSet((float *) vtxData, 8,
                          valuesPerVtx, cubeIndices, 20);

    // want to recompute polygons after changing tetraSet.
    if (volCache) volCache->setValidFlag(VO_FALSE);
------------

i hope this is helpful.

thanks.

--fred

--
  Fred Dech   fdech@uic.edu
  VRMedLab
  (312) 413-3092: fax (312) 996-8342
  "We'll burn that bridge when we come to it." JL


New Message Reply Date view Thread view Subject view Author view

This archive was generated by hypermail 2b29 : Thu May 18 2000 - 10:46:54 PDT