4.三角形を描画
『画面の初期化』
画面の初期化には G@SETUP 関数を使用します。今回は 640 × 480(16bitカラー)のウィンドウ画面表示モードを使用するので、以下のように記述します。もしフルスクリーン画面表示モードを使用したい場合は、4番目の引数を「 0 」に変更してください。

  CH = G@SETUP( 640 , 480 , 16 , 1 )

G@SETUP 関数の使い方には注意があります。それはグラフィックボード毎に画面サイズやカラー数が異なると言う点です。LGPで開発したソフトを広く提供する場合には、もっとも互換性のある設定を選ぶ必要があります。これはあくまでも私の経験ですが、640×480(16bitカラー)がもっともベターと思われます。

『三角形を描画』
いろいろ覚える事がありますが、1つの三角形を描画するというもっとも単純と思われるものを例に話を進めます。

『三角形の準備』
まずは三角形のパーツを作ります。手順は簡単でメッシュを作りその中にフェースを登録するのです。メッシュの作成は G3@MESHMAKE 関数で作成します。

  MS = G3@MESHMAKE()

G3@MESHMAKE 関数を実行すると、MS 変数には同関数の実行で作成したメッシュの識別番号が入ります。以後このメッシュを扱うときは識別番号を示します。

次にこのメッシュにフェースを登録します。三角形の各頂点を登録してから、その頂点を結ぶ事でフェースを登録するという2段階の指定で行います。
まずは上記で作成したメッシュに3つの頂点を登録します。頂点の登録は G3@VERTEXADD 関数で行います。

  FS1 = G3@VERTEXADD( MS , 0 , 1.0 , 2.0 )
FS2 = G3@VERTEXADD( MS , 1.0 , -1.0 , 2.0 )
FS3 = G3@VERTEXADD( MS , -1.0 , -1.0 , 2.0 )


FS1〜3 変数には同関数の実行で作成した頂点の識別番号(以後「頂点番号」)が入ります。三角形の見える側を表にしようと思うので、右回りに頂点番号を結んで三角形を作ります。このフェースの登録は G3@FACEADD3 関数で行います。

  G3@FACEADD3( MS , FS1 , FS2 , FS3 )

これで、メッシュ(フェース含む)の登録は完了です。

『三角形の配置』

三角形のメッシュが出来上がったので、早速画面に配置しましょう。
配置は G3@ADD 関数で行います。

G3@ADD( MS , 0 )

G3@ADD 関数は 1番目の引数に指定したものを、2番目に指定した引数に登録すると言うものです。1番目の引数は MS変数なのでメッシュを表していることが分かると思います。問題は 2番目の引数ですが、これはフレームを表します。後で詳しく説目しますが、フレームは一つではなく複数のフレームを持つことが出来ます。その中で 0(ゼロ:以後「トップフレーム」)は スタジオ と同等の意味をもつものです。トップフレームに配置するということはスタジオ自身に直接直置きで配置すると言うことになります。フレームの詳細は後ほど書くので、今はあまり気にしないで下さい。


『明るさの設定』

メッシュを作ってフレームに配置したので後は描画するだけといきたいところですが、もう1段階やることがあります。それはフレーム(スタジオ)に光源(明るさ)を与えてあげる事です。

これは光源が無いと画面が真っ暗な状態となるため、メッシュを配置しても何も見えないからです。LGPの光源は大きく2種類に分類されます。アンビエント光源とその他の光源です。その他の光源とは、懐中電灯の光のように光の位置や光の方向を持つものです。これに対してアンビエント光源は、光の方向や位置に関係なくフレーム全体を照らす光で環境光といわれるものです。例えば、家の日影などのように直接光源で照らされているわけではないのに、弱いが明るさがあり周りを認識できる場所の明るさを言います。今回はアンビエント光源を使用してみます。

アンビエント光源は、フレームに対して指定するものです。光源には色(光の三原色:RGB)を付ける事が出来ますが、今回は白色の光を使用してみます。指定は G3@FRMSETAMBIENT 関数で行います。


  G3@FRMSETAMBIENT( FM , 65535 , 65535 , 65535 )

『描画』
ここまでくれば、あとは描画を行うだけです。描画は G3@RENDER 関数で行い、その後、G@FLIP 関数の実行で画面に反映されます。
今回は LOOP命令で、G3@RENDER 関数と G@FLIP 関数の実行を繰り返すようにしています。
これはLOOP命令が無いと、G@FLIP 関数の実行直後に即効で LGp が終了し、結果を確認する事が出来ないための細工です。もちろん、なくてもかまいません。

  LOOP
G3@RENDER()
G@FLIP()
ENDLOOP

『三角形描画のまとめ』
ここまでのプログラムを以下にまとめてみました。
どうですか?難しかったですか?でも基本はたったのこれだけです。簡単でしょ?
次からのステップはここまでの内容に肉付けをした程度のものですから安心してください。

  CH = G@SETUP( 640 , 480 , 16 , 1 )
MS = G3@MESHMAKE()
FS1 = G3@VERTEXADD( MS , 0 , 1.0 , 2.0 )
FS2 = G3@VERTEXADD( MS , 1.0 , -1.0 , 2.0 )
FS3 = G3@VERTEXADD( MS , -1.0 , -1.0 , 2.0 )
G3@FACEADD3( MS , FS1 , FS2 , FS3 )
G3@ADD( MS , 0 )
G3@FRMSETAMBIENT( FM , 65535 , 65535 , 65535 )
LOOP
G3@RENDER()
G@FLIP()
ENDLOOP