ファイル整理に勤しんで 2:35 消灯。

8:55 寒さのせいだろうか起床。納豆とおにぎりを食う。 PC を起動してひたすら WebGL をいじる。今日は投影変換を見直したい。

13:00 gluPerspective の簡単なデモを WebGL で書く。今回は CSS のレイアウトを調整するほうが難しい。 WebGL2 Fundamentals のように複数ビューを用意するのがより教育的だが、今は保留。

おやつ休憩。

14:20 昼寝。

16:00 起床。外出。

イトーヨーカドー曳舟店。体温チェック。

スカイツリータウン二階。トイレ。

押上駅。電車に乗って船堀駅まで移動。

17:15 セガ船堀店。MJ 第一回金ドラ杯決勝戦東風。

合計スコア 12.3
平均スコア 1.02

平均順位 2.54 着
トップ 4 回
二着 2 回
三着 3 回
ラス 4 回

アガリ率 18.18% (12)
アガリ飜平均 4.42
アガリ巡目平均 10.00 巡
振り込み率 12.12% (8)

印象に残った場面。ホンイツで倍満をアガれたのは良かった。 お座り一発目のゲームの東一局でミエミエのチンイツに放銃したのがかえっていい方向に効いた。と信じていたい。 あとドラ八索をポンできて、数順後に今度は八索をツモって加槓したら搶槓でアガられたゲームも印象的だ。 和了した対面は金五索を期待していたのではないかな。

20:00 退店。遅くなったので近所のスーパーで買い物をする。

20:15 イオンフードスタイル船堀店。469 円。前回の反省を活かす。

  • チキン南蛮弁当
  • ブラックチョコ (2)
  • コロッケコッペ (2)

船堀駅。電車に乗って押上駅まで移動。買い物を追加したくなる。

21:00 ビッグエー墨田業平店。285 円。

  • しょうゆヌードル
  • 絹豆腐
  • コッペパンジャム&マーガリン
  • コッペパンブルーベリー

21:15 曳舟の部屋。シャワーを浴びる。風呂から出て晩飯。腹ペコだ。PC を開きもする。 弁当の中身は米、マカロニサラダ少量、スパゲッティー、チキンカツだ。 カツにはタルタルソースのようなものがかけられていて、こってりした食事となる。

  • FC スウィートホーム 全ての敵 NES Sweet Home All Monsters Battle Medley - YouTube: 画面から目を離せない。
  • FC スウィートホーム BGM フレスコ画 NES Sweet Home Fresco Theme - YouTube: ★★★★★
  • FC スウィートホーム やまむらさんイベント集 NES Sweet Home Mura - YouTube
  • Calculating the gluPerspective matrix and other OpenGL matrix maths | Unspecified Behaviour
    • OpenGL の座標系は数学と同じだが、そのためにカメラに映るオブジェクトの Z 座標が負になることが厄介に感じられる。
    • OpenGL のカメラは、-Z 軸を向いた点 (0, 0, 0) に固定されていると考える。
    • 2D ディスプレイに変換する際には、画面のアスペクト比を考慮しなければならない。
    • 投影行列をデフォルトの状態にして、頂点にまったく影響を与えないようにした場合、 シーンは原点に位置する単位キューブの (-1, -1, -1) から (1, 1, 1) までのすべてがレンダリングされて見える。
    • glOrtho(l, r, b, t, n, f) は、範囲 ${[l, r]}$, ${[b, t]}$, ${[-n, -f]}$ それぞれを ${[-1, 1]}$ に線形に対応させる。次の公式を使う:

      \[\begin{aligned} x &\coloneqq \frac{2x}{r - l} + \frac{r + l}{r - l},\\ y &\coloneqq \frac{2y}{t - b} + \frac{t + b}{t - b},\\ z &\coloneqq -\frac{2z}{f - n} + \frac{f + n}{f - n}. \end{aligned}\]

      なるほど。$z$ だけ負の符号がうっとうしい。

      • この公式は忘れたくない。
      • [glMatrix] の関数 mat4.ortho も確かにこの公式に従う行列を返している。
    • gluPerspective はキューブを指定するのではなく、ピラミッドの頂上をカットしたような立体を指定する。
    • fovyaspect はひとまとめで理解する。前者は垂直方向の画角であるので、 後者が画面の幅と高さの比でなければならない。 画面が縦長だろうが横長だろうが、必ず width/height を与える。
    • では fovx はどうなるか。簡単な考察から次で得られると納得できる:

      \[\mathrm{fov}_x = 2 \arctan\!{\left( \mathrm{aspect} \cdot \tan{ \frac{\mathrm{fov}_y }{2} } \right)}\!.\]

おっと時間切れだ。