今回から,おもに3次元空間で回すネタを深堀りすると予告した。少し手の込んだ回転のアニメーションを考えると,どうしても立ちはだかってくるのは,ベクトルと三角関数だ。これから数回にわたって,ベクトルの内積・外積と三角関数を使ったお題に取り組む。
といっても,数学的にきっちり理解しなくてもよい。エンジンやサスペンションの仕組みは知らなくても,機能さえわかれば車は運転できる。もっと実感しやすい例でいえばフィルタだ。きわめて高度な数学演算の結果を,筆者も含めて多くのユーザーは内部処理を知らぬまま使っている。ただ,どのパラメータが結果にどう反映されるかさえわかっていればよいからだ。
もっとも,できれば内部的な処理を知りたいマニアックな読者もいるだろう。筆者もその気持ちはわかる。そこで,順序を逆転して数学的な計算や理由づけは,基本的に後から解説するかたちをとる。苦手な読者は,文脈を見失わない程度に流し読みしてもらって構わない。
お題の説明と準備
本論に入る前に,とくにマニアックな読者にひとつご注意したい。ベクトルの内積や外積が,何を意味するのかという疑問は,取りあえず先送りしてほしい。結論からいえば,筆者はその適切な答えをもっていない。だが,それは円周率πでも同じだろう。πとは何かと問われたとき,それは約3.14だとか,もう少し厳密にいうなら円周の直径に対する比率と一応は答えられる。
けれど,質問者が訊きたいのは,その数値の具体的な意味だ。この問いには,円の面積が求められるというくらいしか答えづらい。筆者はそれでよいと考える。Photoshopの初心者に,「雲模様」のフィルタは何をするものなのかと尋ねられたときと同じだ。数学でもPhotoshopでも,それをツールとして使うのであれば,何ができるのか,どのように使うのかがわかれば足りる。
今回採上げるベクトルの内積では,面が表か裏かを見分ける。ネタとしては,第48回「テクスチャに遠近法を適用する - uvt座標の指定」のスクリプト2に手を加えることにしよう(第48回図2再掲)。
第48回スクリプト2は,3次元空間で正方形の頂点座標をマウスポインタの位置に合わせて水平に回し,テクスチャマッピングした(前掲第48回図2)。今回はビットマップをもうひとつ加え,正方形の裏と表で異なるテクスチャをマッピングする(図1)。
まず準備として,回る正方形の裏に貼るビットマップを[ライブラリ]に加える。そして,スクリプトからインスタンスがつくれるように,[クラス]を設定しておく(図2)。今回のサンプルでは「Image2」とした(クラスを設定する手順については,第34回「3次元空間における回転」の「ビットマップのインスタンスを動的に配置する」参照)。


![図2 [ライブラリ]に加えたビットマップに[クラス]を設定 図2 [ライブラリ]に加えたビットマップに[クラス]を設定](http://image.gihyo.co.jp/assets/images/dev/serial/01/as3/0051/002.png)