Each "vertex" has a location (or coordinate), and optionally a normal,
color, and texture coordinate.

After looking at the API specs for IndexedGeometryArray, I think it
works like this (somebody at Sun feel free to chime in):

Vector3d[] locations = new Vector3d[8] {  ... 8 locations ... };
Vector3d[] normals = new Vector3d[6] { ... 6 normals ... };

int index_count = 4 (vertices_per_face) * 6 (faces) = 24;
cube = new IndexedQuadArray(locations.length, COORDINATES | NORMALS,
                            index_count);

// Now, set the locations.
cube.setCoordinates(0, locations);

// Now, set the normals.  I think what happens here is that
// the GeometryArray has allocated space for *pointers* to 8 normals,
// but we only fill 6 of them.
cube.setNormals(0, normals)

int[] location_indices = new int[index_count]
{
  0, 1, 2, 3,  // the quad for the first face,
  1, 3, 7, 4,  // the quad for the second face,
  5, 4, 7, 6,  // the quad for the third face,
  etc....
};

int[] normal_indices = new int[index_count]
{
  0, 0, 0, 0,  // the normals for the vertices in the first face are the
same
  1, 1, 1, 1,  // second face
  2, 2, 2, 2,  // third face
  3, 3, 3, 3,  // etc...
  4, 4, 4, 4,
  5, 5, 5, 5
};

So, I think the only *wasted* space is the two normal pointers in the
normal array that are not used...  Does this sound right to ppl at
Sun?????
The GeometryArray is (hopefully) allocating the array space, but not the
actual members of the normal array.  I mean:

   // They have to do this because the max possible normals the
   // user will want is a normal for each vertex.
   myNormals = new Vector3d[vertex_count];

   // But hopefully not doing this:
   int i;
   for(i=0; i<myNormals.length; i++)
   {
     myNormals[i] = new Vector3d();
   }

*whew*
-Lee

-----Original Message-----
From: Adam Tegen [mailto:[EMAIL PROTECTED]]
Sent: Friday, November 03, 2000 2:18 PM
To: [EMAIL PROTECTED]
Subject: Re: [JAVA3D] Memory Issues: same number of normals and
coordinate s, even for indexed Geometry?


A further question:

A "Vertex" is a combination of coordinate, normal, etc. right?  If you
have
an IndexedGeometryArray, why does the number of normals need to equal
the
number of coordinates?  The number of indices for each does need to be
the
same for each, though.

Can you explain this to me further?  Other scene graphs use per-vertex
shading and do not have this restriction.

Adam

-----Original Message-----
From: Discussion list for Java 3D API
[mailto:[EMAIL PROTECTED]]On Behalf Of J. Lee Dixon
Sent: Friday, November 03, 2000 1:28 PM
To: [EMAIL PROTECTED]
Subject: Re: [JAVA3D] Memory Issues: same number of normals and
coordinate s, even for indexed Geometry?


The reason for the number of normals equalling the number of coordinates
is that Java3D does per-vertex shading.  This allows for smooth shading
of curved surfaces, but yes it is a little wasteful for objects like
cubes.

-Lee

-----Original Message-----
From: Adam Tegen [mailto:[EMAIL PROTECTED]]
Sent: Friday, November 03, 2000 12:11 PM
To: [EMAIL PROTECTED]
Subject: [JAVA3D] Memory Issues: same number of normals and coordinates,
even for indexed Geometry?


Hello-

I'm doing some tests with Java3D and notices something:

The number of coordinates must equal the number of normals (when
enabled)
etc.  At least this is how it seems to be when I use commands like
IndexedTriangleArray.setNormalRefFloat(...)

While this makes sense for non-indexed geometry, how does this make
sense
for indexed geometry?  A cube, for instance has 8 coordinates, and 6
normals.

Am I understanding this correctly?  Does this mean that java3D eats up
unneeded memory?  Is there a good reason for this, or is this an area
for
improvement for future versions.

If someone could explain this to me, I would greatly appreciate it.

Adam

========================================================================
===
To unsubscribe, send email to [EMAIL PROTECTED] and include in the
body
of the message "signoff JAVA3D-INTEREST".  For general help, send email
to
[EMAIL PROTECTED] and include in the body of the message "help".

========================================================================
===
To unsubscribe, send email to [EMAIL PROTECTED] and include in the
body
of the message "signoff JAVA3D-INTEREST".  For general help, send email
to
[EMAIL PROTECTED] and include in the body of the message "help".

========================================================================
===
To unsubscribe, send email to [EMAIL PROTECTED] and include in the
body
of the message "signoff JAVA3D-INTEREST".  For general help, send email
to
[EMAIL PROTECTED] and include in the body of the message "help".

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to