ポリゴンレンダラ - その4 [プログラミング]
こないだの退屈な座標変換の計算の続き。とっとと終わらせて次の作業に入りたい。
前回wまわりに回転させて視線の方向ベクトルkとw軸の方向の両方を含む平面内にu軸を持ってきた。あとはkをu−w面内で回転させてdと一致させるが、これはさっきと同じことができて、回転のマトリクスAv(θ)は で、さっきとおなじように ただし、 である。
また、これも実は簡単になって だから となる。
これで視線とdとが一致したことになる。
このあとはviewVerticalが上、つまりv=(0,1,0)の方向を向くように回転させる。
これもまったく同じで、viewVerticalの最初のベクトルをqとすると、ふたつの回転を受けた結果 となっている。このベクトルのu成分が0でv成分が正になればいい。q′のw成分を0とおいて規格化したベクトルをq′0、つまり とすると、まったく同じように として回転のマトリクスAd(ψ)を使えばいい。こんどは簡単にならないので、さっきの一般的な形に書いたのは正解だった。
結局もとの(x,y,z)座標での任意の点a=(ax,ay,az)は として変換される。そしてこれは同次座標でひとつのマトリクスのかけ算で表現できる。
ちなみに、同次座標へは とすればいい。
この後は簡単で、(u,v)平面へは でできる。ただしここでαはunitViewAngleである。最後の射影も含めて同次座標で表現できるので、(x,y,z)から(u,v)の変換は最終的に同次座標のマトリクスのかけ算1回(と同次座標の第4要素による割り算と)で計算できることになる。
ちなみに式-22の同次座標による表現は(ベクトルの縦横を区別せずに書いて) である。
これで3次元のモデル空間から2次元の表示座標に変換することができた。
前回wまわりに回転させて視線の方向ベクトルkとw軸の方向の両方を含む平面内にu軸を持ってきた。あとはkをu−w面内で回転させてdと一致させるが、これはさっきと同じことができて、回転のマトリクスAv(θ)は で、さっきとおなじように ただし、 である。
また、これも実は簡単になって だから となる。
これで視線とdとが一致したことになる。
このあとはviewVerticalが上、つまりv=(0,1,0)の方向を向くように回転させる。
これもまったく同じで、viewVerticalの最初のベクトルをqとすると、ふたつの回転を受けた結果 となっている。このベクトルのu成分が0でv成分が正になればいい。q′のw成分を0とおいて規格化したベクトルをq′0、つまり とすると、まったく同じように として回転のマトリクスAd(ψ)を使えばいい。こんどは簡単にならないので、さっきの一般的な形に書いたのは正解だった。
結局もとの(x,y,z)座標での任意の点a=(ax,ay,az)は として変換される。そしてこれは同次座標でひとつのマトリクスのかけ算で表現できる。
ちなみに、同次座標へは とすればいい。
この後は簡単で、(u,v)平面へは でできる。ただしここでαはunitViewAngleである。最後の射影も含めて同次座標で表現できるので、(x,y,z)から(u,v)の変換は最終的に同次座標のマトリクスのかけ算1回(と同次座標の第4要素による割り算と)で計算できることになる。
ちなみに式-22の同次座標による表現は(ベクトルの縦横を区別せずに書いて) である。
これで3次元のモデル空間から2次元の表示座標に変換することができた。
2013-04-03 21:26
nice!(0)
コメント(0)
トラックバック(0)
コメント 0