【プチコン4講座】LMATRIXの扱いは偏差値38未満には辛い件
こんにちは。なおキーヌです。
ブログ毎日更新は291日目になります。
プチコン4で「LMATRIX」って命令があるのはご存知でしょうか?
恐らくプチコン界隈で凄い人が使っているなんか3Dチックなことが出来る命令です。
私も前から興味は持っていたのですが、正直見てもよくわかりません。
何やら変換行列という何やら難しそうな数学式を使うモノらしいのですが、
調べたところ全く意味が分かりません!
恐らく高校~大学と数学をちゃんと勉強している人なら余裕なのでしょうが、
私は数1/Aすら全部終わらない定時制高校に通っていたので名前すら知りませんでした!
それでもゲームを作ることはできます!
でも悔しいので勉強して理解できるようになりたいです。
で、今回はそんな難しそうなLMATRIXを使ってなんか動かしてみようという記事です。
難しい計算は全てプチコン4がやってくれるので、とりあえず適当に値を与えてみてましょう。
とりあえず動くのが分かるように背景を敷きつめてみます。
ACLS
TFILL 0,0,0,24,14.&HE913
海のマップチップを敷きつめてみました。
そして次にLMATRIXを使ってみます。
最低限設定するのは以下になります。
「LMATRIX レイヤーID,ホーム座標X,ホーム座標Y」
これだけだだと意外とシンプルですね。
とりあえず使ってみましょう。
ACLS
TFILL 0,0,0,24,14.&HE913
LMATRIX 0,100,100
なんか左上にズレましたね。
これを見る限り、レイヤーの(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度回転させています。
……なんかやりたいこととは違いますね。
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で宣言して配列を作って渡してみたら……
おおぉ!動いた!
値はサンプルに近い値でてきとうに弄ってみました。
レイヤーが奥に倒れてる感じがしますね。
これは本来計算して毎フレーム与えることで効果を発揮するわけですね。
一番ケツの数字を動かしたら動いてくれたので他の要素も併せてループで回してみましょう。
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
#petitcom #プチコン4 #NintendoSwitch
LMATRIX 一応動かせたけど、ちゃんと計算して与えないとまったくつかえないな。
でもわからんからって触らずににげるのはいやだったのでとりあえずうごかすところまでやった!進歩! pic.twitter.com/lcmSO83Uyl
— なおキーヌ@ゲームクリエイターLv5 (@naokeyzmt) October 17, 2019
と、とりあえず動きましたね……
しかしちゃんと計算式で値を作って回してやらないと使い物にならないことが分かりました。
これは数学の勉強が必要になりそうです。
直ぐ使い方を知りたい人はプチコン4でLMATRIXを使っているサンプルや作品を落としてみて、
どういった手続きで処理を作っているかみてみるといいでしょう。
私は見ても恐らく理解出来ないので、数学の勉強から始めます(笑)
当分は封印ですね、LMATRIX……
次会うときは使いこなしてやるからな!