2017-08-13 50 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論壇上與我們聯繫。

相關問題