5章 Lua拡張命令
著者:梅谷 武
語句:ToposNote, Lua, 描画機構, 照明, シェーディング, Lua拡張命令, tn命令, dx命令
Lua拡張命令の仕様について述べる。
作成:2009-12-26
更新:2011-03-08
ToposNoteにはLuaインタプリタを拡張したものが組み込まれています。ToposNoteを使うにあたって必ずしもLuaの知識は必要ありませんが、Luaを習得することによってさらに便利なツールとなります。
Lua言語については、文献[
1,
2,
3]のような解説書や多数のWebコンテンツがありますから、本マニュアルではToposNote向け拡張機能についてのみ述べることにします。
Luaを使う際の注意事項として、Luaは日本語に対応していないということがあります。LuaスクリプトはすべてASCIIコードで書かなければなりません。スクリプト中で参照するファイル名、フォルダ名も例外ではありません。
このため、ToposNoteをインストールするフォルダ名、ToposNoteに貼り付けるさまざまなデータを含むフォルダ名もASCIIコードで書かれている必要があります。
Luaは汎用のスクリプト言語であり、標準ライブラリには入出力機能やOSのシステムコールを呼び出す機能を備えていますから、コンピューター内のファイルを自由に操作できます。したがって、その実行には危険性が伴うことに注意しなければなりません。
ToposNoteでは、初期状態ではLuaスクリプト実行時にダイアログボックスで確認するようになっていますが、これはユーザーに対して注意を喚起することを目的としています。出所不明のLuaスクリプトを実行する際には、事前に処理内容を確認するようにしてください。
このダイアログボックスは[メニュー]→[動作]→[Lua]のチェックボックスをチェックすることで表示しないようにすることができます。
ToposNoteに貼り付けられた物体はプログラム内部では、トポスオブジェクトの連想配列としてオブジェクトの種類に固有な方法で格納されています。
ToposNoteはユーザーやシステム環境から送らてくるさまざまなメッセージを優先的に処理し、そのアイドル時間に連想配列に登録されたトポスオブジェクトを順番に描画していきます。
Lua拡張命令によって定義された図形オブジェクトも上の連想配列に登録されて順番に描画されますが、Lua拡張命令はデータではなく、中間言語形式の命令列として保存されており、描画時にこの命令列が順番に実行されていきます。この機構は他のトポスオブジェクトの処理機構とは別になっているため、Lua拡張命令で定義された図形は移動、拡大縮小、削除は可能ですが、トポスオブジェクトのようにコピーができません。
移動可能な白色平行光源が定義されています。
環境光
| ( 0.6, 0.6, 0.6, 1.0 ) |
拡散光
| ( 1.0, 1.0, 1.0, 1.0 ) |
鏡面光
| ( 0.8, 0.8, 0.8, 1.0 ) |
初期状態でグーローシェーディングに設定されています。
Luaによる作図法はToposNoteに組み込まれたLua拡張命令と、Luaにより記述された外部の幾何ライブラリを併用して行なわれます。この章ではLua拡張命令の仕様を記述し、次の章で幾何ライブラリの仕様を記述します。
これらを使った作図法の詳細やその基礎となる幾何学については次の文献を参照してください。
ToposNoteをインストールしたディレクトリがカレントディレクトリとなり、相対パス指定はこれを基準とします。相対パス指定したい場合は、作業ディレクトリをインストールディレクトリ下に置いてください。そうで無い場合は、絶対パス指定してください。
なお、パス指定に日本語は使えませんので注意してください。
ToposNoteにおけるLua拡張命令には、tn命令とdx命令の二種類があります。tn命令はToposNote本体に対する動作指示で、Luaインタプリタで解釈された時点で実行されます。dx命令はDirectXに対する命令で、Luaインタプリタでの解釈時には、中間言語に変換されてdx命令バッファに格納されるだけです。tn命令:tnNewObject()が実行されたときに、dx命令バッファ全体が新しい図形オブジェクトとして生成され、dx命令バッファが消去されます。
引数
| 無し
|
機能
| Windowsにおける一般警告音を発する。
|
引数
| 無し
|
機能
| Windowsにおけるシステムエラー音を発する。
|
引数
| 無し
|
機能
| 命令実行時のトポスオブジェクト連想配列を描画する。
|
引数
| 待ち時間[msec]
|
機能
| 指定時間だけ処理を停止する。
|
引数
| 文字列
|
機能
| 指定文字列をLua出力ダイアログに表示する。
|
引数(1)
| Cx, Cy, Cz |
引数(2)
| Cx, Cy, Cz, Lat, Lng, Zoom, Proj, Coord |
機能
| カーソルを指定位置に移動する。引数にカーソル中心位置、カメラ緯度、カメラ経度、ズーム番号、投影法(0:平面/1:立体)、座標系(0:幾何/1:測地)を指定することができる。
|
引数
| Lat, Lng, Alt |
機能
| tnCursorにおいて、位置を緯度・経度・標高で指定するときに使う。
|
引数(1)
| 名前, ファイル名 |
引数(2)
| 名前, GPSファイル名, r, g, b, LineWidth |
引数(3)
| 名前, ファイル名, Mx, My, Mz, Yaw, Pitch, Roll, Scale[,Flag] |
機能
| 指定ファイルから指定名の新しいトポスオブジェクトを生成する。引数で連想配列に登録するときの名前、位置座標、オイラー角、拡大縮小係数、[表示フラグ]を指定することができる。GPSファイルにより、GPS軌跡を生成するときは表示線色と線幅を指定する。
|
引数
| 名前, ファイル名, Lat, Lng, Alt, Yaw, Pitch, Roll, Scale[,Flag] |
機能
| tnLoadObjectにおいて、位置を緯度・経度・標高で指定するときに使う。
|
引数(1)
| 名前, 運動軌跡数, 運動軌跡配列
|
引数(2)
| 名前, GPSファイル名
|
機能
| 指定名のトポスオブジェクトに運動軌跡を設定する。GPS軌跡ファイルからも運動軌跡を設定することができる。
|
引数
| 名前, ファイル名
|
機能
| 指定名のトポスオブジェクトにファイルを関連付ける。
|
引数
| 名前, Flag
|
機能
| 指定名のトポスオブジェクトの表示フラグ(0:非表示/1:表示)を設定する。
|
引数(1)
| 無し |
引数(2)
| 名前 |
引数(3)
| 名前, Mx, My, Mz, Yaw, Pitch, Roll, Scale[,Flag] |
機能
| dx命令バッファから新しいトポスオブジェクトを生成し、dx命令バッファを消去する。引数で連想配列に登録するときの名前、位置座標、オイラー角、拡大縮小係数、[表示フラグ]を指定することができる。
|
引数
| 名前, Lat, Lng, Alt, Yaw, Pitch, Roll, Scale[,Flag] |
機能
| tnNewObjectにおいて、位置を緯度・経度・標高で指定するときに使う。
|
引数
| デバイス状態名, 状態値 |
機能
| デバイス状態名と状態値の詳細については、MSDNのIDirect3DDevice9::SetRenderStateの項目を参照のこと。幾何ライブラリ(DirectX.lua)にはDirectXのすべてのデバイス状態名と状態値が定義されている。
|
DirectX内部において材質は
D3DMATERIAL9構造体で表現される。
typedef struct _D3DMATERIAL9 {
D3DCOLORVALUE Diffuse; // 拡散反射色(Dr,Dg,Db,Da)
D3DCOLORVALUE Ambient; // 環境反射色(Ar,Ag,Ab,Aa)
D3DCOLORVALUE Specular; // 鏡面反射色(Sr,Sg,Sb,Sa)
D3DCOLORVALUE Emissive; // 発光色(Er,Eg,Eb,Ea)
float Power; // 鏡面反射係数
} D3DMATERIAL9;
引数
| Dr,Dg,Db,Da,Ar,Ag,Ab,Aa,Sr,Sg,Sb,Sa,Er,Eg,Eb,Ea,power |
機能
| D3DMATERIAL9構造体により材質を設定する。
|
引数(1)
| R成分, G成分, B成分 |
引数(2)
| R成分, G成分, B成分, A成分 |
機能
| RGB表色系により材質を設定する。
|
引数(1)
| H成分, S成分, V成分 |
引数(2)
| H成分, S成分, V成分, A成分 |
機能
| HSV表色系により材質を設定する。
|
引数
| ファイル名 |
機能
| 指定ファイルの画像をテクスチャとして設定する。
|
引数
| 破線拡大縮小係数 |
機能
| 破線拡大縮小係数を設定する。
|
引数
| 無し
|
機能
| 変換行列スタックを一段下に押し下げる。最上位行列はそのまま保持されるので、最上位と二段目には同じ行列が格納される。
|
引数
| 無し
|
機能
| 変換行列スタックを一段上に押し上げる。最上位行列は破棄され、二段目の行列が最上位に格納される。
|
引数
| (4,4)行列(C言語形式の16個の数列)
|
座標系
| 左手系
|
機能
| 変換行列スタックの先頭に指定行列を右から乗ずる。
|
引数
| 角度,x,y,z |
座標系
| 左手系
|
機能
| 原点から指定座標までのベクトルを軸とし、指定した角度だけ回転させる行列を、変換行列スタックの先頭に右から乗ずる。
|
引数(1)
| 頂点数, 頂点配列 |
引数(2)
| 頂点数, 頂点配列, R成分, G成分, B成分 |
座標系
| 左手系
|
機能
| 指定された頂点列の折れ線を描く。色指定ができる。
|
引数
| 辺長, 辺数 |
座標系
| 左手系
|
機能
| 指定した辺長と辺数の正多角形を原点を中心とするXY平面上に描く。
|
引数
| 頂点数, 頂点配列, 面数, 面配列 |
座標系
| 左手系
|
機能
| 一つの頂点データは(頂点ベクトル, 法線ベクトル, テクスチャ座標)という八個の浮動小数点数の組である。頂点配列は8×頂点数個の浮動小数点数の配列になる。面データは三個の頂点番号の組である。頂点番号とは0から始まる配列の添字のことである。面配列は3×面数個の整数配列になる。
|
引数
| X軸方向幅, Y軸方向高さ, Z軸方向深さ |
座標系
| 左手系
|
機能
| 指定した幅、高さ、深さの直方体を原点を中心として描く。
|
引数
| 半径, 縦分割数, 横分割数 |
座標系
| 左手系
|
機能
| 指定した半径、縦分割数、横分割数の球を原点を中心として描く。
|
引数
| 負面半径, 正面半径, 長さ, スライス数, スタック数 |
座標系
| 左手系
|
機能
| 指定した負面半径、正面半径、長さ、スライス数、スタック数の円柱を原点を中心として描く。負面・正面とはZ軸に関するものであり、スライス数は主軸を回転軸とするときの円周の分割数であり、スタック数は主軸に沿った分割数である。
|
引数
| 無し
|
座標系
| 左手系
|
機能
| 原点を中心としてティーポットを描く。
|
引数
| TrueTypeフォント名, サイズ, 文字列, 最大偏差, 深さ |
座標系
| 左手系
|
機能
| 原点を中心として指定したTrueTypeフォント名、サイズ、文字列、最大偏差、深さの文字列を描く。TrueTypeフォント名と文字列にはシフトJISコードを使うことができる。最大偏差とはアウトラインフォントからの許容誤差の最大偏差を意味し、深さはZ軸方向の深さを意味する。
|
引数
| x座標, y座標, z座標, r成分, g成分, b成分, 文字列 |
座標系
| 左手系
|
機能
| 位置と色を指定して注釈文字列を平面的に描く。シフトJISコードを使うことができる。
|
引数
| x0, y0, x1, y1, w, h, 標高データ配列 |
座標系
| 右手系
|
機能
| 世界座標系におけるXY平面上、指定された矩形領域上の標高データを使ってメッシュを描画する。
|