投稿者「mod_poppo」のアーカイブ

GLMのマニュアルがヘボいので自分で書き始めた

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とは全く関係ないが、筆者のほしい物リストほしい本リストを公開しておく。今月は筆者の誕生月である。

関連記事

OpenGL の投影行列

TeXっぽいものを実装するにあたっての雑記

もしもそれがTeX言語を受理し、TeXのように動くのであれば、それは紛れもないクソである — 詠み人知らず

前回の記事に書いたようなLaTeX数式をMathMLに変換するやつを、自分で実装したい。そのためには、マクロの展開など、TeXの挙動を真似ることが必要である。

この記事では、TeXのようなものを作るにあたって感じるTeXのアレな点や、気になる拡張機能を挙げていきたい。

全体的に、TeXの重箱の隅のような話題をまとまりもなく書き連ねているので、読み物としてはよろしくないかもしれない。

続きを読む

LaTeX数式 to MathML を考える

モチベーション

Web で数式を表示するための仕様として、 MathML というものがある。ただ、 MathML はブラウザーの対応がイマイチなので、もっぱら MathJax や KaTeX などの JavaScript で書かれた代替手段を使うことが多いだろう。しかし、 EPUB の場合は標準的な数式記述方法は MathML なので、 LaTeX 数式を MathML に変換する必要がある。

そこで、「LaTeXで記述された数式をMathMLに変換する」ことを考える。

(尤も、 Kindle は MathML に対応していなかったり、EPUBリーダーで多く採用されていると思われる WebKit 系のレンダリングエンジンでどれほどの見た目になるのかという問題がある。しかし、それらの問題はおいておく。)

この記事では LaTeX で書かれた単体の数式を対象とし、 LaTeX 文書をまるごと HTML+MathML に変換することはここでは扱わない。また、可換図式など、 MathML が扱っていなさそうな対象は扱わない。 続きを読む

wxWidgets をビルドする 2018年新春編

去る2月に、wxWidgets の開発版である 3.1.1 がリリースされた。前回の開発版である wxWidgets 3.1.0 のリリースからは2年ぐらい経っている。

2016年に wxWidgets をビルドする という記事を書いたが、2年も経つとビルドシステムにも色々と変化が生じている。この記事では、3.1.1リリース直後の現在(2018年3月)における、 wxWidgets の最新の開発版(3.1.1 または Git の master ブランチ)のビルド方法をまとめてみる。

(筆者が記事を書くのにもたついている間に、最新の安定版である 3.0.4 もリリースされたが、この記事はもっぱら最新の開発版を対象とする。) 続きを読む

PureScript から TypeScript 用型定義 (.d.ts) を生成するツールを作った

前置き

TypeScript で作っていたプロジェクトに、後付けで PureScript を追加しようとしたらかなり辛かった。

(わざわざ言語を混在させたい理由としては、型クラスや演算子オーバーロードを使いたい&既存のコードを全部書き直す暇はない、が挙げられる)

辛い理由としてはそもそもモジュールとバンドラーの周辺がまだ成熟していないというのもあるだろうが、 TypeScript 固有の理由として、 TypeScript コードから PureScript モジュールを読み込むための型定義が足りないという問題がある。

Stack Overflow を見ると、同じことで悩んでいる人がいた:

しかし、どの解決策もイマイチである。

コンパイル済みの PureScript を使うだけなら --allowJs オプションという手もあるだろうが、せっかく型がある言語で書いたのだから、適切な型チェックがされて欲しい。PureScript のコンパイル時に TypeScript 用の型定義ファイル .d.ts を出力させるようにはできないのか?

PureScript の GitHub Issues にも「.d.ts を生成させたい!」というトピックがあるが、特に動きがあるようには見えない。

コンパイラーにそういう機能がないならば、自分で作ってしまおう!ということで、作った。

https://github.com/minoki/purescript-tsd-gen 続きを読む