Hi!

I have approximately the following code creating an object I load from
file. From the file I get a list of vertices with coordinates, normals
and texture coordinates. I also get a list of triangles with references
to 3 vertices in that list, a color for the triangle and a path to the
texture used. With the following code I got everything to work with
textures and all. The problem is performance.


//////////////////////////////////////////////////////////////// Start
of code ////////////////////////////////////////////////
// Create an array of independant triangles
TriangleArray[] myTriangles = new TriangleArray[numTriangles];
for (int i = 0; i < numTriangles; i++) {
    // Create this specific triangle
    myTriangles[i] = new TriangleArray(3, TriangleArray.COORDINATES |
TriangleArray.COLOR_3     |
TriangleArray.TEXTURE_COORDINATE_2 );
    // Loop through the vertices for this triangle
    for (int vtx = 0; vtx < 3; vtx++) {
        // Set the coordinate
        myTriangles[i].setCoordinate(vtx, new Point3d(getXinSomeWay,
getYinSomeWay, getZinSomeWay));
        // Set the texture coordinate
        texCoords[0] = getUinSomeWay;
        texCoords[1] = getVinSomeWay;
        myTriangles[i].setTextureCoordinate(vtx, texCoords);
     }
     // Set the color for this triangle
     myTriangles[i].setColors(0, getTriangleColorInSomeWay);
     // Specify the texture
     TriangleAppear = new Appearance();
     TriangleAppear.setTexture(textureArray[idxInTextureArray]);

TriangleAppear.setTextureAttributes(textureAttrArray[idxInTextureAttrArray]);

     // Add the triangle to the scene graph
     objRoot.addChild(new Shape3D(myTriangles[i], TriangleAppear));

    // Continue with next
  }

//////////////////////////////////////////////////////////////// End of
code ////////////////////////////////////////////////





Now I'm trying to optimize my code. So I thought about using an
IndexedTriangleArray to be able to reuse the vertices and that way
getting better performance. With the following code I get it to work
without color and textures. And it runs considerably faster.


//////////////////////////////////////////////////////////////// Start
of code ////////////////////////////////////////////////
  // Create the indexed triangle array with
  IndexedTriangleArray myTriangles = new IndexedTriangleArray(numVtx,
            GeometryArray.COORDINATES,
            numTriangles*3);
  // Set all the vertex coordinates
  for (int vi = 0; vi < numVtx; vi++)
      myTriangles.setCoordinate(vi, new Point3d(vertexList[vi].x,
vertexList[vi].x, vertexList[vi].z) );
  // Specify vertex indices for each triangle
  for (int f = 0; f < numTriangles; f++)
     for (int v = 0; v < 3; v++)
        myTriangles.setCoordinateIndex(f*3+v,
triangleList[f].vtxList[v]);

   // Add the triangles to the scene graph
   objRoot.addChild(new Shape3D(myTriangles, null));

//////////////////////////////////////////////////////////////// End of
code ////////////////////////////////////////////////


But the problem is that I want to specify a color for each triangle and
not per vertex. Also I want separate textures
for each triangle but I only can have one Apperance for the whole
Shape3D. What do I do?

I'm pretty new to Java/Java3D so maybe I have misunderstood something;
so please enlight me!!

Thanks in advance!
/Per Burstrom, Sweden

begin:vcard
n:Burstrom;Per
tel;fax:+46 278 186 23
tel;work:+46 278 639 209
x-mozilla-html:TRUE
url:http://www.insite.se
org:Insite
adr:;;Lasarettsv. 126;SE-821 31 Bollnas;;;Sweden
version:2.1
email;internet:[EMAIL PROTECTED]
title:Senior programmer
x-mozilla-cpt:;0
fn:Per Burstrom
end:vcard

Reply via email to