YouTube で昭和の名曲を探訪する。あの日に帰りたい、まちぶせ、セーラー服と機関銃……。 なんて時代だ。おすすめリンクをクリックする手が止まらない。

2:15 消灯。

7:05 起床。なぜ月曜なのに携帯電話の目覚まし時計が鳴り出すのかと思うほど寝ぼけている。 月曜はきのうだ。納豆と黒コッペを食す。ゴミを出して出勤。

7:45 現場。即始業。可燃ゴミはともかく、明らかに合法的に捨てる気のない粗大ゴミがある。 いつものようにゴミの仕分けなどで時間を食う。途中で気分転換の清掃を入れて資源ゴミの仕込み。 時間ギリギリ。本部に粗大ゴミの連絡を入れる。

10:10 撤収。

イトーヨーカドー曳舟店。体温チェックと手洗い。いつもタダでなんだから今日は買い物をする。

10:40 キャンドゥイトーヨーカドー曳舟店。330 円。

  • ゴム手袋中厚
  • マッキー極細黒
  • 水回り用消しゴム S

曳舟の部屋。PC 作業。テザリングをするべく携帯電話を見たら不在通知がある。 通話を試みる。バイト先本部だ。連絡。さっきの粗大ゴミの詳細の問い合わせだった。 私の陳述が弱かったようだ。

改めてインターネットに接続。Twitter 見たらフォロワーサンが Shadertoy に面白いものを上げている。 私も早く技術を身につけて何か投稿したい。

WebGL の自習。ステンシルをいじっているときに気づいたが、WebGL は glLogicOp 相当の機能が欠けている。 これもモノにしたかったが残念だ。

12:10 おやつ休憩。

ゆうべ気づいた mipmap デモのバグを修正。gl.FLOATgl.FALSE とタイプしていた。

3D シーンでステンシルを試すデモの下準備をする。いつもの F を回転させるシーンを応用したい。

WebGL2 Fundamentals のコードはアニメーションのデモだと行列を必要以上に計算するようだ。 射影行列周りを初回とキャンバス寸法変更時にしか更新しないようにすれば描画効率が上がる。

let aspect, projectionMatrix, viewProjectionMatrix;
def renderScene(time){
    time *= .001;

    // ...

    if (webglUtils.resizeCanvasToDisplaySize(gl.canvas)) {
        gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);
        aspect = gl.canvas.clientWidth / gl.canvas.clientHeight;
        projectionMatrix = m4.perspective(fieldOfViewRadians, aspect, zNear, zFar);
        viewProjectionMatrix = m4.multiply(projectionMatrix, viewMatrix);
    }

    // ...

    renderAnimationFrame(renderScene);
}

14:15 寝たい。不気味な夢を見る。九州の政治家の取材?をしている。 彼が東北地方に出張した際の土産の銘菓を地元の誰かに配って「これは地元では必ず喜ばれるンだよ」とのたまう。 妙に記憶に残っている。

16:15 起床。外出。

スカイツリータウン二階。トイレ。三省堂。雑誌チェックをほどほどにする。

押上駅バス停からバスに乗って錦糸公園前で降りる。錦糸町楽天地へ向かう。 ロフトで買い物をしたいのだが、うっかり郵便局の階まで昇ってしまう。職業病のようなものだ。

17:40 錦糸町ロフト。店頭のドラクエ特集が気になる。ドラクエが消しゴムになるのか?

  • 替芯サラサ黒
  • ゼブラ JFO4 芯

176 円。しかし、一度芯一本の色を間違えて途中で引き返しレジで交換してもらう。

18:00 タイトー F ステーションオリナス錦糸町店。MJ プロ卓東風戦 5 クレ。 鳴全有ボタンの挙動がおかしい気がする。例えば中が出たのに鳴くかどうかの決定コマンドが出てこない。 実はきのうもあったのだが、思い過ごしではなかったか。

【SCORE】
合計SCORE:-11.4

【最終段位】
四人打ち段位:強者 幻球:7

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

【順位】
1位回数:1(11.11%)
2位回数:4(44.44%)
3位回数:3(33.33%)
4位回数:1(11.11%)
平均順位:2.44

プレイ局数:39局

【打ち筋】
アガリ率:23.08%(9/39)
平均アガリ翻:3.11翻
平均アガリ巡目:10.00巡
振込み率:5.13%(2/39)

【10/26の最高役】
・跳満

ゲームの方はリーチ後に小三元に放銃した以外は平穏。

19:50 カスミオリナス錦糸町店。295 円。

  • 鶏そぼろ丼
  • フライドポテトコンソメ

20:10 ビッグエー墨田業平店。237 円。

  • ハンバーガー
  • 絹豆腐
  • タルガツフィッシュドッグ
  • ツイストドーナツ (3)

20:20 曳舟の部屋。シャワーを浴びる。

風呂から出る。PC を開いて晩飯。

21:45 メールチェック。一社から面接の案内を着信。 先方指定の日は福祉事務所に書類を提出する日だから避けたい。変えてもらいたいと返信。

LearnOpenGL - Stencil testing: これを参考にして F のアウトラインを描画するコードを書く。 結論から言うと、対象となる幾何の中央が原点を含んでいないと厳しい。 少し頑張れば拡大変換の原点を計算することは可能だが、ここは理屈を理解すれば十分だ。

次はシーン全体を星型にくり抜く演出を実装したい。 まず紙にスケッチをして星型の内側の円の半径 $r$ を求める(やはり自分で計算することにした)。 星型の外接円の半径を 1 とすると:

\[r = \cfrac{\cos \cfrac{2\pi}{5} }{\cos \cfrac{\pi}{5} }.\]

頂点を AaBbCcDdEe とすると、大文字は半径 1 の円周上を 0 度から 72 度刻みで、 小文字は半径 r の円周上を 36 度から 72 度刻みでプロットすればいいはず。 次は星を定義する三角形の連なりを記述する。GL_TRIANGLE_FAN を使うべきだろう。