Координаты Java3D и HexGrid - PullRequest
       23

Координаты Java3D и HexGrid

1 голос
/ 06 февраля 2012

Я пытаюсь найти способ выяснить, находится ли Point3f внутри или на краю сетки, состоящей из шестиугольников (каждый из которых является определенным объектом Shape3D).

Идея состоит в том, чтобыизмените цвет шестиугольника, совмещенного с Point3f или обоими шестиугольниками, если точка находится на ребре.

Чтобы создать сетку, я использовал эту логику http://playtechs.blogspot.com/2007/04/hex-grids.html Так что довольно легко узнать, как шестиугольникрасположены друг от друга.

Моя проблема связана с координатами, в SceneGraph я использую структуру:

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

Каждая TransfromGroup создается с помощью Transform3D (Vector3F) для ее позиционирования в трехмерном пространстве

Я хотел бы восстановить координаты каждого шестиугольника из BranchGroup, поскольку мой Point3f будет сгенерирован накорень SceneGraph.

Я пытался поместить координаты вершины в HashMap, где Point - это координата в сетке гексагонаon, а Point3f [] - координаты в трехмерном пространстве каждой вершины шестиугольника.Я сделал это, добавив Шестигранник в строку, но, поскольку для размещения структуры до того шага с каждым из них будет 3 Вектора, то для каждой из них будет Локальная система координат, и я не смогу ее правильно работать.

Есть либолее простой способ найти координаты объекта Shape3d без необходимости добавления всех векторов, используемых для его получения?

Это даже правильный способ архивирования моей цели?(из того, что я недооценил, обнаружение столкновений работает только с 2 объектами, и мне действительно нужно знать, находится ли моя точка на краю, делает 3 объекта)

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 08 февраля 2012

Это может помочь:

javax.media.j3d.Node/Shape3D.getLocalToVworld(Transform3D t)
0 голосов
/ 07 февраля 2012

Ну, наконец, я нашел лучший подход, используя метод 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);
...