在 Java 3D 中是否可以在表面的每一侧使用不同的颜色?

Is it possible to have different colors on each side of a surface in Java 3D?

这就是我如何创建一个没有剔除的示例三角形表面

Point3f a = new Point3f(0, 0, 0);
Point3f b = new Point3f(0, 0, 1);
Point3f c = new Point3f(0, 1, 0);

TriangleArray pyramidGeometry = new TriangleArray(3, GeometryArray.COORDINATES);

pyramidGeometry.setCoordinate(0, a);
pyramidGeometry.setCoordinate(1, b);
pyramidGeometry.setCoordinate(2, c);

GeometryInfo geometryInfo = new GeometryInfo(pyramidGeometry);
NormalGenerator ng = new NormalGenerator();
ng.generateNormals(geometryInfo);

GeometryArray result = geometryInfo.getGeometryArray();

Appearance appearance = new Appearance();
PolygonAttributes polyAttrib = new PolygonAttributes();
polyAttrib.setCullFace(PolygonAttributes.CULL_NONE);
appearance.setPolygonAttributes(polyAttrib);

Shape3D shape = new Shape3D(result, appearance);

如果我给 Appearance 对象设置了一些颜色,这个颜色会显示在表面的两边。

我最好的猜测是这是不可能的,从逻辑的角度来看这是有道理的,因为表面只有两个维度(因此只有一个面),但我想知道是否可以为每一面设置不同的颜色的表面。这对我的申请很方便。否则我将需要复制表面以在每侧显示颜色。

我已经搜索过答案,但没有成功。

您可以决定是否只看到正面,但如果您真的想使用不同的颜色或纹理坐标,则需要创建另一个面。也许可以通过使用使用法线或顶点方向的着色器为前向侧和后向侧使用不同的颜色,但这并不简单,我认为这不值得......除了如果正面显示的颜色与背面显示的颜色之间存在关系。如果你想在 Java3D 中使用着色器,最好是使用下一个版本,即 Java3D 1.7,你应该向 Phil 寻求帮助。而是在官方 JogAmp 论坛上联系我们。