アニメーション
EusLispのアニメーションは、グラフィックアクセラレータを持たない
普通のワークステーション上での擬似リアルタイムグラフィックス機能を備えている。
その基本的な考え方は、長い時間かかって生成された1連の画像を高速に
再表示することである。
画像は2つの方法で保存される。
1つは、完全なピクセル画像を持つたくさんのXwindow pixmapを保存する。
もう1つは、陰線処理で得られる線分データを保存する。
前者は、高速で陰面処理された画像を表示するための方法であるが、
長いアニメーションではたくさんのメモリーをX serverに要求するため
適さない。
後者は、メモリーが少なくて済み、データをディスクに蓄積するのに適する。
しかし、線分の数が増加したならば、性能を悪化させる。
他の方法として、描かれるオブジェクトの構成を得て、
*viewer*に描画を生成する関数をユーザーが作ることもできる。
pixmap-animationは、count引数で指定された数と同じ回数この関数を呼び出す。
それぞれの呼び出し後、Xwindowと仮定されるviewsurfaceの内容は、
新しく作られたXwindow pixmapにコピーされる。
これらのpixmapは、playback-pixmapで再表示される。
同様に、hid-lines-animationはhidの結果から見える線分を抜き出し、
リストに蓄積する。
そのリストは、playback-hid-linesによって再表示される。
以下に示す関数は、"llib/animation.l"に定義されており、
"llib/animdemo.l"の中にはETA3 マニピュレータのモデルに関して
hid-lines-animationを用いたアニメーションの
サンプルプログラムを含んでいる。
pixmap-animation count &rest forms [マクロ]
-
-
formsは、count回評価される。
それぞれの評価後、*viewsurface*の内容は新しいpixmapにコピーされる。
count枚のpixmapのリストが、返される。
playback-pixmaps pixmaps &optional (surf *viewsurface*) [関数]
-
-
pixmapsリストのなかのpixmapはそれぞれ、
surfに連続的にコピーされる。
hid-lines-animation count &rest forms [マクロ]
-
-
hidへの呼び出しを含むformsがcount回評価される。
それぞれの評価後、*hid*が持つhidの結果は検索され、
見える線分は2点一組のリストの形で集められる。
count長さのリストが返される。
playback-hid-lines lines &optional (view *viewer*) [関数]
-
-
linesは、2点一組のリストである。
viewの上に線分を連続的に描く。
他のpixmapを割り当てるときにフリッカーフリーアニメーションを生成するために
2重バッファ技法が使用される。
list-visible-segments hid-result [関数]
-
-
hid-resultのedge画像のリストから見える線分を集める。
2016-04-05