[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Java3Djp:00527] Re: タートルグラフィック・ライブラリー(2/3)
=================================================
【ロサンゼルス往復航空券のギリチケ】
→ 今日は \40,000 → 明日は \39,000
→ 明後日は \38,000 →・・。毎日下がり続けます。
http://www.naigainet.co.jp/ctour/←ここをクリック
早いもの勝ち!! Co.HEYツアー(担当:岩瀬)
================================================
遠藤です。ちょっと解説します。
このタートルグラフィック・ライブラリーは下記のソースコードを参考にしました。
・佐藤隆さん作の Logomotion (Cソース)
PC-9800 MS-DOS 用の 3D-Logo 言語のサブセットです。
http://www.vector.co.jp/soft/dos/prog/se004470.html
・堀江郁弥さんの 3次元タートルグラフィクスライブラリ (C++ソース)
http://hp.vector.co.jp/authors/VA000672/t3d.lzh
元になった 3D-LOGO 言語については、とっちゃん さんのアドバイスをいただきました。
「とっちゃん’ず る〜む」
http://www.biwa.ne.jp/~k-tochi/
[まだサボっている個所]
・ペンダウン直後のペンアップのとき座標配列の最後の要素を取り除く処理
-> 未実装です。フラグを使ったりするとかっこ悪いのでどうしようか悩んでます。
・実行時(シーン・グラフがライブ状態のとき)に描画亀を移動できません
-> GeometryArray に動的に座標を追加したりする方法を思い付かないので未実装です。
現在のところ、亀の移動をすべて終えた後にGeometryArrayに座標と色をセットする
という仕様になっています。
このままだと LOGO インタプリタが作れないので、どうにかしたいです。^^;
・アニメーションに未対応
-> タートルの移動をいったんすべてキューに入れて、Java 3D がやっているスケジューリングと
同期させて1ステップづつ実行していくような仕組みにしないと、
多分アニメーション出来ないと思います。(ウヒョー)
> /**
> * 視点をy軸ベクトル方向に向ける (移動も伴う)
> */
> protected void lookAt() {
> if (viewTransform != null) {
> double x = point.x + 800.0 * vy.x;
> double y = point.y + 800.0 * vy.y;
> double z = point.z + 800.0 * vy.z;
> Point3d center = new Point3d(x, y, z);
> Transform3D t3d = new Transform3D();
> t3d.lookAt(point, center, vz);
> t3d.invert();
> viewTransform.setTransform(t3d);
> }
> }
これが Transform3D#lookAt() の後に invert() しないとだめだというサンプルです。
> /**
> * 座標配列と色配列の最後の要素を削除
> */
> protected void removeLastPointAndColor() {
> if (points.size() > 1) points.removeElementAt(points.size() - 1);
> if (colors.size() > 1) colors.removeElementAt(colors.size() - 1);
> }
↑このメソッドは未使用です。
> /**
> * ペンアップ
> */
> public void penUp() {
> penDown = false;
> //ペンダウン直後なら最後の要素を取り除く処理
> }
↑これがサボっている個所です。^^;
--
えんどう やすゆき <yasuyuki@xxxxxxxxxx>
http://www.javaopen.org/jfriends/ (Java互助会ホームページ)