コードの残りを研究しつつ、途中で YouTube を観る。

あのソフランは本当に何をやっているのだろう。 見返してもターンテーブルを空回ししているくらいしかわからない。未知の技術。素晴らしいな。

麻雀の練習。寝る。最近は寝ている時の夢を憶えていることがよくある。 若いときの学校のイベントか何かでどこかの施設のロビーで漫画雑誌を読んでいる。 少女漫画の雰囲気。一緒にいる二人くらいの生徒も女子。これは何を意味するのだろう。 こんな経験はなかったはずだが。

11:00 起床。納豆とコーンマヨパンを食す。マヨネーズで納豆のタレの塩味を抑える感じでいい。

PC を開く。Twitter を見たら wac 先生のほうが面白い夢を見ている。さすが。

  • 【家ノス】おうちノスタルジア初体験配信【DOLCE. / NOSTALGIA / 音ゲー】 - YouTube: これ途中から視聴していない気がする。せっかく画面右に出てきたので再生。
  • WebGL2 Load Obj
    • Wavefront .obj ファイルはオンラインで見かける 3D ファイルの中でも最も一般的なフォーマットの一つ。 ここではその簡易な解析器を実装する。ここにあるように、シンプルなテキストで表現されている。
    • JavaScript の非同期関数 fetch を利用するので、非同期処理について言及がある。 Image.onload のような感じで使えるから、ここまで来た読者なら混乱しない。
    • OBJ は座標成分とインデックスを羅列するものらしい。
    • 法線ベクトルがあるので、シェーダーで照光処理する。
    • 初版コードまでは未知の描画コードはない。基本的にローダーの実装がメインか。
    • OBJ は他ファイルへの参照をパスの形で含む。
    • 今回は smoothing group を無視する。
    • カメラの初期位置をいい感じに決めたい。モデルの境界箱を計算して視錐台を決める。 それには前回の getExtents を利用する。その一般形も実装する。
    • 第二版は椅子の描画。色はランダムのまま。次は OBJ から色を取る。 テクスチャー座標があるのに色もあるのか。
    • 第三版は本。次回表面材。
    • A bunch of notes が部分的に重要。
    • OBJ ファイルは利用しないほうがいい。使用したい OBJファイルがある場合は、 まず他の有力なフォーマットに変換して、それを使用する。
  • Sketchfab - The best 3D viewer on the web: TODO

12:40 Load Obj のコードの仕込みを始める。椅子モデルがデカイ。

13:00 おやつ休憩。さっき食ったばかりだ。食べる量を調整する。 カップ麺と豆腐を食い、ドーナツは明日にする。

14:00 外出。夏が戻ってきたかのような暑さ。湿気はないか。 イトーヨーカドー曳舟店で体温チェック。スカイツリータウンに移動。トイレ。

地下鉄に降りて浅草線で三田駅まで移動。地上に出る。図書館逃避行開始。 まず第一京浜を南下して最初の交差点を左折。芝浜方面へ歩く。 この辺は不案内なので携帯電話の地図をちょくちょく確認する。ホームレスのときにはできなかったことだ。 川が入り組んで流れていて、適当に歩くわけには行かない。 バス通りに出る。田町駅から品川駅まで通っているようだ。これを使えば良かった。まあいい。 港南三丁目に向かう。一瞬寂しいところが続くが、すぐに住宅地になる。

15:30 港区港南図書館。記念撮影ののち入館。個人的に気になっていた二階の謎の小部屋を確認。 名目は PC 室なのだが、高々二席しかない不思議な空間だ。時節柄閉鎖されている。 三階で産経新聞、東京新聞、ファミ通を読む。学ぼう産経新聞、二人の会話イラストが使いまわしだな。

16:00 退館。来た道を戻る。バスは本数が少なくてつかまらない。徒歩だ。

三田駅。三田線で神保町駅へ。新宿線に乗り換えて小川町駅へ。

17:10 秋葉原 HEY 二階。イルベロ、ビートマニア、G ダライアス Ver. 2 をパラパラプレイ。 イルベロは 3 ゲーム目が絶好調だったのに、ボスラッシュのオシシを見逃して凡スコアと堕す。 これで退店を決意した。19:30 退店。

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

  • 絹豆腐
  • 豚カルビ&焼鳥重
  • ちっちゃい板チョコデニッシュ (4)
  • ふっくらジューシーいなり (3)

20:35 曳舟の部屋に戻る。シャワーを浴びる。晩飯を整えつつ PC を開く。 メシを食いながら麻雀の練習。

写真とビデオの整理。実写ビデオでやりたいことがあるので、その素材になると思う。 携帯電話からケーブルでファイルをインポートするのに分単位で時間がかかるのは環境が poor だから?

  • 図書館の写真は 25% に縮小
  • イルベロのスコアは 12.5% に縮小
  • ビデオは放置

インターネットに行く。

22:20 キューブのコードを動作確認する。

  • JavaScript の正規表現リテラルを忘れていた。const keywordRE = /(\w*)(?: )*(.*)/; のように書くのだ。
  • const [, keyword, unparsedArgs] = m; の文法を確認すること。
  • twgl.setUniforms 呼び出しを二度に分ける必要はあるか検証したい。 それも含めて render には最適化の余地が明らかにあるが、教材なのでそのへんには目をつぶる。

椅子のコードに取り掛かる。BPL が気になって作業が進まない。

  • let webglVertexData の宣言は空の配列でいい。
  • const parts = obj.geometries.map(({ data }) => ... のブロックは cube のコードからの面白いリファクタリングだ。
  • twgl.setUniforms が二度に分かれているのが今回活きる。ループの内外で分けたのだ。
  • gl.bindVertexArray(vao); はループの中である必要がある。 parts というコレクションの各要素に対して vao それぞれが割り当てられている体で処理する。

最後にカメラ位置を椅子から遠ざけ、画面の中央に移動する処理を加えて椅子コードを終了する。 BPL の再生も終わる。ラストの DJ は何か隠れたテーマのようなものがありそうだ。

23:55 忘れないうちに Twitter の状態を更新しておこう。