2014-11-05 101 views
1

我有两个多边形,并希望使用java3d将它们变成三角形网格。 但无论我尝试在某种错误的结果。我错过了什么?如何将多边形数组转换为java3d中的IndexedTriangelArray

下面是一些代码,我已经试过:

final int n = points.length; 
final int m = opoints.length; 
final GeometryInfo gi = new GeometryInfo(GeometryInfo.POLYGON_ARRAY); 
final Point3d[] npoints = Arrays.copyOf(points, n + m); 
System.arraycopy(opoints, 0, npoints, n, m); 
gi.setCoordinates(npoints); 
gi.setStripCounts(new int[] { n, m }); 

gi.convertToIndexedTriangles(); 
final IndexedTriangleArray it = (IndexedTriangleArray) gi.getIndexedGeometryArray(); 

final Point3d[] newPoints = new Point3d[it.getVertexCount()]; 

it.getCoordinates(0, newPoints); 
//  Exception in thread "main" java.lang.NullPointerException 
//  at javax.media.j3d.GeometryArrayRetained.getCoordinates(GeometryArrayRetained.java:5425) 
//  at javax.media.j3d.GeometryArray.getCoordinates(GeometryArray.java:3699) 

final int[] nidxs = new int[it.getValidIndexCount()]; 
it.getCoordinateIndices(0, nidxs); 

回答

0

我建议您先使用调试模式,要知道GeometryInfo变异convertToIndexedTriangles的电话后究竟如何。

从Java 3D 1.6.0是开源的,看它的源代码:https://github.com/hharrison/java3d-utils/blob/master/src/classes/share/com/sun/j3d/utils/geometry/GeometryInfo.java#L507 https://github.com/hharrison/java3d-utils/blob/master/src/classes/share/com/sun/j3d/utils/geometry/Triangulator.java#L625

可据我知道叫getCoordinateIndices()和getCoordinates()直接在GeometryInfo对象。

我无法保证我的建议可以与Java 3D的过时版本一起使用。

+0

当然,我可以(如果有必要的话)转向愤怒的偏执狂开发者模式并调试每一步。但我希望有人能指点我一个实例。它看起来像java3d是一个孤儿项目和用户被扼杀。 – 2014-11-05 22:16:04

+0

使用调试模式与偏执无关,查看源代码也是如此,即使API更易于使用,更好的文档记录和更好的设计,也不会有必要。 Java 3D不是一个孤儿项目,我花了几个星期的时间写了一篇关于它的教程,我开始将它的端口发布到JOGL 2,而Harvey仍然维护它。我们无法提供绝对所有用例的示例。我们不会放弃Java 3D用户,但即使我每天在这里回答有关它的问题,SO并不是寻求Java 3D帮助的最佳地点,而是去官方的JogAmp论坛。 – gouessej 2014-11-06 10:22:17

+0

此外,请记住,Java 3D是一个社区项目,我们尽我们所能(空闲时间)和阅读“用户被扼杀”之类的东西,而我每天花几个小时在StackOverflow,JogAmp论坛上回答问题JavaGaming.org自2006年以来相当令人沮丧。我们不能“喂养婴儿”,我努力给你足够的指示,让你自己学习,走得更远。你还期望什么?我不会为你写整个代码。调用gi.getCoordinateIndices()和gi.getCoordinates()并不困难。我不想苛刻,对不起。 – gouessej 2014-11-06 10:26:26