1

Point3fが六角形(それぞれが特定のShape3Dオブジェクト)でできたグリッドの内側にあるのか、エッジにあるのかを見つける方法を見つけようとしています。

ポイントがエッジ上にある場合は、Point3fまたは両方の六角形を一致させる六角形の色を変更するというアイデアがあります。

グリッドを作成するために、このロジックを使用しましたhttp://playtechs.blogspot.com/2007/04/hex-grids.html したがって、六角形が互いにどのように配置されているかを知るのはかなり簡単です。

私の問題は座標に関連しています。SceneGraphで使用する構造があります。

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

各TransfromGroupは、3D空間に配置するためにTransform3D(Vector3F)を使用して作成されます

Point3fはSceneGraphのルートで生成されるため、BranchGroupから各六角形の座標を復元したいと思います。

頂点座標をHashMapに配置しようとしました。ここで、Pointは六角形のグリッド内の座標であり、Point3f[]は六角形の各頂点の3D空間内の座標です。行に六角形を追加しながらそれを行いましたが、それぞれがローカル座標系でそのステップまで構造を配置するための3つのベクトルであるため、正しく機能することはできません。

そこに到達するために使用されるすべてのベクトルを追加することなく、Shape3dオブジェクトの座標を見つける簡単な方法はありますか?

それは私の目標を達成するための適切な方法でさえありますか?(私が理解したことから、衝突検出は2つのオブジェクトでのみ機能し、ポイントがエッジ上にあるかどうかを本当に知る必要があり、3つのオブジェクトになります)

助けてくれてありがとう !

4

2 に答える 2

0

これは役立つかもしれません:

javax.media.j3d.Node/Shape3D.getLocalToVworld(Transform3D t)
于 2012-02-08T07:34:28.723 に答える
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 に答える