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

[Java3Djp:00378] Re: 法線について



■■■■■■■■■■■■人間関係を円滑に!!■■■■■■■■■■
■私と友人・私と恋人・上司と部下・教師と生徒・親と子・自分探し■
■  各種講座・カウンセリング・カウンセラー養成・企業研修  ■
■月間相談数600件 カウンセラー30名在籍 15年の実績  ■
■   TMA 東京メンタルヘルスアカデミー 東京・千葉・大阪■
■■■■■■■■■http://www.nayami.com/tma/■■■■■■■■■■

>○法線とは
>
>・線や面の法線と言えば定義(外積)はわかりますが、
> (Java)3Dにおいてはどのような役割があるのでしょうか?
> 現在はLightを使用したいので法線が必要となっております。

法線は照明の計算に必要です。照明をしないのであれば法線は不要です。

面法線は3頂点の外積で計算できますが、
頂点法線というものもあり、こちらの計算方法は私は良く分かりません。
頂点ごとに法線を指定した場合、よりきめ細かい照明効果のの制御が可能のようです。

>・それから四面体の場合などは、どの面でもよろしいのでしょうか?

すべての面に必要です。

>・また始めに法線を設定した後、その物体のGEOMETRYを変更しても
> 法線は気にすることはないのでしょうか?

再計算が必要だと思います。

>○法線の設定方法
>
>・今まではPrimitiveを使用していたので、あまり考えることもなかったのですが
> 自分でGeometryを設定した場合の法線の作成方法と設定方法のアドバイスを頂けると
> たすかります。
> (遠藤さんの"法線を計算するクラス"を見てもわからなかったもので。。。)

まず、頂点データが必要です。これは Point3d の配列などを使って定義します。
つぎに、この頂点データの配列要素のインデックス(これは整数値です)を定義します。
例えば、3角形ポリゴンなら3頂点のインデックスを定義して行きます。
このとき、左回りの面が表面になるので注意してください。

        V0


   V1        V2

これは表向きのポリゴンになりますが、

        V0


   V2         V1

これは裏向きのポリゴンになります。

こうして一つ一つの頂点インデックスを指定し終わったら、
これを int の配列として com.sun.j3d.utils.geometry.GeometryInfo にセットします。

[Java3Djp:000374] から。

>[Q] 法線を計算したいのですが
>
>     com.sun.j3d.utils.geometry.NormalGenerator というクラスがあります。
>     まず com.sun.j3d.utils.geometry.GeometryInfo に
>     頂点座標の Point3d などの配列、頂点インデックスの int 配列をセットしておき、
>     NormalGenerator の public void generateNormals(GeometryInfo geom) で
>     法線を計算できます。
>
>     例:
>       GeometryInfo ginfo =
>         new GeometryInfo(GeometryInfo.TRIANGLE_ARRAY);
>       ginfo.setCoordinates(verts);         // verts は Point3d の配列(頂点データ)
>       ginfo.setCoordinateIndices(indices); // indices は int の配列 (頂点index)
>       NormalGenerator ngen = new NormalGenerator();
>       ngen.generateNormals(ginfo); 
>       Shape3D shape =
>         new Shape3D(ginfo.getIndexedGeometryArray());
------------------------------------------------------------------
遠藤靖之 (えんどう やすゆき) <yasuyuki@xxxxxxxxxx>
http://www.javaopen.org/jfriends/ (Java互助会ホームページ)
株式会社タイムインターメディア 情報通信サービス部 TEL 03-5362-9009
〒162-0065 新宿区住吉町3-11    新宿スパイアビル   FAX 03-5362-9008