2017-08-13 47 views
1

这是我如何创建一个示例三角面没有剔除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); 

如果我设置一些颜色的外观对象,这种颜色将显示在表面的两侧。

我最好的猜测是,这是不可能的,从逻辑的角度来看,因为表面只有两个维度(因此只有一张脸),但我不知道是否可以为每一面设置不同的颜色表面。这对我的应用程序很方便。否则,我需要复制曲面以显示每面的颜色。

我已经搜索了一个没有运气的答案。

回答

2

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

相关问题