1

我试图找出一种方法来查找 Point3f 是否在由六边形(每个都是特定的 Shape3D 对象)制成的网格的内部或边缘上。

如果该点位于边缘,则想法是更改与 Point3f 或两个 Heaxgon 相同的 Hexagon 的颜色。

为了制作网格,我使用了这个逻辑http://playtechs.blogspot.com/2007/04/hex-grids.html 所以应该很容易知道 Hexagon 是如何相互定位的。

我的问题与坐标有关,我在 SceneGraph 中使用了结构:

BranchGroup > TransformGroup > Hexagrid (TransformGroup) > HexaRow (TranformGroup) > Hexagon (Shape3D)

每个 TransfromGroup 都使用 Transform3D(Vector3F) 创建以将其定位在 3D 空间中

我想从 BranchGroup 中恢复每个 Hexagon 的坐标,因为我的 Point3f 将在 SceneGraph 的根上生成。

我试图将顶点坐标放在 HashMap 中,其中 Point 是六边形网格中的坐标,Point3f[] 是六边形每个顶点在 3d 空间中的坐标。我在行上添加六边形时这样做了,但是由于是 3 个向量来放置结构,直到该步骤与每个本地坐标系一起,我无法让它正常工作。

有没有一种更简单的方法可以找到 Shape3d 对象的坐标,而无需添加所有用于获取它的向量?

这甚至是实现我的目标的正确方法吗?(据我了解,碰撞检测仅适用于 2 个对象,我真的需要知道我的点是否在边缘,生成 3 个对象)

谢谢您的帮助 !

4

2 回答 2

0

好吧,最后我找到了一个更好的方法,使用 Transform3D mul 方法

    translateRootTG.addChild(hexaGrid);

    Polygon myPolygon = hexaGrid.getPolygon(19,1);
    // Get the First TransformGroup that containt the first Translation
    TransformGroup firstTransform= (TransformGroup)myPolygon.getParent();
    // the the Second TransfromGroup that containt the secondary Translation
    TransformGroup secondTransform = (TransformGroup)myPolygon.getParent().getParent().getParent().getParent();
    // Get the Transform3D from the first TransformGroup
    Transform3D firstTranslation = new Transform3D(); 
    firstTransform.getTransform(firstTranslation); // put the Transform in T3D var
    // Get the Transform3D from the second TransformGroup
    Transform3D secondTranslation = new Transform3D(); 
    secondTransform.getTransform(secondTranslation); // put the Transform in T3D var

    // Mul Transform3D to have complete translation
    Transform3D t3DTotalPolygon = new Transform3D();
    t3DTotalPolygon.mul(firstTranslation, secondTranslation);

    TransformGroup tgTest = new TransformGroup(t3DTotalPolygon);
    tgTest.addChild(new ColorCube(0.03f));
    translateRootTG.addChild(tgTest);
于 2012-02-07T09:58:23.870 回答
0

这可能会有所帮助:

javax.media.j3d.Node/Shape3D.getLocalToVworld(Transform3D t)
于 2012-02-08T07:34:28.723 回答