我正在进行网格存储工作,即简单地将未编制索引的网格转换为索引网格。这样的工作:
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?什么存储在这个指数?如果它们都错了,那么应该采用哪种方法?
谢谢!
答案 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);
我不太明白为什么但它确实有效,实际上非常好。