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

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

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

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

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

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

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

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

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

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

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

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


person kwenji    schedule 06.02.2012    source источник


Ответы (2)


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

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

javax.media.j3d.Node/Shape3D.getLocalToVworld(Transform3D t)
person InteractiveMesh    schedule 08.02.2012