PG喫茶

1. 座標変換

形状データ

形状データは、基準となる座標系の頂点データの集まりであります。描画する際は、線で結んだり、面単位で塗りつぶしたりします。

観測者からみた、基準座標

実際に描画する際には、観測者から形状データの座標系が、どのように見えるかを知る必要があります。

遠近法

遠近法(透視変換)を用いる場合は、x座標とy座標を奥行きのz座標で割ることで求めることができます。ここでは計算が簡単になるよう、左右の座標の範囲(x座標)を-0.5から0.5の範囲を描画することにします。ちなみに視野角は60度になります。あまり、視野角を広くすると、画面の端が歪んで見えてしまいます。

座標系の回転

形状を回転させる場合は、頂点データを全て計算し直すことはせず、形状データの座標系だけを回転させます。簡単のために2次元で考えると、x座標がy座標にも、y座標がx座標にも影響を与えることになります。

回転の際の、他の軸への影響

ここで、高校数学の三角関数、sinとcosの出番です。座標系をt度、回転させると、x座標は、自身の座標はcos(t)に、y軸にはsin(t)と影響を与えます。y座標は、自身の座標はcos(t)に、x軸には-sin(t)と影響を与えます。y軸はx軸のマイナス側に向かって回転するため、このような結果になります。

スライダダイアログ

ここで扱うサンプルプログラムの多くは、ダイアログボックス内のスライダでパラメータを調整します。またスライダ自身も改良して使います。

行列

行列とは座標軸の集まりのようなものです。2次元では、座標系のX軸とY軸のベクトルの2つを持ちます。座標の頂点位置をvとすると回転を加味した位置は次のように求まります。

行列の演算

行列同士を掛け算することで、回転を合成したり、拡大・縮小と組み合わせることもできます。回転行列をM1、拡大行列をM2として、拡大を施した後に回転させる場合を考えます。拡大はx成分を2倍、y成分を3倍することにします。

トランスフォーム

行列で座標系の向き(姿勢)を表現できました。さらに座標系の原点位置を記録できるようにして、トランスフォームと呼ぶことにします。座標系の行列情報をM、原点情報をpとすると、トランスフォームを加味した頂点位置は次のように求まります。

ソースコード

実行結果

Copyright© 2016-2025 pg-kissa.net All Rights Reserved.