長男(高校2年)が、最近 n 次元物体に興味を持っている。
4次元超立方体とかそういうやつね。
ネットでいろいろ調べて、すでに僕より詳しい。
そして、「4次元物体の3次元切片」を、切断する軸の値を時間軸に置き換えてアニメーションする CG を Youtube で見つけ、「面白そう、描いてみたい」と言い出した。
…で、しばらく部屋に籠っていたかと思ったら、「いきなり4次元は難しそうなので、3次元の8面体を表示するプログラムを、Scratch で作ってみた」と言ってきた。
陰面処理はない。透視変換もしていなかった。
つまり、「面」はなく、辺で表現した物体を、3つの軸のうち1つを無くした射影として描くプログラム。
さらには、2軸でくるくる回転できるようにも作り、奥行きを線の太さで表すようにも改良した。
データを入れ替えれば、8面体だけでなく、立方体や4面体も描けることを示した。
(12面体とか、きっと描けるけどデータを作るのが面倒だからとやらなかった)
そして、「2軸回転できるけど、回転順序によって影響を受けてしまう。任意の斜め軸で回転できるようにしたい」と言い始めた。
僕はそれほど 3D に詳しくない。
ゲームで 3D を使っていた時も、ライブラリに計算を任せていただけだ。
任意の斜め軸を設定するなら、ロール・ピッチ・ヨーのパラメーターで回転できるようにすると良いのではないかな、という程度のサジェストはできたが、それ以上の知識は持ち合わせていなかった。
そもそも、長男はまだ行列計算を習っていない。
回転行列を作って計算する、というのもピンとこない状態だ。
紙に図と計算式を描きながらどうすればよいのかとしばらく考えていたら…
先日セガが、内部のプログラマー勉強会で使った、という 140ページにもわたる 3D 計算数学のテキストを無償公開した。
あぁ、これは長男に読むことを勧めよう、と思っていたら、すでに学校の友達の間でも話題になっていたようで、帰りの電車の中でスマホで読んでみたと言う。
で、やはり行列も、三角関数の変形公式もわかっていないので、読み解くのが難しい、という状態だ。
しかし、我が家的には、なかなか良いタイミングで公開してくれた。
ネットで調べていても、3次元物体を自由に回転させたいなら、どうやら「クォータニオン」を学ぶ必要があるようだ、というところには行きついていた。
そして、わかりやすいという本のタイトルまでは検索していたのだ。後は買うかどうか、という段階。
そこにわかりやすいテキストが公開された形なので、長男としては一生懸命読んでいる。
ところで、僕がゲーム作っていた時は、クォータニオンというのは使っていなかったように思う。
内部計算も 3x4 の、座標移動付きの回転行列だったからね。
僕も、テキストにちょっと興味はあるのだが…
長いし、今の仕事では 3D を使う機会はなさそうなので、読まないように思う。
同じテーマの日記(最近の一覧)
別年同日の日記
16年 コンピューターが初めてプログラムを実行した日(1948)
申し訳ありませんが、現在意見投稿をできない状態にしています。 |