【プチコン4講座】LMATRIXの扱いは偏差値38未満には辛い件

プチコン4

プチコン LMATRIX

こんにちは。なおキーヌです。

ブログ毎日更新は291日目になります。

プチコン4で「LMATRIX」って命令があるのはご存知でしょうか?

恐らくプチコン界隈で凄い人が使っているなんか3Dチックなことが出来る命令です。

私も前から興味は持っていたのですが、正直見てもよくわかりません。

何やら変換行列という何やら難しそうな数学式を使うモノらしいのですが、
調べたところ全く意味が分かりません!

恐らく高校~大学と数学をちゃんと勉強している人なら余裕なのでしょうが、
私は数1/Aすら全部終わらない定時制高校に通っていたので名前すら知りませんでした!

それでもゲームを作ることはできます!

でも悔しいので勉強して理解できるようになりたいです。

で、今回はそんな難しそうなLMATRIXを使ってなんか動かしてみようという記事です。

難しい計算は全てプチコン4がやってくれるので、とりあえず適当に値を与えてみてましょう。

とりあえず動くのが分かるように背景を敷きつめてみます。

ACLS

TFILL 0,0,0,24,14.&HE913

プチコン4 LMATRIXの使い方1

海のマップチップを敷きつめてみました。

そして次にLMATRIXを使ってみます。

最低限設定するのは以下になります。

「LMATRIX レイヤーID,ホーム座標X,ホーム座標Y」

これだけだだと意外とシンプルですね。

とりあえず使ってみましょう。

ACLS

TFILL 0,0,0,24,14.&HE913

LMATRIX 0,100,100

プチコン4 LMATRIXの使い方2

なんか左上にズレましたね。

これを見る限り、レイヤーの(100,100)の部分が左上に来たという感じでしょうか。

続いてオプションの引数を与えてみます。

内容は下記になります。

「LMATRIX レイヤーID,ホーム座標X,ホーム座標Y,X,Y,倍率X,倍率Y,回転角 」

ホーム座標は先ほどやったレイヤー自身の座標をホーム(恐らく左上)にするということですね。

後のXとY座標はホームを決めてからどれだけXとYをずらすかという命令だと思います。

一度やってみましょう。

ACLS

TFILL 0,0,0,24,14.&HE913

LMATRIX 0,100,100,100,100

ホーム100ずらしてXとY座標を100ズラしています。

当然、見た目的には元の状態に戻るわけですね。

これだと面白くないので、次は倍率と回転角も使ってみます。

分かりやすいようにXとYの座標は0にしておきます。

ACLS

TFILL 0,0,0,24,14.&HE913

LMATRIX 0,100,100,0,0,0.5,0.5,45

ホーム座標を基軸に0.5のサイズにして45度回転させています。

プチコン4 LMATRIXの使い方3

……なんかやりたいこととは違いますね。

LMATRIXってこう、なんか2Dを3Dにグリグリ動かしてるイメージなかったですか?

恐らくもう1つのLMATRIXの使い方をする必要があるみたいです。

LMATRIX レイヤーID,変換行列
レイヤー内の表示要素を描画する際に使用する変換行列を設定する

▽ 変換行列
変換行列の入っている実数配列
・要素数が16必要
・全要素が単精度実数範囲内の値である必要がある
・行列はOpenGLの変換行列に準じた形式で、射影行列まで含んでいる必要がある

えぇ……いみわからへん……

と、とりあえず要素が16ある配列を用意すれば動くのでしょうか?

とりえずてきとうにやってみましょう。

ACLS

TFILL 0,0,0,24,14.&HE913

' 変換行列リセット
LMATRIX 0

LMATRIX 0,[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

先ほど動かしたレイヤーがそのままになっているので、リセットを入れています。

……エラーがでてしまったので、どうやらてきとうにやってもだめみたいです。

ということで、オンラインにアップされてるLMATRIXサンプルの数値がどうなっているのかカンニングしてみました。

サンプルを元に近しい値を入れてみましょう。

ACLS

TFILL 0,0,0,24,14.&HE913

' 変換行列リセット
LMATRIX 0

DIM HOGE = [0,1,1,1,-2,0,0,0,0,1,0,0,1191,50,400,1002]

LMATRIX 0, HOGE

配列の入れ方もわるかったようでした。

とりあえずDIMで宣言して配列を作って渡してみたら……

プチコン4 LMATRIXの使い方4

おおぉ!動いた!

値はサンプルに近い値でてきとうに弄ってみました。

レイヤーが奥に倒れてる感じがしますね。

これは本来計算して毎フレーム与えることで効果を発揮するわけですね。

一番ケツの数字を動かしたら動いてくれたので他の要素も併せてループで回してみましょう。

ACLS

TFILL 0,0,0,24,14.&HE913

' 変換行列リセット
LMATRIX 0

DIM HOGE = [0,1,1,1,-2,0,0,0,0,1,0,0,1191,50,400,0]


LOOP 
  LMATRIX 0, HOGE
  INC HOGE[7], 50
  INC HOGE[12], 100
  INC HOGE[15], 50
  VSYNC
ENDLOOP

と、とりあえず動きましたね……

しかしちゃんと計算式で値を作って回してやらないと使い物にならないことが分かりました。

これは数学の勉強が必要になりそうです。

直ぐ使い方を知りたい人はプチコン4でLMATRIXを使っているサンプルや作品を落としてみて、
どういった手続きで処理を作っているかみてみるといいでしょう。

私は見ても恐らく理解出来ないので、数学の勉強から始めます(笑)

当分は封印ですね、LMATRIX……

次会うときは使いこなしてやるからな!