何とは言わない天然水飲みたさ

Weekly report 2017-W27

まだ2017年も半分といったところなのに、既に FBX SDK 2018.1.1 (つまり FBX SDK 2018 のリビジョン2)が出ている。 翌月のナンバリングで発行する月刊雑誌とかじゃねえんだから……

2018.1.1 まででの変更点はだいたいバグフィックスとかオーディオ関連で、私が直接弄ろうという範囲への影響はなさそう。 FBX ファイル形式自体のバージョンも 7500 のままで一安心だ[0]

パブリック活動

Qvitter とは GNU Social で twitter ライクな UI を実現するためのプラグインであり、 QvitterPlus は Qvitter を更に拡張するプラグインである。

firefox における Qvitter のテキストボックスの挙動が google chrome と異なるため、改行の入力が投稿内容に正しく反映されなかった問題を修正した。 (テキストボックスで直接 Enter を押すと反映されなかったが、改行文字を含むテキストを C-v でペーストすると正しく反映されていた。)

問題の概要

content-editable="true" な div 要素内に作られる HTML 断片の違い

Qvitter や QvitterPlus においては、 <br> を改行文字に変換する処理がかけられており、結果 firefox では正しく改行入力が処理されていなかった。

改行の反映を正しく行うよう修正

最初のコミットである。

エスケープ処理を追加

[1]、よって HTML 要素を無視してテキストだけを処理しようとする前に、 <br> をテキストに見えるものに置換する必要がある。 その置換先に選ばれたのが {{{lb}}} という文字列である。

しかし修正前のコード中ではエスケープ処理に {{{lb}}} から <br> への(元に戻す方向の)置換を実行しており、これにより本文がもともと {{{lb}}} という文字列を含んでいた場合、それも改行に置換されてしまう。 最初のコミットで修正したバグが健在であればこれも役立ったかもしれないが、修正された今となっては完全に余計なことである。

これを修正するため、エスケープ処理を追加し、以下のように実行されるようにした。

  1. {} をエスケープして !{!} に置換[2] ← new!
  2. <br>{{{lb}}} に置換
  3. !{!} のエスケープを {} に戻す ← new!
  4. {{{lb}}} を実際の改行文字に置換

これにより、本文中の {{{lb}}} という文字列を意図せぬ変換から保護できた。 これが第2のコミットである。

QvitterPlus への同様の修正

QvitterPlus の該当部分のコードを参照すると、 Qvitter で予め設定されたハンドラを解除し、改めて改造版のものを登録している。 この改造版のハンドラには Qvitter 由来のコードがそのままコピーされている(しかも修正が必要なコードは2箇所にコピーされていた)ため、こちらにも Qvitter と同等の修正を施した。

私的活動

[3]

進捗: fbxcel

fbxcel は FBX ファイルをロードするための Rust ライブラリ。

ゲームの方をいいかげん人に見せられるレベルまで実装したいと思ったので、ひとまず FBX データをロードして表示し、アニメーションするところまでいきたいと考えた。 今週実装したのは、読まれたノード群の解釈や利用を補助するユーティリティっぽいやつらである(実際はもう少し他にも実装しているが、まだ push していない)。

fbxcel のパーサ部分の実装はもうだいぶ昔に完成していて、あとは解釈の方をどう設計するかが問題なのだが、これがなかなか厄介だ。 かつて部分的に実装したこともあったのだが、 FBX SDK を見ると継承と動的多態の嵐、しかも型の種類が無限に(←これは誇張)あったので心が折れた。 よって今のところは「利用する側のアプリケーションが、自分に必要なものだけ自分で解釈してくれ」という方針だが、さすがに整数や文字列を enum へ変換したりとか、メッシュの頂点等の基本的なデータの扱いは、さすがに fbxcel 側で実装してやっても良いと思えてきたので、今週からはその方向で実装を進めている。

進捗: ゲーム (last-progress1)

[4]ので、公開しても結局捨てることになるからである。

今週は、とりあえず FBX の頂点をロードし、四角形以下を三角形分割し(これも自前実装)、表示するというところまで。 次に目指すのは法線とテクスチャの読み込み。 その次はボーンを読んで間接からグルグル回したい(たぶんかなり難しいと思う)。

メッシュを頂点だけ読み込んだ
今週の進捗

感想