2001年5月2日更新  関谷トップページへ CG2001 トップページへ  

図形処理・計算処理実習2001 No.3 Glibwv.hを使ったグラフィックス(2) 3次元座標変換

2001.5.8 KPC 情報技術科  関谷

1. 河西のテキスト 8.4 3次元座標変換

 3次元空間にある物体を紙やCRTという2次元平面に作画するには、透視図法や軸測投影などを使う。

1.1 軸測投影(平行光線によるx-y平面への投影)

1)立体をx、y、z軸回りに回転変換する。

 回転角の正方向は、各軸の正方向に向かって右ねじを回す向きとし、x軸、y軸、z軸回りの回転角をそれぞれ、α、β、γとする。回転の順序をy軸→x軸→z軸の順に行うものとすると、点(x、y、z)は、次のように変換される。
(これも、3次元空間のベクトルの成分表示と考えて、それぞれの成分の計算を加えることで求まる。) 

 y軸回りにβ回転 ->
  x1=xcos(β)+zsin(β) 
  y1=y
  z1=−xsin(β)+zcos(β)
 
 x軸回りにα回転 ->
  x2=x1
  y2=y1cos(α)−z1sin(α) 
  z2=y1sin(α)+z1cos(α)

 z軸回りにγ回転 ->
  x3=x2cos(γ)−y2sin(γ) 
  y3=x2sin(γ)+y2cos(γ)
  z3=z2

2)上の回転で得られた座標をz=0(x−y平面)に平行投影する。

 これは、上の結果の(x3、y3、z3)のうち、z3を無視すること。
 したがって、上の示した式のz2、z3は不用となる。

例題59 家のデータを軸測投影で表示するプログラム

 家のデータは、構造体配列に格納している。
 3つの回転量は、角度でキーインする。
 3種のパラメータの投影図を、スクリーンでは、横に並べて表示する。

例題59 家のデータを軸測投影で表示(3 View)
この一番右の図では、家を床下から見ているのであるが、最初は、そのようには見えないであろう。ワイヤーフレーム表示でなく、光を当てて、壁面を考慮した陰線消去などをしないと、なかなかに、正確には見れないことが分かる。
 この投影図の作成で、マウスを使ってパラメータを連続的に変えるようにしたものがあるので、参照のこと。パラメータを見ながら、図を確かめると良い。なお、皆さんも後日、このJava appletプログラミングを実習する。

1.2 透視変換

 軸測投影では、投影面に対し平行光線を当てて投影した。透視では、ある点に向かって収束する光を当てる。この点を投影中心(消失点)と呼び、z軸上にとることにする。これの絶対値が大きければ、遠近感が小さくなる。
逆に、立体に近ければ、遠近感が強調される。
 透視では、投影中心に対する立体の位置が異なると、立体の見え方が変わる。立体が投影中心より上方にあれば、立体を見上げるように透視される。
 透視では、立体の回転に加え、平行移動の操作が加わる。
 
 y軸回りのβ回転と、x、y、z方向の平行移動量をl、m、nとし、投影中心をz=−vpとする。また,変換後の点は、z=0平面(x−y平面)に透視するものとする。
 変換式は、つぎのようになる。
まず、回転と平行移動により、
  x1=xcos(β) + zsin(β) +l
  y1=y+m
	z1=−xsin(β) + zcos(β) +n
が得られ、これをz=0平面に透視すると、つぎのようになる。
  px=x1/h
  py=y1/h
   ただし、h=(z1+vp )/ vp
        =−xsin(β)/vp+zcos(β)/vp+n/vp+1.0
この透視は2点透視といわれ、最も使われる方法である。β=0のときは単点透視となる。

練習問題59 透視プログラム

 例題59と同じ家のデータがあったとき、これを透視で表示する。  y軸回りの回転量β、消失点距離vp、x、y、z軸方向の移動量l、m、nは、キーインする。  3組をスクリーンでは、横に並べて表示する。

練習問題59 家のデータを透視で表示(3 View)

1.3 実習の課題:投影、透視のプログラムの解析と改造など

例題を参考に、皆さんの描きたい図形データなどを用意して、プログラムを改造し、作品を作りなさい。

1.4 レポートの提出方法

1)WordあるいはFrontPageExpress等に、考察、ソースリスト、実行グラフィックス画面を貼り付けたものを「Webページ」の形式(拡張子はhtml)で、各自のMyHomeに、cg_03などの名前をつけて保存する。
 あるいは、AZUKIなどを使って、htmlタグを自分で付けてhtmlファイルを作る。paint(*.gif)やword(*.jpg)などを使って圧縮した図は,imgタグでリンクする。こちらの方が、ファイル容量が小さく、テキストエディタで開いたときに、内容が読みやすいので、小生は、こちらの方々で作っている。(小生のWindows98では、paintでのgifファイルが、wordのjpgファイルよりも半分以下と小さくてきれいであった。)

2)情報系Webサーバにindex.htmlからのハイパーリンクを作って、登録する。(注を参照のこと。概略は以下のとおり。))
 htmlファイルは、Wordなどで、Webページとして保存する(前述)。そして、ホームページindex.htmlから、今回のレポートページへのリンクを張る。それらを各自のWebサーバのホームディレクトリの直ぐ下のpublic_htmlフォルダ(サブディレクトリ)にftpすること。

  最初に戻る