Next: 23 eus/sampleデモプログラム
Up: ソフトウェア第三 講義資料 クロージャ,スコープ,遅延評価,オブジェクト,立体モデル
Previous: 21.3 集合演算
立体の表示のためには,表示クラスviewerのインスタンスを定義する必要がある.
通常viewerのインスタンスを生成するための関数としてviewが用いられる.
eusx$ (setq *viewer* (view :viewpoint #f(1000 1000 500)))
#<viewer #X1028e29c eusx view>
eusx$ (draw (make-cube 100 200 300))
nil
とすると,viewの実行で,画面に図4左のような
ウィンドウが表示されて,drawによって右のように立体が表示される.
eusでは,EUSDIR という環境変数にeus環境をインストールした
ルートディレクトリを設定しておく必要がある.
そのEUSDIRの下のlibとlib/demoの下のプログラムファイルについては
絶対パスを入力しなくてもロードすることができる.
EUSDIR/lib/demoの下には,view.lというファイルが用意されており,
これをロードすると,その中に定義されているビューを利用する
ことができるようになる.
現在のview.lには,
(setq *viewer*
(view :size 450
:title
(format nil "EusViewer~d"
(length *viewers*))
:x 100 :y 100
:viewpoint #f(1200 800 500)
:target #f(0 0 0)
:hither 100.0
:yon 5000.0
:screen 1.0
:viewdistance 3.0))
(setq *viewsurface* (send *viewer* :viewsurface))
(setq *viewport* (send *viewer* :viewport))
(setq *viewing* (send *viewer* :viewing))
というように定義が行われている.
そこで,
eusx$ (load "view.l")
t
eusx$ (draw (make-cube 100 200 300))
nil
とすると表示がなされる.
空間中での視点座標系と視界を定義するviewing,
投影を定義するprojection,2次元表示空間を定義するviewport,
表示デバイスを定義するviewsurfaceなどのクラスがある.
(defclass viewing
:super cascaded-coords
:slots (viewcoords))
(defclass projection :super viewing
:slots ((screenx :type float)
(screeny :type float)
(hither :type float)
(yon :type float)
projection-matrix))
(defclass parallel-viewing
:super projection)
(defclass perspective-viewing
:super projection
:slots ((viewdistance :type float)))
(defclass viewport :super coordinates)
(defclass viewer :super propertied-object
:slots (eye port surface alt-surface))
(defclass viewsurface :super propertied-object)
viewingは,図5のような形で座標系と
視界の範囲を持つ.
generated through LaTeX2HTML. M.Inaba 平成18年5月7日