next up previous
Next: 23 eus/sampleデモプログラム Up: ソフトウェア第三 講義資料 クロージャ,スコープ,遅延評価,オブジェクト,立体モデル Previous: 21.3 集合演算

22 グラフィックス表示

立体の表示のためには,表示クラス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によって右のように立体が表示される.
図 4: viewとcubeの表示
\includegraphics[height=4cm]{/home/inaba/eps/lecture/eus-view-10001000500.eps} \includegraphics[height=4cm]{/home/inaba/eps/lecture/eus-view-cube100200300.eps}
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のような形で座標系と 視界の範囲を持つ.
図 5: 視点座標系と視界


generated through LaTeX2HTML. M.Inaba 平成18年5月7日