サイコロ式の万年カレンダーというものがありますね。
たいていは1日1回サイコロを並べかえて、日付や曜日を変えるタイプですね。
それと同じ仕組みで、時・分・秒の時計タイプにして、1秒ごとにクルッと回ったらおもしろいかな、
という思いつきをそのまま three.js と WebGL で具体化しました。
2個のサイコロを使って、1 から 31 までの日付を表すには、どんなサイコロを使えばよいでしょうか。
片方のサイコロは、0・1・2・3・4・5 で、もう一方のサイコロは、0・1・2・6・7・8 にすればよいのです。
9 を出したい時は 6 を逆さまに置く必要があります。
さて、日付を表したいだけならば、それでいいのですが、今回のように時刻を表示するには 0 から 59 まで表す必要があります。
そのために私がやったことは、だいぶ強引ですが 2 を逆さまに置いて 7 に見えるようにして、
さらに 3 を逆さまに置いてムリムリながら 5 に見えるようにしました。
毎秒進んでいくサイコロの動きが、なるべくシンプルな動きになるような数字の配置を決めるために、
紙(ラベルシール)で実際にサイコロを作ってみました。
最初、サイコロ式の時計を作ったところまではよかったのですが、
それをそのまま並べて背景画像にしても、デザイン的におもしろみがないと思ったので、
サイコロをひな壇の上に置いて、斜めストライプのパターンがつながっていくようにしました。
★ ← 初期バージョン。
しましまのひな壇にする前は、こんな感じでした。
glTF を使うこと自体がなんだか楽しくて、
調子に乗って木目を入れたのですが、
落ち着いて見ると木目なんてない方がすっきりしていいと思います。
制作中は、glTF を .glb ファイルで読み込むやり方をしていたので、
ローカルで実行すると当然 CORS 制限にひっかかるのですが、
最後の仕上げの時に .glb ファイルを Base64 に変換してデータ URL にすれば、
CORS 制限と関係なくなるだろうと思っていました。
でもなぜか Chrome や Safari 7 では、
glTF にテクスチャが含まれている場合は、データ URL にしたにもかかわらず CORS 制限されてしまって、
ローカルで動かないというということが分かって、
だいぶ試行錯誤したのですがどうしようもなくて、JSON にしました。
JSON よりも glTF の方がかっこいいと思っているので残念です。
ローカルで動かすことにこだわっている理由は、
ガワネイティブでスマホのアプリにできるようにと考えているからです。
別にこの作品をアプリ化したい訳ではないですが、
同様のものをいつでもアプリ化できることを見据えておきたいのです。
ローカルに対する CORS 制限って本当に curse ですよね。世界中のみんなが困っています。
もちろんローカルファイルを自由に読み込むことができたとしたら危険だということは分かりますが、
せめて同一フォルダ内だったらサンドボックスってことにしてくれたらいいのに……。
遅いマシンでは、一度に2秒進む現象がたまに発生することが予想されますので、
FPS を減らして 40 にしました。