行列演算とライブラリ
重要なのは使い方
行列の計算方法は、基本的なところについては正直なところそれほど複雑怪奇というものではありません。キチンと数学を勉強すればスクラッチでも行列の基本的な演算については記述できるようになるでしょう。しかし、単なる行列の足し算や掛け算ならいざ知らず、複雑な行列演算ともなると非常に難解になってきます。
DirectX にしても OpenGL にしても、行列を使いこなすことができなければプログラミング自体が難しいのは事実です。しかし、だからと言って必ずしも、行列の演算方法の隅々までを漏れなく理解していなければいけないのかと言うと、けしてそんなことはありません。
重要なのは、行列の使い方であって、詳細な行列の計算方法ではありません。特に、3D プログラミングに不慣れなうちは行列を使うと何ができるのかであったり、どのような計算をすれば目的の結果を得られるのかであったり、要するに行列の扱い方を理解することのほうが重要です。
行列の使い方をある程度理解できるようになったら、実際にプログラムの深い部分では何が起こっているのかを探求し究明することで、さらに上のステップに踏み込むことができるようになるでしょう。ですからいきなり全てを理解しようとせず、まずは行列による処理の流れを理解し、使いこなすことに主眼を置いて考えましょう。
ライブラリの活用
DirectX や OpenGL には、行列に関する多くの組み込み機能があり、別途プラグインやライブラリを用意することなく行列が扱えるようになっています。
しかし、WebGL にはそういった行列に関連する処理系統は一切含まれていません。余分な機能を削ぎ落としてスリム化を図るためだと思いますが、そういった仕様になっているのでこればっかりはどうしようもありません。結局のところ、行列に関する処理の一切を、自前でなんとかしなければならないわけです。
そういった事情もあって、WebGL では行列演算をどうするのかは結構大きな問題です。全部を自前で記述できる数学の知識が深い人ならそれでも問題ないかもしれませんが、行列に関する知識のない人は困ってしまいますね。
ただ、ここで落胆する必要はありません。
javascript を用いた行列演算用のライブラリが有志によって公開されています。これらのライブラリを用いることで、行列演算の詳細を理解することができていなくても、行列を扱うことが可能になります。代表的なところだけ引用します。
ここで紹介したような行列演算ライブラリを用いることで、要はライブラリの扱い方を覚えるだけで行列演算が行なえます。ただし、このライブラリの使い方を把握するのが大変だったりもするわけですね。
そこで、当サイトでは自前のライブラリである minMatrix.js を使います。この javascript ファイルには、本当に基本的な行列演算だけが含まれています。そんな大層なものでもないのでライセンスは完全フリーで、個人での利用・商用問わず、特に制約は設けません。
今後、当サイトで掲載するコード、及びサンプルには、この minMatrix.js を使いますのでその前提で解説していきます。また、このファイルへのリンクは当テキストの最後にリンクを貼っておきますので、自由にダウンロードしていただいて結構です。
尚、この minMatrix.js を記述する上で、行列に関する多数のウェブページ、及び glMatrix の内容を参考にさせていただきました。ウェブページの作者の方々、glMatrix の作者である Brandon Jones 氏(氏の blog -> TojiCode)に感謝します。
まとめ
長い目で見て、本当に複雑な処理を行う上では行列の知識は欠かせないものになっていきます。しかし、それを先に理解しようとすると非常に大変なことも事実です。まずは、ライブラリを活用することで 3D プログラミングに慣れ、それから知識を深めていくのが理想的だと個人的には思います。
ライブラリを使うとは言っても、そこにはライセンスの問題や、ライブラリの特性を理解しながら使わなければならないなど、全く問題がないというわけでもありません。当サイトでは管理人作成の自前ライブラリを使うことで、できる限り WebGL に取り組む上での敷居を低くできればと思っています。
次回はいよいよ、minMatrix.js を使ってポリゴンを表示してみたいと思っています。尚、minMatrix.js は以下から参照できます。
wgld.org オリジナル行列演算ライブラリ minMatrix.js