GLM — OpenGL Mathematics というC++のライブラリーがある。これはOpenGLとかで使うようなベクトルや行列の型・関数を提供してくれる。
それはいいのだが、これ、ドキュメントがヘボい。
まず公式の Manual は、ライブラリーの使い方を説明してくれるが、個々のAPIには立ち入らない。
次にDoxygenで生成された API Documentation は、個々の関数の説明をしてくれるが、(ベクトルとか行列の)型の説明が欠けている。そして、「ソースコードに飛ぶ」をやっても関数の実装は見れない(.hppはDoxygenの対象に入っているが.inlは入っていない)。関数がどういう数式を基に実装しているのか、GLMのドキュメントからはわからないのである。
まあGLMはGLSL互換を謳っているので、GLSLを知っていれば(GLSLのドキュメントを読めば)細かい説明はなくても使えるだろうという考えもあるかもしれない。それはまあそうかもしれないが、GLSLにないGLMの拡張機能に関してはそういうわけにはいかない。
たとえば、四元数に関連した mat4_cast 関数のドキュメントには
GLM_FUNC_DECL mat<4, 4, T, Q> glm::mat4_cast ( tquat< T, Q > const & x )
Converts a quaternion to a 4 * 4 matrix.
Template Parameters
T Floating-point scalar types.
See also
GLM_GTC_quaternion
とあるが、果たしてこの説明から関数の動作を予想できる人がどれだけいるだろうか?
したがって、(コピペコーディングではなく)GLMをまともに使おうとしたらGitHubのソースコードをチマチマ眺める必要があるわけだが、そんなのは辛すぎる。というか、LaTeXでもMathJaxでもいいから、数式をふんだんに使ったGLMのマニュアルが欲しい…。
というわけで、自分で書いてみることにした。
https://miz-ar.info/glm-notes/
現段階ではまだ、クォータニオン(四元数)についてちょろっと書いた程度である。筆者の必要に応じて、徐々に拡充していきたい。
なんとなく英語で書いてみているが、文法とか色々怪しいのでその辺はご容赦願いたい。
glm-notes/ 以下のURLは今後変わるかもしれないので、リンクを貼るならトップページ(https://miz-ar.info/glm-notes/)にお願いしたい。
なお、C++の関数の型は(伝統的には)戻り値の型を先に書くが、自分の書いたドキュメントでは(筆者にとっての読みやすさのため)戻り値の型は後置とする。また、引数の型の const&
も省く。
おまけ
GLMとは全く関係ないが、筆者のほしい物リストとほしい本リストを公開しておく。今月は筆者の誕生月である。