Looks like the geometry array was built without a COLORS_3 or COLOR_4 flag.
That would mean that the geometry array cannot have its colors set. If you
can't figure out a a way to ask the loader to set that flag for you (in the
absence of it being provided in the file) then wou will have to build a new
geometry array and copy the coordinates into it.
Dave Yazel
----- Original Message -----
From: Norbert Sch�pke <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, February 19, 2002 7:02 AM
Subject: [JAVA3D] problems constructing geometry with color per vertex
Hi all !
I have a problem with assigning colors per vertex to an
IndexedGeometryArray.
I load the geometry with the SUN loader (it's plane vanilla VRML IFS with
material color information but _NO_ color per vertex at this point).
Then I calculate some weight for every vertex and map that into a color
range.
Now I wanted to assign these colors to the vertices already loaded geometry,
so I made a new instance of IndexedTriangleArray with the correct vertex
format (means including ITA.COLOR_3)
and then the problems begin.
How should I set up the color array ? The number of colors does not
correspond to the vertex count neither should it 'cause it's an indexed
format, right ?
Currently I use this code :
ita.setCoordinates(0,coords);
ita.setCoordinateIndices(0,coordIndices);
ita.setColors(0,colors);
ita.setColorIndices(0,colorIndices);
where the colors and color indices are set with default values and later
changed in a loop by :
Color3f nc3 = new Color3f(1.f,
1.f-(float)weights[currentWeight], 0.f);
ita.setColor(currentWeight, nc3);
Color3f c3 = new Color3f();
ita.getColor(ita.getColorIndex(v1), c3);
if ( 1.f-(float)weights[currentWeight] < c3.y ) {
ita.setColorIndex(ita.getColorIndex(v1), currentWeight);
}
My code throws this exception at runtime :
java.lang.ArrayIndexOutOfBoundsException: GeometryArray: has no colors
at javax.media.j3d.GeometryArray.getColors(GeometryArray.java:2677)
at cutnglue.CutNGlue.init(CutNGlue.java:112)
at com.sun.j3d.utils.applet.MainFrame.run(MainFrame.java:294)
at java.lang.Thread.run(Thread.java:484)
It's caused by this line in the main class:
colorization.getIndexedTriangleArray().getColors(0, colors);
I know my method returns an IGA, I checked with getClass().getName()
So is this a bug or am I missing something here ?
Where can I find more info about this subject ? ( the javadoc isn't that
clear on these things )
I attached the complete source for the colorization class which handles the
construction of the new ITA with colors per vertex
btw. If I comment out the line, I get drawn a completely white shape, even
without shading...
Just a white blob in a black window. How can that be ?
I create a Shape3D using the constructed geometry like this :
public static Appearance createAppearance(float r, float g, float b) {
Material material = new Material();
material.setDiffuseColor(r, g, b);
file://material.setEmissiveColor(.3f, .3f, .4f);
ColoringAttributes ca = new ColoringAttributes();
Appearance appearance = new Appearance();
appearance.setMaterial(material);
appearance.setPolygonAttributes(new
PolygonAttributes(PolygonAttributes.POLYGON_FILL,
PolygonAttributes.CULL_NONE , 0.f));
appearance.setColoringAttributes(ca);
return appearance;
}
public static Shape3D buildShape3D(IndexedTriangleArray ita) {
Shape3D shape3d = new Shape3D(ita, createAppearance());
return shape3d;
}
Thanks to all who cared enough to read this to the end...maybe it's just a
simple glitch of me
Norbert Schoepke
[EMAIL PROTECTED]
===========================================================================
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".