|
ポリゴンを描画する手法として,走査変換アルゴリズムがあります.スキャンライン法は,この手法を各ポリゴンに対して行い,それによって得られる複数のスキャンラインセグメント(多角形とスキャン面との交線)の奥行き関係を計算することで隠面消去を実現するアルゴリズムです.
ここでは,種々の多面体の描画の様子を確認して,スキャンライン法による多面体の隠面消去について理解してください.
|
Main Windowでは,多面体が描画される様子を確認します.また,視点,多面体の形状,投影法を変更します.
Viewpointでは,現在の視点情報を確認したり変更できます.
Segment Windowでは,各スキャンラインにおける,スキャンラインセグメントの奥行き関係を確認できます.
Main Window
画面には多面体が描画される様子が表示されます.
・視点の変更
多面体をドラッグすると,視点が移動します(Viewpointで視点を変更することもできます).
多面体をドラッグしている間は,多面体がワイヤフレームで表示されます.
・多面体の形状選択
Objectプルダウンメニューで多面体の形状を選択します.Cube,H,U,Bars,Cross,Cross2の6種類の形状データからいずれか1つを選択することができます.
・投影方法の選択
Projectionプルダウンメニューで投影方法を選択すると,多面体の投影方法が変更されます.
透視投影(Perspective)と平行投影(Parallel)のどちらかの投影方法を選択することができます.
・スキャンの一時停止
スキャンライン法によるスキャンが行われているときにStopボタンを押すと,スキャンは一時停止し,スキャンラインセグメントの奥行き関係を確認することができます.スキャンを再開するにはStartボタンをクリックしてください.なお,Segment Windowが表示されていない場合は,これらのボタンは使用できません.
・描画の再実行
Displayボタンを押すと,スキャンライン法による描画が再実行されます.スキャンによるスキャンラインセグメントの移動の様子はSegment Windowに表示されます.
・初期状態への復帰
Resetボタンを押すと,選択されている形状データと視点が初期状態に戻ります.
ViewPort
現在の視点のθ:Theta(方位角),φ:Phi(仰角),R(距離)の値が表示されます.
・視点の変更
θ:Theta(方位角),φ:Phi(仰角),R(距離)の各スクロールバーを移動すると,視点が変更されます(Main Windowの画面上で多面体をドラッグすることで,視点を変更することもできます).
・初期状態への復帰
Resetボタンを押すと,視点が初期状態に戻ります
Segment Window
スキャンライン法によるスキャンによって発生したスキャンラインセグメントの奥行き関係が表示されます.視点に近いセグメントほど,Segment Windowの画面では下側に表示されています.画面上では,このSegment Windowで上側に表示されている(=視点から遠い)セグメントから順に描画されています.
|
この教材では,スキャンラインセグメントを奥行き順にソートした後に,奥にある線分から順番に描画します(Painter's algorithm).そのため,物体が貫通している場合(“Cross”の形状データ)はそれらのセグメントは互いに交差してしまうため,優先順位が決められず,正しくない結果が得られてしまいます.
この問題は,貫通する物体を分割する(“Cross2”の形状データ)ことで防げますが,分割が困難な場合でも,アルゴリズムを拡張することで問題を解消できます.
その代表的な方法の1つは,複数のセグメントが交差すると判った段階でそれらのセグメントを適宜分割する方法で,もう1つは,ラインごとにZバッファ法を適用してセグメントを描画していく方法です.