[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Java3Djp:01679] Re: BoundingBox について



 〜 12月1日新しいビジネスが始まる!ビジネスも楽天、楽天ビジネス誕生 〜
         ●●●●●●●●●●●●●●●●●●●●●●●●●●●
         ● サービスリリース第一弾!ビジネスサービス商談市場 ●
         ●●●●●●●●●●●●●●●●●●●●●●●●●●●
〜〜〜〜〜 今すぐアクセス! http://business.rakuten.co.jp 〜〜〜〜〜
----------------------------------------------------------------------

井藤@aie-resです。

# えんどうさんの回答で十分だと思うんですが…

<000001c068b3$ac5ee9f0$0cc8a8c0@gxpro> の、
   "[Java3Djp:01674] BoundingBox について" において、
   ""Takahiro Shinozaki" <shino@xxxxxxxxxx>"さんは書きました:
> はじめて投稿します。八嶋といいます。
> 基本的な質問だと思うのですが、聞きたいことがあります。
> 
> java3dの空間内に存在するオブジェクトの中心座標を
> 得るために、そのオブジェクトを囲む最小の直方体を BoundingBoxとして得て、そのBoxの中心をオブジェクトの
> 中心座標に指定しようとしています。
> Shape3D、あるいはGeometryのクラスのオブジェクトから
> 自動的にBoundingBoxを得るようなメソッドはあるのでしょうか。 Bounds#getBounds や BoundingBox#BoundingBox(Bounds boundsObject)
> などが使えるのかと思ったのですが、実際の使い方が解りません。
> もし自動的にBoundingBoxが得られるとしたら、どのような
> データ形式で帰って来るのでしょうか。 BoundingBoxが得られたら、その頂点座標を用いて
> オブジェクトの中心座標を得たいと思っています。
> 
Point3d lowerPoint3d = new Point3d();
Point3d upperPoint3d = new Point3d();
BoundingBox objectBoundsBox = 
   new BoundingBox(objectTG.getBounds());
objectBoundsBox.getLower(lowerPoint3d);
objectBoundsBox.getUpper(upperPoint3d);
とにかくこんなふうにして、
upperPoint3d.x
upperPoint3d.y
upperPoint3d.z
lowerPoint3d.x
lowerPoint3d.y
lowerPoint3d.z
を使えばできますよ。
後は、うまいことやってください。(^^;

> それに関連してなのですが、オブジェクトから
> それを構成しているポリゴンの頂点座標を得るには
> どうすればよいでしょうか。
> GeometryArray#getCoordRef3d()を使えば良いんじゃないかと
> 考えたのですが、実際の書き方が解りません。
> 
わたしも最初はそれだと思ったんですが、

> Shape3D objs =(Shape3D)namedobjs.get(objskeyArray[i]);
> Geometry geom = objs.getGeometry();
> objsCoordArray[j] = geom.getCoordRef3f();
> 
> と記述したのですが、geomのクラスと getCoordRef3d
> で使えるクラスが違うので、エラーが出ます。
> 
> java3d初心者なので基本的な質問かも知れませんが、
> 分かる方がいらっしゃいましたら回答をお願いします。
> 

Java3Djp:01585 でわたしは、

Cylinder cyl = new Cylinder( 0.5f, 0.5f );
Shape3D bodyShape = cyl.getShape( Cylinder.BODY );
TriangleStripArray geomArray = (TriangleStripArray)bodyShape.getGeometry();
Point3d[] cylPoint = new Point3d[geomArray.getVertexCount()];
for(int i=0;i<geomArray.getVertexCount();i++) {
 cylPoint[i] = new Point3d();
}
geomArray.getCoordinates( 0, cylPoint );
for(int i=0;i<geomArray.getVertexCount();i++) {
 System.out.println( cylPoint[i].x + ", " + cylPoint[i].y + ", " 
 + cylPoint[i].z + ", " );
}

とかやっています。
これで筒の部分の座標が出てきます。
Shape3D bodyShape = cyl.getShape( Cylinder.BOTTOM );
TriangleFanArray geomArray = (TriangleFanArray)bodyShape.getGeometry();
とやれば底の部分ですね。

GeometryArray.BY_REFERENCE を許可して
getCoordRef3f() で参照する方法は、わたしもわかんないです。