ユビキタス鉄道模型
赤外線リモコン戦車
レーザ・グラフィックス
├ ハードの設計
├ ソフトの開発
└ おわりに
USB加速度センサマウス
ビジョンシステム
リアルタイムOS
LCD表示パネル
相撲ロボット
多自由度ロボット
 開発事例 TOPへ
 HOMEへ
イエローナビ
 ページTOPへ
 開発事例 TOPへ
 HOMEへ
YellowSoft.com
製品紹介 Q&A ダウンロード 開発事例 ユーザ ご購入 価格表 お問合せ
 レーザ・グラフィックス


  H8/3048Fを用いたレーザ・グラフィックスの製作
    増崎 武次


  ソフトの開発

    アプリケーション・プログラム

   
図6 アプリケーション・プログラムの概略


図6はアプリケーション・プログラムの概略を表したものです。これはレーザ・グラフィックスがスクリーンに描く内容で、(1) → (2) → (3)の順序で演出します。

その内容は(1) DIGITAL MUSEUMのロゴ・マーク、(2) 世界平和のサミットが行われたアフリカ大陸、(3) 世界を駆け巡るランナーで構成されています。

(1)から(3)までの共通する演出は、縮小・拡大・回転の3つです。回転についてはそれぞれ(1)がZ軸、(2)がY軸、(3)がX軸のまわりで回転するようにプログラムを工夫しました。

さらに(1)から(2)へ、(2)から(3)へ、(3)から(1)へ移る過程はすべてモーフィングの技法を使っています。プログラム・リストでも後述しますが、モーフィングはそれ以外に縮小・拡大・回転の演出すべてに利用しています。


    モーフィング

モーフィングの応用については枚挙にいとまがなく、映画やコマーシャルなどに数多く使われています。例えば女性の顔がライオンに変身したり、男性の顔になるなど、画像処理の世界では自由自在です。

   

図7 モーフィングの概念


ここでは図7のようなリンゴからバナナに変化するモーフィングを例にあげます、モーフィングを行うには、あらかじめ二つの画像が必要で、この場合リンゴとバナナが二つの画像に相当します。

モーフィングの基本的な考えは、古い座標から新しい座標へ移る過程を時々刻々と表示することです。また日本ではモーフィングのことを中間連続写像と呼び、数式で表現すると


のようになります。図7の場合リンゴが旧座標Uoldに、バナナが新座標Unewに対応します。(1)式のtは0.0から1.0まで変化するパラメータで、tが 0.0であればリンゴを、1.0であればバナナを描きます。

図8はtが0.0から1.0まで変化する様子をアニメーションGIFで表現したものです。

   
図8 リンゴからバナナへのモーフィング(tは0.1ステップ)


とくにtが0.5の場合をバナップル(アップルとバナナの合成語)と呼び、リンゴとバナナの平均画像を表しています。

これは数年前、雑誌や新聞、テレビなどで話題になった職業別の平均顔 ―― 例えば東京大学の大学院生や政治家・プロレスラー・銀行員・ミス日本 ―― と同じ概念です。


    プログラム・リスト

ここではソース・ファイルの内容について補足します。図9のフロー・チャートと対応させると分かりやすいでしょう。

今回はH8のポートAとポート3を出力として使い、行番号13から16でアドレスの設定を行っています。

   
図9 フロー・チャート


行番号25から132までが図6の座標データです。

(1)ロゴ・マーク、(2)アフリカ大陸、(3)ランナーのデータは行番号18で定義しているように35個の座標から構成されており、データの大きさはD/Aコンバータが8ビットのため、いずれも0から255までの数値です。ここで出てくる静的変数の名前の意味ですが、例えばx_museum_000[N]は、最初のxはX軸を表します、museumは「DIGITAL MUSEUM」のロゴ・マークの意味があります.最後の000は角度0度の意味です。

皆さんの中には角度のデータが000から270度まであるのを不思議に思われる方もおられるのではないで しょうか?

最初のプログラミングでは三角関数を用いて座標の回転を計算し ていたので、プログラムも非常にシンプルでした。

本来、スクリーンへの演出は連続的なものですが、この方式を採用すると座標の計算に時間がかかり、その間はレーザ光線が出力されずに断続的な演出になってしまいます。 そこで、あらかじめ座標の回転をデータとして配列に格納することを思いつき、トラブルの解消に成功しました。

このような理由から、ソース・リストの大半は座標を回転するためのデータと旧座標・新座標への変換のルーチンで構成されています、行番号143から393までは旧座標・新座標への変換のルーチンです。このルーチンは大別してモーフィングおよび拡大・縮小・回転のルーチンで構成されています。

行番号395から407までがモーフィングの座標を計算するルーチンで、前述の(1)式を使っています。行番号409から421はガルボを制御するルーチンです。

行番号423から445までがメイン・ルーチンで、そこから上記のサブ・ルーチンを呼びだしています。


    デバッグの方法および作成上の注意

プログラム・リストを実行する前に、ぜひやって頂きたいことは描画のテストです。これは方眼紙のスクリーンにリサージュ図形を描画する簡単なテストです。

例えばX軸とY軸のガルボに、周波数比1:1のサイン波とコサイン波を出力するようなプログラムを作成します。完全なガルボであればスクリーンに真円が描画されるはずですが、実際のガルボには偏向角にバラツキがあるので、 出力に補正係数を乗じて調整する必要があります。

描画テストの次は制御パラメータの調整です。行番号19のADJはガルボの応答時間を調整するパラメータで、数値の大小によって描画される内容も大きく異なります。

数値を小さくするとガルボのスキャニング速度は増しますが、その代償として丸みをおびた模様になります。逆に大きくするとガルボはゆっくりと走査するので、フリッカ(ちらつき)を生じながら角張った模様になります。

今回は“2200”に設定しています。行番号20のITEが描画の繰り返し回数で、H8の環境下では“1”で十分でした。



← ハードの設計 3/4 おわりに →