■プロジェクション座標変換プロジェクション座標変換はカメラの設定を行いカメラに映る映像を決めるために行われる座標変換のことです。:平行投影はオブジェクトが距離の影響を受けません。距離に関係なく同じサイズとして扱われます。透視投影:透視投影はカメラとオブジェクトの距離でサイズが変わります。オブジェクトがカメラに近ければ大きく、遠ければ小さくなります。以下は透視投影のイメージとなります。透視投影は台形になります。●投影に必要な情報クリップ面の範囲:クリップ面の範囲を設定することで視錐台のZ軸方向の映る範囲を決めます。手前を前面クリップ面、またはnear、奥行きを後方クリップ面、farと呼びます。画角:画角を設定することで視錐台のX軸とY軸の映る範囲を決めます。視野角ともよばれています。アスペクト比:投影する空間の縦横の比率です。基本的にウィンドウのサイズを使用します。■変換行列の作成方法プロジェクション座標変換の透視投影行列は以下の内容を使用しますのでこの行列の各要素について説明をしたいと思います。ScaleYは画角による拡縮の値になります。画角を2で割っているのは図にあるとおり画角はZ軸が中心になります。この性質を利用し、三角関数のtanを使用することで-1~1の値を算出し、その値を拡縮に利用しています。2.ScaleX:ScaleXはScaleYと基本同じ原理です。異なる点があるのはアスペクト比で除算しています。これは縦横1:1の画面を例えば画面を横長にした場合そこに映っている内容は横長に映ってしまいます。それを解消するためにアスペクト比で除算しており、これで横長になっていた内容が元のサイズに戻ります。3.ScaleZ:ScaleZは4と5に関連しており、クリップ面の距離の割合を拡縮率として利用しています。最後にfarによる乗算をおこなっていますが、これは最終的にzの範囲がクリップ空間の0~1の範囲かどうか確認するために必要なので行われています。0」の位置にするための移動値になります。理由も3と同じでzの範囲をクリップ空間の0~1の範囲か確認するために必要なので行われています。5.1:・1の理由:今までの行列ではここの部分は常に0だったと思います。今回は1が入っているかというとベクトルZの値をWの値に設定するためです。wの部分にzをあてはめるようなことをするのかというとz値による拡縮を行うためです。距離による拡縮は行われていません。行列の中にzが使用されていないのかというとzの値は不定だからです。アスペクト比や画角は定数と扱えますがzの値は変わりますのであえてはずしてあります。・wの役割wがどのような場所で使用されているのかというとGPUで使用されています。1になるようにしています。近ければ近いほど大きくなっていきます。・zの範囲チェック3と4でfarを乗算しているのもwの性質を利用しているからです。これによってzの値がnearだったら0、farだったら1となり、クリップ空間内に存在するかどうかを確認することが可能になります。■クリップ空間クリップ空間はプロジェクション座標変換によって作成された空間のことです。空間の範囲はx=-1~1、y=-1~1、z=0~1になっており、この範囲の中にあるオブジェクトが次のスクリーン座標変換で画面に表示されます。探している内容が見つからなかったら以下のサイトにあるかもしれません。筆者が開発にかかわらせてもらったアプリのリンクです。