The combination of setting the shininess to 1 and the specular color to something near black has solved the problem. Just doing one of the two doesn't work.
I also used GeometryInfo to recalculate the normals, and now the cylinders look round instead of faceted, so that's an added bonus. That must be an indication of the "small diffuse shading errors" you mentioned. It turns out that GeometryInfo has an extra constructor that takes a GeometryArray which was not mentioned in the JavaDoc API, so it was easier to use than I expected.
I've also added a PolygonAttributes component to cull the back-facing polygons, but that doesn't seem to make any difference.
Your video driver should have a setting for gamma correction, which adjusts the relative brightness of the dark areas with respect to the light areas. You should set all your monitors to the same gamma if want to compare colors between them. Standard "linear" gamma is 2.2 (with respect to the dynamic range of the human visual system) but most monitors tend to set at 1.0 because that seems to be what most GUI and game developers design for.
I still have to look into this. It may explain why our application looks so different between different operating systems and video cards.
Thanks again. It's great to solve that mystery.
Monica
=========================================================================== 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".