久々にブログに数式を書いたので、正常に表示されるかローカルでテストしておく。 良さそうなので修正なしで昨日の日記をプッシュしよう。

  • WebGL2 3D Perspective Correct Texture Mapping の残り。
    • gl.LUMINANCE のテクスチャーとは何だろう。グレースケールくらいの意味しかない?
    • 頂点シェーダーで gl_Position /= gl_Position.w; とするとテクスチャーだけが歪むわけだが、 おそらく関係する頂点位置がカメラに対して同じような位置にあるときに限って市松模様に見える。
    • 同次座標系に関する理解が深まるので、やはりもっと早く読む回だった。

0:40 さっきの残り終了。YouTube のビデオをダラダラ聴きつつコメント欄を DeepL に食わせて遊ぶ。

2:00 消灯。就寝。

7:05 起床。納豆とおにぎりを食う。出勤。霧雨のような天気だが天気予報を信じで傘なしで出る。

7:45 管理人室。資源ゴミの搬出とクサレゴミの処理。灰皿と化した空き缶は間に合わなかった。 ゴミ部屋の排水溝のフタにヘドロが付着しまくっていることに気づいたので、先の長いトングでゴシゴシ落とす。 これが良くなくて、刃先を閉じるだけで握力をガンガン削られる。作業終了後、報告書を握るペンがプルプルする。

10:00 撤収。とっくに晴れている。イトーヨーカドー曳舟店で体温チェックと手洗い。 曳舟の部屋に戻る。

  • WebGL2 Multiple Views, Multiple Canvases
    • 同一キャンバス内に複数のビューを描画したい。
    • 前半の記述からすると、透視図法のコードをベースに差分を書くのが良いだろう。
    • gl.viewportdrawScene を分離すれば、ビューを複数作れる。
    • gl.clear はビューポートの設定と関係がないので、scissor test をする。 gl.viewport の直後に同じ引数で gl.scissor を呼び出せばいい。
    • HTML 文書内に WebGL コンテキストを有するキャンバスをたくさん置くことができないかもしれない。
    • キャンバスのスタイルシートの z-index の値を負にしておくのは良さそうだ。
    • 後半は動的に HTML 要素を生成して絵を付けるような場合を想定する。
    • 前半の例のコード初版は透視図法のときのコードのリファクタリングしかしていない。 共通機能がライブラリーにあるので、それらを参照する形になる。 また、描画コードを renderdrawScene に分割していることに注意する。
    • そしてビューを二分割する。ここはわかりやすい。render しか変更しない。 射影行列を左右のビューで違うものにしている。

12:10 おやつ。

12:30 コード再開。やはり gl.clear を二度呼ぶコードは編集の時点で違和感がある。 しかし gl.enable(gl.SCISSOR_TEST) 以降ならばアリなのか。 後半のデモ。HTML 内画面外のビューのレンダリングをスキップするのが大事。 widthbottom の値は 1 だけずらさないとビューの枠からはみ出る。

14:15 寝るか。久しぶりに暑いから白ブリーフ一丁で。

16:25 起きるか。服を着て外出。スカイツリータウン二階へ。 トイレ。書店。週刊の雑誌が早めに出ている。ファミ通などをごく軽くチェック。

バスに乗って錦糸公園へ。オリナス錦糸町二階へ。ベンチがほぼ満席だ。 トイザラス寄りのが空席。座って休憩。

18:00 タイトー F ステーションオリナス錦糸町店。MJ プロ卓東風戦 6 クレ。 そろそろプロ卓を追い出される段位に近づいている。そのときは経験値をどう稼ぐか考えよう。

【SCORE】
合計SCORE:-170.5

【最終段位】
四人打ち段位:闘王 幻球:1

【9/22の最新8試合の履歴】
1st|--------
2nd|-*---*--
3rd|*---*--*
4th|--**--*-
old         new

【順位】
1位回数:0(0.00%)
2位回数:2(25.00%)
3位回数:3(37.50%)
4位回数:3(37.50%)
平均順位:3.13

プレイ局数:33局

【打ち筋】
アガリ率:12.12%(4/33)
平均アガリ翻:3.25翻
平均アガリ巡目:9.25巡
振込み率:9.09%(3/33)

【9/22の最高役】
最高役のデータがありません。最高役は、跳満以上のアガリが対象となります。

MJ 開発陣、私の同卓者は最強位ばかりで困っている。 段位の近い打ち手とマッチメイクしてもらえないだろうか。しんどすぎる。

19:45 カスミオリナス錦糸町店。373 円。鶏肉がかぶってしまった。

  • 油淋鶏弁当
  • 骨なしフライドチキン
  • ブラックチョコ

20:10 ビッグエー墨田業平店。306 円。精算の時に小銭入れにもう一円あればピッタリ空っぽだったのに。

  • 絹豆腐 (2)
  • チキンカツバーガー
  • カレーヌードル
  • ミニスイートクロワッサン (5)

20:25 曳舟の部屋に戻る。この暑さだからシャワーを浴びるのが自然。 風呂から出たら白ブリーフ一丁。PC を開いて晩飯。

メールチェック。面接日時変更の依頼が先方に届いていないで返信が来た。再度依頼メールを送信。 もう一社の方は不採用。あちゃあ。

  • WebGL2 Visualizing the Camera
    • 前回、複数ビュー描画の技法を習得したので、これを用いてカメラを別のビューに描画する手法を議論する。 カメラ自身を表すモデルと、カメラが収める錐体形の空間を表すモデルを別のビューに描く。
    • 錐体形の空間は射影様式に関わらず直方体であることに注意する。
    • 完成版はかなり教育的なものになる。正射影のときにだけチェックボックスを有効にするように改造するといい。
    • コード。頂点シェーダーと断片シェーダーのペアを二つ作る。 カメラ自身をワイヤーフレームで描くときには補間は要らない。
    • cameraMatrix2 などの変数名がわかりにくいので適宜修正する。
    • 右ビューのカメラ自身に施す行列は $P_r V M_l$ の形をしている。ここで
      • $P_r$ は右ビューの射影行列、
      • $V$ は右ビューに関するカメラ行列の逆行列、
      • $M_l$ は左ビューのカメラ行列とする。
    • createClipspaceCubeBufferInfo の幾何はクリップ座標で定義する。 すなわち箱 ${[-1, 1] \times [-1, 1] \times [-1, 1]}$ を定義する。
    • 右ビュー錐体に適用する行列は ${ P_l V M_l P_R^{-1} }$ となる。 ただし $P_l$ は左ビューの射影行列。
  • #668 GB版 天地を喰らう Tenchi wo Kurau BGM ギターメドレー - YouTube: ゲームボーイ(任天堂の古の携帯型ゲーム機)にも天地を喰らうがあるのか。

23:25 カメラのコードを終わる。これはかなり良い例題だ。 そのうちビューをさらに分割するように改造したい。