如何从Java3D中的IndexedGeometryArray读取顶点坐标和三角形索引?

时间:2015-12-01 02:14:47

标签: java opengl

我正在进行网格存储工作,即简单地将未编制索引的网格转换为索引网格。这样的工作:

GeometryInfo gi = new GeometryInfo(GeometryInfo.POLYGON_ARRAY);
gi.setCoordinates(points);
gi.setStripCounts(strips);
gi.setContourCounts(contours);
gi.convertToIndexedTriangles();
IndexedGeometryArray ga = gi.getIndexedGeometryArray(true);

我想现在是阅读和存储顶点和三角形信息的好时机,这些信息以[[xyz],[xyz],,,[xyz]] as vertices[[abc],[abc],[abc],,,[abc]] as triangles的形式出现,而这些新顶点的数量应该少得多比没有索引的那个。

然而,我读的javadoc越多,我就越困惑。似乎从GeometryArray继承的方法getCoordinates()将导致旧的顶点和getCoordinateIndices()的新方法很难理解,如getCoordinateIndices(0, indices)。为什么0?什么存储在这个指数?如果它们都错了,那么应该采用哪种方法?

谢谢!

1 个答案:

答案 0 :(得分:0)

几分钟后,我发现了这样的事情:

GeometryInfo gi = new GeometryInfo(GeometryInfo.POLYGON_ARRAY);
gi.setCoordinates(points);
gi.setStripCounts(strips);
gi.setContourCounts(contours);
gi.convertToIndexedTriangles();
IndexedGeometryArray ga = gi.getIndexedGeometryArray(true);

double [] originalVertices = new double [ga.getVertexCount() * 3];
for(int i = 0; i < ga.getVertexCount(); i++ ){
   double [] coord = new double [3];
   ga.getCoordinate(i, coord);
   for(int j = 0; j < 3; j++)
      originalVertices[i*3+j] = coord[j];
   }//next i
}//next
int[] triangles = new int[ga.getValidIndexCount()];
ga.getCoordinateIndices(0, triangles);

我不太明白为什么但它确实有效,实际上非常好。