(57)【特許請求の範囲】
【請求項１】
３次元空間で多角形平面を定義するデータを処理し、第１の多角形平面と第２の多角形平面とが、隠れた面を除去して表出されるように表出順序を決定する方法であって、
前記データを処理して第１の試験を実行し、
前記第１の試験では、
前記第２の多角形平面のいずれかの断片が前記第１の多角形平面の裏にあるか否かと、前記第１の多角形平面のいずれかの断片が前記第２の多角形平面の表にあるか否かと、を判定し、これにより、
前記第１の多角形平面が前記第２の多角形平面の表に表出し得ることを示す肯定的な結果か、前記第２の多角形平面の表に前記第１の多角形平面を表出することができないことを示す否定的な結果、のいずれかを取得し、
前記第１の試験において、否定的な結果の場合には、
前記第１の多角形平面の裏にある前記第２の多角形平面の断片と、前記第２の多角形平面の表にある前記第１の多角形平面の断片と、を特定し、
前記データを処理して第２の試験を実行し、
前記第２の試験では、
前記第２の多角形平面の表にある前記第１の多角形平面の前記断片のうち、所定の境界面の法線方向に最も近い点が、前記第１の多角形平面の裏にある前記第２の多角形平面の前記断片のうち、前記境界面の法線方向に最も遠い点よりも、前記境界面から遠いか否かを判定し、これにより、
前記第１の多角形平面が、前記第１の試験において得られた前記否定的な結果に関わらず、その全体において前記第２の多角形平面の表に表出することができることを示す肯定的な結果か、前記第１の多角形平面を前記第２の多角形平面の表に表出することができないことを再び示す否定的な結果、のいずれかを取得することを特徴とする方法。
【請求項２】
前記第１及び第２の試験の少なくとも一つが、観察方向空間における観察方向の組を参照して実行されることを特徴とする請求項１に記載の方法。
【請求項３】
前記観察方向の組は、境界面によって定義されることを特徴とする請求項２に記載の方法。
【請求項４】
更に、
決定された前記表出順序を伝達する信号を発生する工程を含むことを特徴とする請求項１乃至３のいずれかに記載の方法。
【請求項５】
更に、
前記信号を記録する工程を含むことを特徴とする請求項４に記載の方法。
【請求項６】
更に、
表出画像データを生成するために、決定された前記表出順序に従って、前記第１及び第２の多角形平面を表出する工程を含むことを特徴とする請求項１乃至５のいずれかに記載の方法。
【請求項７】
更に、
前記表出画像データを伝達する信号を発生する工程を含むことを特徴とする請求項６に記載の方法。
【請求項８】
更に、
前記信号を記録する工程を含むことを特徴とする請求項７に記載の方法。
【請求項９】
３次元空間で多角形平面を定義するデータを処理し、第１の多角形平面と第２の多角形平面とが、隠れた面を除去して表出されるように表出順序を決定する装置であって、
前記データを処理して第１の試験を実行する第１の処理手段を備え、
前記第１の試験では、
前記第２の多角形平面のいずれかの断片が前記第１の多角形平面の裏にあるか否かと、前記第１の多角形平面のいずれかの断片が前記第２の多角形平面の表にあるか否かと、を判定し、これにより、
前記第１の多角形平面が前記第２の多角形平面の表に表出し得ることを示す肯定的な結果か、前記第２の多角形平面の表に前記第１の多角形平面を表出することができないことを示す否定的な結果、のいずれかを取得し、
前記第１の試験において、否定的な結果の場合に前記データを処理する第２の処理手段を備え、該第２の処理手段は、
前記第１の多角形平面の裏にある前記第２の多角形平面の断片と、前記第２の多角形平面の表にある前記第１の多角形平面の断片と、を特定し、
前記データを処理して第２の試験を実行し、
前記第２の試験では、
前記第２の多角形平面の表にある前記第１の多角形平面の前記断片のうち、所定の境界面の法線方向に最も近い点が、前記第１の多角形平面の裏にある前記第２の多角形平面の前記断片のうち、前記境界面の法線方向に最も遠い点よりも、前記境界面から遠いか否かを判定し、これにより、
前記第１の多角形平面が、前記第１の試験において得られた前記否定的な結果に関わらず、その全体において前記第２の多角形平面の表に表出することができることを示す肯定的な結果か、前記第１の多角形平面を前記第２の多角形平面の表に表出することができないことを再び示す否定的な結果、のいずれかを取得することを特徴とする装置。
【請求項１０】
前記装置が、
前記第１及び第２の試験の少なくとも一つを、観察方向空間における観察方向の組を参照して実行するように前記データを処理することを特徴とする請求項９に記載の装置。
【請求項１１】
前記観察方向の組は、境界面によって定義されることを特徴とする請求項１０に記載の装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は画像処理方法と装置とに係わる。具体的には、本発明は、三次元空間で多角形の位置を表現するデータを処理して例えば二次元空間で前記の多角形の視野像を表出するために必要な順序リストを生成する方法と装置とに係わる。
【０００２】
【従来の技術】
本出願人の同時に申請中の欧州特許公開公報第ＥＰ−Ａ−０５３１１５７号（最初に記載の日付の時点では未公開）において開示されているシステムを始めとする対話式三次元図形システムにおいては、オペレータからの入力指令に応答して、多角形を表現するデータが対話式に三次元空間で加工処理される。オペレータと仮想三次元環境との間の閉フィードバックループを維持するのに充分な速度で二次元画像がオペレータに提示される。
【０００３】
【発明が解決しようとする課題】
三次元画像データを二次元平面に表出することによって二次元画像を生成する。視野毎に「潜伏面除去」を実行して、他の多角形を遮る多角形が遮られる多角形の代わりか少なくとも遮られる多角形の後かに確実に二次元平面に表出されるようにする。遮り方は部分的なことが多い。従って、遮る側の多角形を表出する前に遮られる側の多角形を表出する方が好ましい。また、完全に目に見えない多角形を選別して、表出プロセス中に更に注目しないようにしても良い。このように、表出プロセスの非常に重要な側面は多角形を正確な順序で確実に表出することである。しかし、反復毎に繰り返し表出順序を正確に決定することは、処理時間の相当な部分の浪費につながる。
【０００４】
先述の同時に申請中の欧州特許公開公報に表出順序リストを生成するシステムが開示されている。このシステムにおいては、対話操作の前に位相的分類法を用いて前プロセスとして表出順序リストの生成を実行する。必要ならば、視野の向きを複数個選択して、それらの視野の一つ一つに対して表出順序リストを生成する。対話操作においては、実際の視野の向きと前処理で得た向きとを比較して、実際の向きにほぼ合致する前処理の向きを判定することによって、これらの表出順序リストの中からどれか一つを選択する。これによって、対話操作に必要な演算オーバヘッドが顕著に低減する。
【０００５】
【課題を解決するための手段】
本発明によれば、３次元空間で多角形平面を定義するデータを処理し、第１の多角形平面と第２の多角形平面とが、隠れた面を除去して表出されるように表出順序を決定する方法であって、
前記データを処理して第１の試験を実行し、
前記第１の試験では、
前記第２の多角形平面のいずれかの断片が前記第１の多角形平面の裏にあるか否かと、前記第１の多角形平面のいずれかの断片が前記第２の多角形平面の表にあるか否かと、を判定し、これにより、
前記第１の多角形平面が前記第２の多角形平面の表に表出し得ることを示す肯定的な結果か、前記第２の多角形平面の表に前記第１の多角形平面を表出することができないことを示す否定的な結果、のいずれかを取得し、
前記第１の試験において、否定的な結果の場合には、
前記第１の多角形平面の裏にある前記第２の多角形平面の断片と、前記第２の多角形平面の表にある前記第１の多角形平面の断片と、を特定し、
前記データを処理して第２の試験を実行し、
前記第２の試験では、
前記第２の多角形平面の表にある前記第１の多角形平面の前記断片のうち、所定の境界面の法線方向に最も近い点が、前記第１の多角形平面の裏にある前記第２の多角形平面の前記断片のうち、前記境界面の法線方向に最も遠い点よりも、前記境界面から遠いか否かを判定し、これにより、
前記第１の多角形平面が、前記第１の試験において得られた前記否定的な結果に関わらず、その全体において前記第２の多角形平面の表に表出することができることを示す肯定的な結果か、前記第１の多角形平面を前記第２の多角形平面の表に表出することができないことを再び示す否定的な結果、のいずれかを取得することを特徴とする方法が提供される。
【０００６】
本発明においては、前記第１及び第２の試験の少なくとも一つが、観察方向空間における観察方向の組を参照して実行されるようにすることもできる。
【０００７】
また、本発明によれば、３次元空間で多角形平面を定義するデータを処理し、第１の多角形平面と第２の多角形平面とが、隠れた面を除去して表出されるように表出順序を決定する装置であって、
前記データを処理して第１の試験を実行する第１の処理手段を備え、
前記第１の試験では、
前記第２の多角形平面のいずれかの断片が前記第１の多角形平面の裏にあるか否かと、前記第１の多角形平面のいずれかの断片が前記第２の多角形平面の表にあるか否かと、を判定し、これにより、
前記第１の多角形平面が前記第２の多角形平面の表に表出し得ることを示す肯定的な結果か、前記第２の多角形平面の表に前記第１の多角形平面を表出することができないことを示す否定的な結果、のいずれかを取得し、
前記第１の試験において、否定的な結果の場合に前記データを処理する第２の処理手段を備え、該第２の処理手段は、
前記第１の多角形平面の裏にある前記第２の多角形平面の断片と、前記第２の多角形平面の表にある前記第１の多角形平面の断片と、を特定し、
前記データを処理して第２の試験を実行し、
前記第２の試験では、
前記第２の多角形平面の表にある前記第１の多角形平面の前記断片のうち、所定の境界面の法線方向に最も近い点が、前記第１の多角形平面の裏にある前記第２の多角形平面の前記断片のうち、前記境界面の法線方向に最も遠い点よりも、前記境界面から遠いか否かを判定し、これにより、
前記第１の多角形平面が、前記第１の試験において得られた前記否定的な結果に関わらず、その全体において前記第２の多角形平面の表に表出することができることを示す肯定的な結果か、前記第１の多角形平面を前記第２の多角形平面の表に表出することができないことを再び示す否定的な結果、のいずれかを取得することを特徴とする装置が提供される。
【０００８】
本発明においては、前記装置が、前記第１及び第２の試験の少なくとも一つを、観察方向空間における観察方向の組を参照して実行するように前記データを処理してもよい。
【０００９】
【実施例】
三次元図形システムは、被写体と光源と観察位置とを概念的な三次元空間内で処理するための仮想三次元環境を提供する。観察位置には、「世界空間」と呼ばれる仮想三次元世界へのウィンドウが設けられる。世界空間自体は、三次元座標および色や反射力などの変数を定義するデータとして存在する。概念的なウィンドウに提示される二次元画像は、表出処理として知られる手続き内で三次元画像データを処理することによって作成される。
【００１０】
周知のシステムにおいては、三次元空間に存在する被写体をその被写体の表面上の選択された点の座標で表示する。表出処理には、画像の二次元領域に画素値を割当てる段階が含まれる。従って、これら座標点を直線で連結して平坦な二次元多角形の三次元ネットを提供することによって、座標点を概念的な領域に変換する。
【００１１】
物体全体が表出されるまで、画素値は多角形毎に生成される。その後、表出プロセスによって生成された画素値はラスタで走査され、映像信号が生成される。ところが、固定三次元被写体の幻影を維持するためには、遮る多角形が表出される前に遮られる多角形が確実に表出されるという順序に従って多角形三個を表出することが大切である。この問題を一層深刻にするのは、観察方向が変化するにつれて、遮り優先度が変化するという事実である。
【００１２】
三次元図形環境を提供する段階を図１  に示す。まず最初に、被写体を定義するデータを用意する。ステップ１５で第一の被写体をモデル化する。同様に、ステップ１６で第二の被写体をモデル化する。被写体のモデル化は、ステップ１７でＮ  番目の被写体がモデル化されるまで続く。各被写体は、それ自体のモデル化空間と呼ばれる座標集合に従ってモデル化される。被写体データの各集合は形状を定義する。図形環境でその形状を再生するのに必要なデータは、形状ファイルに格納される。
【００１３】
次の段階は、ステップ１８、１９、および２０から成り前処理段階の一部を成す。
【００１４】
ステップ１８で形状ファイルを読む。形状ファイルのデータは、多角形の頂点と多角形の表面特性とに基づき被写体の形状を定義する。ステップ１９で、形状ファイルのデータで定義されるデータを処理し、多角形表出順序リストを作成する。被写体が多数ある場合、その個数だけ順序リストが必要になる。ステップ２０で別の被写体を処理するかどうかを判断する。判断の結果が肯定の場合、ステップ１８と１９を繰返する。そして、次の被写体の形状ファイルを読む。
【００１５】
被写体一つ一つに対する順序リストの用意が終了したら、表出段階へ進むことが出来る。ステップ２１で照明パラメータと視野パラメータとを定義する入力指令を受信する。入力指令に応えて、被写体を表現する三次元データをステップ２２で加工処理する。ステップ２３で観察主の位置と向きとに基づいて二次元画像を生成する。そして、ステップ２４で画像を表示する。環境によっては、普通非常に精細度の高い単体画像を特定の視野位置に作成する。対話式三次元環境においては、オペレータ指令に応じてパラメータを調整し、対話中に新しい視野を繰り返し生成する。点線２５で示すようにステップ２１〜２４が繰返される。以降、図形システムの具体的な実現方法について図２３と２４を参照しながら要約する。
【００１６】
前述のように、被写体は、隣合う頂点を共有する多角形を接続したものと考えられる。従って、形状ファイルに定義される被写体データは、複数個の接続された多角形を定義する。
【００１７】
形状ファイルに被写体データを格納するために、多数の異なるデータ構造が考えられる。その内の一つを図２  詳細に示す。図２  において、データ項目の特徴は、そのデータ項目のデータ構造内の位置によって決まる。
【００１８】
図２  に示す形状ファイルの第一行には、被写体内に存在する頂点の個数を示す整数値Ｎ（Ｖ）と被写体を形成する多角形の個数を示す第二の整数値Ｎ（Ｐ）とが設定される。その後の行には頂点の座標が設定される。例えば、形状ファイルの第二行には、第一の頂点Ｖ１の座標が設定される。この行の第一の値は、頂点Ｖ１のＸ  座標を表す浮動小数点値Ｘ（Ｖ１）  ある。第一の値の次には、頂点のＹ  座標を表すＹ（Ｖ１）  とｚ  座標を表すＺ（Ｖ１）  とが設定される。同様に、次の行にはＸ（Ｖ２）  値とＹ（Ｖ２）  値とＺ（Ｖ２）値とが第二の頂点Ｖ２のＸ  座標とＹ  座標とＺ  座標として設定される。この設定は、最後の頂点の値Ｘ（Ｖｍ）  、Ｙ（Ｖｍ）  およびＺ（Ｖｍ）  が設定されるまで続く。ここで、ｍ  はＮ（Ｖ）に等しい。
【００１９】
頂点全部の座標が求められると、それらの座標から多角形が定義される。第一の多角形をＰ１とし、第二の多角形をＰ２とする。同様に、多角形Ｐｑ（ｑ＝Ｎ（Ｐ））までの多角形を定義する。第一の多角形Ｐ１の場合、第一項目には多角形Ｐ１を構成する頂点の個数を示す整数値Ｎ（Ｖ）１  が設定される。それ以降、その多角形の一部を構成する頂点が一つ一つ次の手続きに従って順次設定される。多角形の前面から反時計回りに多角形を構成する頂点が列記される。このようにして、すなわち、多角形の前面から反時計回りに多角形の各頂点Ｖａ１  〜Ｖｎ１  が判別され、最終的にＮ（Ｖ）１  個の頂点が列記される。
【００２０】
多角形Ｐ１が頂点三個から成る三角形である場合、多角形の第一の値Ｎ（Ｖ）１  は３  に等しい。多角形を構成する頂点は、前面から反時計回りに、例えば、頂点Ｖ２、Ｖ３およびＶ４と記される。従って、頂点の個数を定義する項目に続く項目には整数値が記入される。各整数値は先に規定された頂点に対応する。
【００２１】
多角形を構成する頂点が列記された時点では、特定の多角形に関する項目には、光に対する多角形の反射力を示す値が含まれている。第一の値Ｋａは周囲の光に対する反射力を表し、第二の値Ｋｄと第三の値Ｋｓとは各光源に関する反射力係数を表す。第二の値Ｋｄは拡散反射力を規定する。第三の値Ｋｓは鏡面反射力すなわち多角形の表面の輝きを規定する。反射力値は、同時に申請中の欧州特許出願第９３３０７７７２．９号（代理人の参照番号：２２２７８３０  ）に記載されているように、浮動小数点値もしくは固定小数点値として格納される。
【００２２】
各多角形に関する最後の項目は多角形の色を規定する。これには、多数の構成が考えられる。例えば、２４ビット値を使ってＲＧＢ  色空間に色を定義してもよい。あるいは、ビット数を減らしてルックアップテーブルのアドレスを指定するようにしてもよい。同時申請中の欧州特許出願第９３３０７６１１．５（代理人の参照番号：２２２７７３０  ）に記載されているように、色データを非線形ルックアップテーブルに格納してもよい。
【００２３】
このように、頂点と反射力値と色値とから成るリストが、被写体を構成する多角形Ｐ１〜Ｐｑの各々に対して作成される。最後に、形状ファイルには注解が設けられる。多角形Ｐｑに対して色を定義した後に設定したデータが、注解として処理される。
【００２４】
形状ファイルを読む段階すなわち図１  のステップ１８を図３  に詳細に示す。ステップ３１で被写体の頂点の個数を表す値Ｎ（Ｖ）を読取る。ステップ３２で被写体を構成する多角形の個数を表す値Ｎ（Ｐ）を読取る。ステップ３３で各頂点のＸ  、Ｙ  およびＺ  座標を定義する頂点データを読取る。ステップ３４で各多角形を構成する頂点の中のどれか一つを指定する多角形データを各多角形の反射力値と色値と一緒に読取る。注解は、この段階では読み取られず破棄される。
【００２５】
各多角形は、三次元世界空間内に設定された無限平面内に存在すると見なされる。これらの平面は各々、次の平面方程式によって定義される。
【００２６】
Ａｘ＋Ｂｙ＋Ｃｚ＋Ｄ  ＝０
ここで、Ａ  、Ｂ  、Ｃ  およびＤ  は平面の位置を示すパラメータである。Ａ  値、Ｂ  値およびＣ  値は、多角形の前面から延長し多角形の平面に対して法線となるベクトル、すなわち、多角形の平面に垂直なベクトルを規定する。平面の向きを判別するばかりでなく、法線ベクトルは多角形の表面のどれが前面かを識別する。
【００２７】
ステップ３４で多角形データ全部の読取りが終了したら、多角形を順番に処理する。ステップ３５で多角形の平面方程式の演算を試みる。ステップ３６で平面方程式を演算できるかどうかを判断する。判断の結果が否定ならば、その多角形をステップ３７で破棄する。
【００２８】
ステップ３５で平面方程式の演算が終了したら、算出された表面の法線ベクトル（Ａ、Ｂ  、Ｃ）をステップ３８で処理（正規化）して、同一方向に向いた単位長のベクトルを設定する。単位法線ベクトルを定義するデータを多角形データに追加する。これらのデータは、ステップ１９で多角形順序リストを用意するために使用されるばかりでなく、ステップ２３の表出手続きでも使用される。具体的には、単位法線ベクトルは、照明パラメータを算出するときにパラメータ値を判定するために必要である。同時申請中の欧州特許出願第９３３０７７７２．９号（代理人の参照番号：２２２７８３０  ）に記載されているように、被写体自体のモデル化空間で照明パラメータ量を算出してもよい。
【００２９】
ステップ３８で単位法線ベクトルが算出されたら、ステップ３９で別の多角形が存在するかどうかを判断する。結果が肯定ならば、次の多角形に対する平面方程式をステップ３５で演算する。多角形全部を着目し終ると、ステップ３９での判断の結果は否定となる。図１  のステップ１９へ制御を戻す。
【００３０】
このように、図３  に詳細に示した手続きは、形状ファイルを読み多角形毎に単位法線ベクトルを算出し注解があれば注解を破棄する。
【００３１】
図１  のステップ１９で多角形表出順序リストを用意する。これについて、以下に述べる。観察主をカメラと考える。カメラの特性については、パラメータ三個で充分に定義できる。パラメータは、カメラが指示する方向とカメラの位置とカメラの視野とである。各表出順序リストは、カメラの方向の集合一個もしくは複数個に対応づけられる。理想的には、考えられる全てのカメラ方向を二個か三個の集合に分類する。こうすれば、選択対象の表出順序リストの個数が最低になる。一般的には、カメラのパラメータ全部が、所定の表出順序リストに対応づけられた値に影響を及ぼす。しかし、本実施例では、最も大きな影響を及ぼすパラメータをカメラの方向であるとみなす。カメラの方向は、カメラの絶対位置とは無関係でカメラの観察軸が指示する方向に一致する。特定の方向に広がる領域は視野によって異なる。状況によっては、カメラの位置をも処理の対象にしなければ、完璧な順序リストを作成することができないかもしれない。このような状況では、リストはツリーか有向グラフかの形態をとる。観察位置に従って特定の岐を選択する。このように、方向のみに従ってリストを完成することが不可能となる位置で分岐が発生する。分岐点では、カメラの絶対位置に関連した判断が下される。判断の結果によって二つの枝の一方か他方を選び、リスト形成を続ける。
【００３２】
対話操作によって、カメラの特定の向き（観察方向）に対して特定の表出順序リストが選択される。多数の表出順序リストが作成される。各表出順序リストは、後述のように、いわゆる概念的な観察軸に関係する。本実施例においては、概念的な観察軸数個の中で実際の観察方向に最も近接しているのはどれかを評価することによって、リストが選択される。
【００３３】
理解し易いように、これ以降「リスト」という用語は、リスト、ツリー、有向グラフなどのデータ構造を意味するものとする。
【００３４】
方向空間を図４  に示す。図４  において、球体４１上の各点は球体の中心の原点４２への方向を表現する。
【００３５】
必要な表出順序リスト（ツリーかグラフ）の個数は、被写体の幾何学的形状によって異なる。しかし、本実施例に係わるプロセスの場合、最小リスト数は４  個である。概念的な観察軸の個数すなわち作成されるリストの個数は、オペレータによって指定される。図４  に示す例では観察軸は８  本指定される。従って、球体４１は８  個の区画に分割される。
【００３６】
概念的な観察軸４３は、概念的な観察軸８  本の中の一つであり、水平な分割面４５と第一の垂直分割面４６と第二の垂直分割面４７と境を成す区画４４を画定する。着目される区画は、視野錐体によってではなく平面間の交点によって画定される。関心方向を上記のように定義することによって、データを加工し易くなり処理時間を顕著に短縮できる。
【００３７】
多角形表出順序リストの準備に係わる図１  のステップ１９について図５  で詳細に説明する。ステップ５１で概念的な観察軸の集合が一組選択される。集合中の軸の個数によって、対話操作で選択される表出順序リストの個数が決まる。先述のように、この選択はオペレータ指令に応答して実行される。時間が立てば、オペレータは、着目する被写体の幾何学的形状の特徴によって好適な軸集合を判別することに慣れる。
【００３８】
ステップ５２で、ステップ５１で選択された観察軸の位置に基づいて分割面の位置を決定する。このように、例えば、観察軸４３から、ステップ４２で算出される分割面４４、４６および４７の位置が決まる。次に、ステップ５２について図６  を参照して詳細に説明する。図４  から明白なように、各平面は二つの概念的な観察方向に共有されていると考えられる。特定の概念的な観察軸の領域を画定する実際の分割面全部をその軸に対して演算するようなシステムを構成する。このように構成されたシステムの場合、（概念的な観察軸４３に関する処理ステップで必要な）平面４６の前面は、その平面の背面とは異なる平面であり、隣接する概念的な観察軸に対して演算されるべきものである。
【００３９】
概念的なカメラや目には、パラメータ定義方向があるばかりでなく、中心観察軸の方向に向いていても、視野錐体内ならば他の方向をも目に見れる視野がある。図４  に示すような観察平面の中のどれか一つの平面方向に向いているとき、カメラや目は、その平面と境を成す区画内ならどの方向をも観察できる。しかし、カメラや目は、視野のお陰で、観察面の他方の面に存在するその他の方向をもある程度は観察できる。更に、視野が増大するにつれて、境界をつけられた区画の外側に存在するその他の方向をカメラが観察できる度合が増す。
【００４０】
ステップ５４で境界面の位置を調節して視野を設定する。この調整について図７  を参照して更に詳細に説明する。視野を補償するために、境界面を概念的な観察軸から離れた位置に置き直す。これによって、着目している区画の寸法が増加する。
【００４１】
概念的な観察軸一つ一つに対して、常に後ろを向いている多角形がいくつかあり、後ろを向いているがために目に見えないということがありえる。ステップ５５では、この種の目に見えない多角形を除去する。次に、この除去について図８  を参照して詳細に説明する。
【００４２】
ステップ５６で予備リストを作成する。この際、概念的な観察軸方向に存在する多角形の最も遠くの頂点間の距離に着目する。図９  を参照して一層詳細に説明する。予備リストは最終表出順序リストを表すのではなく、表出順序リストを作成し易くするものである。また、予備リストを設ける目的は、完全な表出順序リストの生成を行う処理段階において論理順序に従って多角形を選択できるようにすることである。また、演算オーバヘッドを顕著に短縮できる。予備リストによって定義された順序で多角形を比較することによって、最終表出順序リストを作成するのに必要な比較回数が顕著に低下する。
【００４３】
ステップ５７で、予備リストからの選択を実行し、着目している特定の概念的な観察軸に対する最終表出順序リストを作成する。次に、図１１と１２を参照して一層詳細に説明する。
【００４４】
ステップ５８で、着目していない概念的な観察軸があるかどうか（別の表出順序リストを作成する必要があるかどうか）を判断する。判断の結果が肯定ならば、ステップ５３へ制御を戻す。
【００４５】
ステップ５８での判断の結果が否定ならば（概念的な観察軸一つ一つに対する表出順序リストの作成が終了したならば）、図１  のステップ２０へ制御を戻す。
【００４６】
図６  は、図５  のステップ５２に示された分割面の位置を算出する段階について詳細に示す。ステップ６１で第一の軸を選択する。この軸は特定の方向をもちベクトルＩ  とされる。ベクトルＩ  は、図４  に示す概念的な観察軸４３に対応する。ステップ６２で軸があるかどうかを判断する。反復一回目では結果は肯定である。
【００４７】
ステップ６３で第二の軸Ｊ  を選ぶ。この選択で、先に選択された軸が再度選択されることもある。ステップ６４で軸があるかどうかを判断する。反復一回目では、やはり、結果は肯定である。
【００４８】
ステップ６３で、ステップ６１で選択された軸を再度選んでしまったかもしれないので、ステップ６５で軸Ｊ  と軸Ｉ  が同じかどうかを判断する。結果が肯定ならば、ステップ６３へ制御を戻し別の軸を軸Ｊ  として選択する。
【００４９】
ステップ６５での判断の結果が否定ならば、ベクトル減算を実行する。ベクトル減算では、軸Ｊ  が軸Ｉ  から減算される。この演算を実行するために、ベクトルＩ  の大きさはベクトルＪ  の大きさと同じでなければならない。
【００５０】
図４  から、ベクトル４３と平面４６の他方の面に存在する同様なベクトルとに対してベクトル減算を実行できることが分かる。ベクトル減算によって、別のベクトルが作成される。このベクトルは、ベクトル４３を隣接ベクトルに接続する働きをし、平面４６に垂直な方向に存在する。ベクトルＩ  とベクトルＪ  とは長さが等しいので、作成されたベクトルは平面４６の法線となる。また、このベクトルは、ベクトルＪ  ではなくベクトルＩ  を指示する方向に向いている。
【００５１】
ステップ６６で算出されたベクトル（Ｉ−Ｊ）  をステップ６７で絶対値を使って除算する。これによって、単位長の等価ベクトルが算出される。このようにして、単位法線ベクトルで平面４６を規定する。そして、ステップ６３へ制御を戻して第二の軸Ｊ  を選択できるようにする。この際、平面４４を規定し、次に平面４７を規定できるようにベクトルを選択してもよい。
【００５２】
Ｊ  ベクトル軸全部が特定のＩ  ベクトル軸に対して着目されてしまうと、ステップ６４での判断の結果は否定となり、ステップ６１へ制御が戻される。
【００５３】
ステップ６１に制御が戻されるとすぐに、更なる軸がＩ  軸として選択されプロセスが繰返される。概念的な観察軸４３と平面４６の他方の面上の概念的な観察軸とに関連づけて説明したプロセスは、反復一回目でなくとも効率よく再実行される。但し、上記のベクトルの役目は逆転する。平面４６の位置が再度判断されるが、単位法線ベクトルは、平面の背面から伸長して他の概念的な観察軸に係わる平面を規定する。
【００５４】
こうして最終的には、概念的な観察軸全部が第一の軸Ｉ  として着目され、ステップ６２での判断の結果は否定となる。そして、制御がステップ５３に渡される。
【００５５】
特定の概念的な観察軸に対応する観察方向は、境界面によって規定される。また、境界面は、その他の有限数の概念的な観察軸を規定するベクトルに算術演算を実行することによって算出される。
【００５６】
各境界面は、特定の概念的な観察軸に対応しない方向の範囲とその観察軸に対応する範囲とに観察方向全部を分類する。平面から除外される範囲は、その平面の単位法線ベクトルの方向で判別され、許容観察方向に配向される。対応する観察方向の実際の範囲は、概念的な観察軸Ｉ  を指示する単位法線ベクトルを有する境界面から除外される範囲である。
【００５７】
概念的な観察軸４３に対応するカメラの向き（観察方向）の範囲に着目するとき、境界面はカメラが観察できる方向全部を規定する。このように、境界面によって画定される領域は、元来、観察方向のみに係わるものである。しかし、これでは視野を合わせないから、好ましくない状況もある。そのため、境界面によって画定される区画の拡大処理を実行して視野を変更する。この場合、境界面は調整されるが平面としての幾何学的構成は維持される。
【００５８】
図７  に詳細に示す手続きに従って、視野の半角で指定される量だけ境界面を調整して視野を合わせる。視野の半角とは、視野錐体の中心観察軸と錐体の周縁部との間の角度である。視野領域は事実上円錐形をしているので、上記の処理は拡張部分を完全には反映できない。従って、平面を実際に必要な量より僅かに多い量だけ調整して、着目している区画の幾何学的形状を複雑にし過ぎないようにする。
【００５９】
図５  を再度参照する。ステップ５４での視野調整は概念的な観察軸毎に実行される。ステップ５４は軸選択ループの中にある。従って、図４  において、隣接する区画に係わる境界面を調整すると、境界面は合致しなくなり区画は重なり合う。
【００６０】
視野を調整する手続きを図７  に詳細に示す。概念的な観察軸をステップ５３で選択する。そして、その他の観察軸に対して演算を行う。ステップ７１で他の観察軸の中のどれか一つを選択する。この形態が設定されていない場合、単位ベクトルを算出する。この単位ベクトルをＡ  とする。
【００６１】
ステップ７２で軸があるかどうかを判断する。反復一回目では、判断の結果は肯定である。ステップ７１で選択される軸が、ステップ５３で選択された概念的な観察軸と同一ではないという保証はない。従って、ステップ７１で選択された軸がステップ５３で選択された軸と同一かどうかをステップ７３で判断する。判断の結果が肯定である場合、ステップ７１へ制御を戻し別の軸を選択する。判断の結果が否定である場合、二本の選択された軸を分離する平面を規定する単位法線ベクトルＮ  を読取る。この単位法線ベクトルはステップ６７で算出されたものであり、このステップで格納されステップ７４で読出される。
【００６２】
ステップ７５で単位ベクトルＡ  とＮ  との点乗積を算出する。これらのベクトル両方の長さが単位長であるならば、それらの点乗積は双方の間の角度の余弦関数である。
【００６３】
ステップ７５で算出された点乗積の絶対値あるいは大きさが１  より大きいかどうか、すなわち、その大きさが＋１より大きいか−１より小さいかどうかをステップ７６で判断する。点乗積の大きさが１  より大きい場合、丸め誤差が原因なので、ステップ７７で大きさを１  に設定する。必要ならば、判断処理を重ねて、システム内の論理誤差の存在を明確に反映する数値を判別してもよい。
【００６４】
点乗積が＋１に極めて近いか（例えば、０．９９９９より大きいか）をステップ７８で判断する。判断の結果が肯定ならば、ステップ７１へ制御を戻し別の軸を選択する。
【００６５】
ステップ７８での判断の結果が否定ならば、ステップ７９で点乗積の逆余弦関数を算出し、二つのベクトル間の角度α値を判定する。
【００６６】
ステップ８０で、ステップ７９で算出された角度α値から視野の半角を減算する。この結果、新しい値α’が得られる。この値は、平面を視野に合わせて調整した後のその他の概念的な観察軸からの角度を表す。
【００６７】
ステップ８１でα’値がゼロより小さいかゼロと等しいかどうかを判断する。判断の結果が肯定ならば、制御をステップ７１へ戻す。
【００６８】
ステップ８１での判断の結果が否定ならば、ベクトルＡ  とＮ  とのクロス乗積を算出して回転軸Ｒ  を求める。ステップ８３で新しい単位法線ベクトルＮ  ’を算出して、視野を変更するために置換させられた境界面の向きを規定する。新しい単位ベクトルは、例えば、（ｉ）  概念的な観察軸ベクトルＡ  で乗算された角度α’値の余弦関数、あるいは、（ｉｉ）ベクトルＲ  とＡ  とのクロス乗積で乗算された角度α’値の正弦関数を加算することによって求められる。
【００６９】
ステップ８４で、調整された単位ベクトルＮ  ’を記述し制御をステップ７１へ戻す。後続の演算では、Ｎ  で規定される半空間の代わりにＮ  ’で規定される半空間を使用する。
【００７０】
最終的には、ステップ７２での判断の結果が否定になり、制御がステップ８５へ渡される。これによって、観察軸自体が観察角度構造に追加される。
【００７１】
図８  は、図５  のステップ５５での目に見えない多角形の除去について詳細に示す。ステップ９１では、ステップ５４で視野に合わせて調整された境界面に着目する。具体的には、着目する境界面とは、ステップ５３で選択された概念的な観察軸に対応する方向に境界をつけるために必要な平面のことである。このような境界面の小集合を非冗長境界面と呼ぶ。これらの境界面は、現在選択されている観察軸に対しては非冗長なのである。
【００７２】
ステップ９１で選択された非冗長境界面は交差している。ステップ９２で、交点を規定する辺ベクトルを算出する。これらのベクトルは後続の処理に使用される。従って、これらのベクトルを定義するデータを将来の使用のために格納する。
【００７３】
ステップ９３〜９８で、多角形全部に順番に着目して、着目している概念的な観察軸方向に目に見えるか見えないかを判断する。目に見えない多角形は、選択された概念的な観察軸に関する表出順序リストの作成に関して更に着目されることはないので除去される。
【００７４】
具体的には、ステップ９３で別の多角形があるかどうかを判断する。反復一回目では、判断の結果は肯定である。ステップ９４では別の辺ベクトル（ステップ９２で算出された集合に含まれる辺ベクトル）があるかどうかを判断する。反復一回目では、判断の結果は肯定である。
【００７５】
ステップ９５で、多角形単位法線ベクトルとステップ９４で選択された辺ベクトルとの間の点乗積を算出する。
【００７６】
ステップ９６で、ステップ９５で演算された点乗積がゼロより大きいかどうかを判断する。点乗積がゼロより大きい場合、判断の結果は肯定となる。従って、ステップ９７で多角形を保持し、制御をステップ９３へ戻す。そして、別の多角形を選択する。
【００７７】
ステップ９６での判断の結果が否定ならば、多角形は目に見えない可能性がある。但し、その多角形が目に見えないのは、辺ベクトル全部で構成された点乗積がゼロより大きくないときだけである。このように、ステップ９６での判断の結果が否定ならば、制御をステップ９４へ戻し別の辺ベクトルを選択する。ステップ９５で、次の辺ベクトルに対する点乗積を再度算出し、ステップ９６で、この点乗積はゼロより大きいかどうかを判断する。
【００７８】
点乗積がどれもゼロより大きくない場合、ステップ９４での判断の結果は否定となる。そのため、ステップ９８で当該多角形を除去し更に着目しないようにする。
【００７９】
多角形全部が着目されてしまうと、ステップ９３での判断の結果は否定となり、制御はステップ５６へ移る（図５）。
【００８０】
図９  は予備リストを作成するためのステップ５６（図５  ）を詳細に示す。ステップ１０１  で、ステップ１８（図１  ）で形状ファイルから読取られた多角形データを再構成して図１０に示す形態にする。多角形データの各ブロックにはラベルがつけられ、一意に判別できるようになっている。このラベルは目に見える多角形を判別する。また、目に見えない多角形はステップ５５（図５  ）で除去される。更に、各多角形には追加空間が設けられ、図１０に示すように予備リストや「子「および／あるいは「親」への接続を示すポインタが設定される。後に、これらのポインタの機能について図１０を参照して説明する。
【００８１】
図９  に戻る。ステップ１０２  で、概念的な観察軸方向に最も遠くまで広がる多角形を選択する。そして、概念的な観察軸方向の距離に着目して予備リストを作成する。この予備リストから後続の処理の対象となる多角形の論理順序が決まり、表出順序リストを作成できる。
【００８２】
ステップ１０３  で、選択された多角形を予備リストの最後に追加し、ステップ１０４  で、別の多角形があるかどうかを判断する。判断の結果が肯定であれば、制御をステップ１０２  へ戻し、最も遠くまで広がる次の多角形を選択する。
【００８３】
最終的には、ステップ１０４  での判断の結果は否定となり、制御はステップ５７へ戻される。
【００８４】
他の多角形に優先して表出される多角形を判別して、表出順序リストを作成する。リストに設定される第一の多角形は、後続の多角形で遮られるものであり、最初に表出されるものである。優先して他の多角形を遮る多角形は、最後にリストに設定される。
【００８５】
状況によっては、存在する多角形から（予備リストに類似した）正しくリストを作成できない。例えば、第一の多角形が第二の多角形を遮り、第二の多角形が第三の多角形を遮り、第三の多角形が第一の多角形を遮るという具合いに、多角形が相互に互いを遮るという状況である。この場合、どの多角形がどの多角形より優先されるかを判断するのは不可能である。このような状況を以降サイクルと呼ぶ。
【００８６】
本実施例においては、後により詳細に説明するが、サイクルの破壊に二通りの手続きが採用される。第一の手続きにおいては、多角形を分割して「子」多角形を二個作成することによってサイクルを破壊する。すなわち、子多角形を表出順序リストに設定し、次に別の多角形をリストに設定し、その後に他方の子多角形をリストに設定することで、相互に遮るのを回避しようとする。分割多角形は、子多角形二個の「親」と呼ばれる。子多角形に対して図１０に示す親ポインタが設定され、関連する親多角形のラベルを指示する。同様に、子ポインタを設け、親多角形が順番に特定の子多角形に関する多角形データを指示できるようにしている。本実施例においては、親多角形は常に子二個に分解される。その後に、子多角形を両方とも表出順序リストに設定して、あたかも親多角形がそのリストに設定されたかのように処理する。
【００８７】
多角形を分割してサイクルを破壊することができない場合、第二の手続きが試みられる。すなわち、表出順序リストを分岐させてサイクル破壊を実行し、表出順序リストに決定点を設定するのである。決定点に達したら、概念的なカメラの実際の位置およびカメラの視野（観察）方向に着目し、どれか一つの枝を選択する。サイクルを破壊するには、様々な地点で表出順序リストを分岐させることが必要である。すなわち、ツリー構造を採用するのである。ツリーの各枝は同一の多角形集合で構成される。但し、多角形のいくつかは、異なる方法で子多角形に分割されているかもしれない。枝間の相違は基本的には多角形の順序である。この順序は概念的なカメラの実際の位置によって異なる。
【００８８】
分岐が行われ複数個の多角形が（枝毎に異なる順序で）列記されたら、枝二本における多角形の順序が再び同じになる可能性がある。このような状況では、どれか一つの枝に存在する多角形を列記し、多角形の完全なリストが出来ている枝を指示するポインタを他の枝に設定する。この場合、リストは有向グラフの形態をとる。また、最終表出順序リストへの参照にはツリーや有向グラフへの参照が含まれる。
【００８９】
図１０において、各多角形データブロックは一意な多角形ラベルを備えている。多角形ラベルは、形状ファイルから読取られた多角形データに付加される。更に、特定の多角形がそれ自体子多角形である場合に親を指す親ポインタと、予備リスト内の位置を直接あるいは親多角形を介して示す接続ポインタと、多角形が子多角形に分割されている場合に子多角形を判別する子ポインタとが多角形データブロックに設定される。
【００９０】
予備リストは多角形のどれかが分割される前に形成されるので、この段階で着目している多角形全部が接続ポインタを予備リスト内のある位置に設定される。しかし、多角形を分割して表出順序リストを作成する場合もある。また、子多角形が表出順序リストに設定されたとき、付随する子多角形も親多角形に優先してそのリストの適当な位置に設定される。
【００９１】
図１１と１２は図５  のステップ５７を詳細に示す。先述のように、多角形はこの段階では既に予備リストに設定されている。そして、その予備リストから多角形を選択して最終表出順序リストを作成する。具体的には、予備リストの位置から鑑み最終表出順序リストに設定される可能性が最も高い多角形が選ばれる。この多角形は「現行本命多角形」と認識される。最終表出順序リストに設定する前に、試験を実行して現行本命多角形をリストに設定できるかどうかを確認する。試験を実行して、現行本命多角形と他の多角形とを比較し、現行本命多角形が最終表出順序リストに設定されるのを阻止しようとする多角形を判別する。現行本命多角形に比較される多角形を候補多角形と呼ぶ。
【００９２】
現行本命多角形が表出順序リストに設定されるのを候補多角形が阻止しようとしているかどうかを判断するために行われる試験について説明する前に、現行本命多角形を表出順序リストに設定されない場合に採られる論理処理構成について述べる。
【００９３】
現行本命多角形と候補多角形とを比較して、本命多角形がリストに付加されるのを候補多角形が阻止できるかどうかを判断する。本命多角形がリストに付加されるのを候補多角形が阻止できることが検出されると、特定の多角形が現行本命多角形として選択されたが、表出順序リストへの設定は拒絶されたという趣意が表示される。その後、別の現行本命多角形が選択される。
【００９４】
拒絶された現行本命多角形はスタックに投入される。そして、以前に候補多角形だった多角形であって、以前の現行本命多角形が最終表出順序リストあるいはツリーに設定されるのを阻止した多角形が、新しい現行本命多角形として選択される。新しい現行本命多角形が最終表出順序リストに設定されたら、以前の現行本命多角形はスタックから弾き出され、他の候補多角形に対して試験される。
【００９５】
このように、現行本命多角形はスタックに付加されたりスタックから除去されたりする。これによって、現行本命多角形が拒絶された場合には、そのことが表示される。一方、予備リストの残りの多角形に優先して過去の現行本命多角形に再度着目できるようにする。
【００９６】
スタックも、サイクルの発生を識別するための機序を与える。すなわち、既にスタックに入っている新しい現行本命多角形がスタックに投入されそうになったら、それは明らかにサイクルが存在するということであり、サイクルを破壊するための処理を実行しなければならない。
【００９７】
上記のように、多角形を分割してサイクルを破壊しようとすると、特定の多角形が分割されて一対の子多角形が作成される。子としての多角形は再度分割され一対の子多角形が作成される。子多角形が小さ過ぎないよう保証する手段が設けられている。
【００９８】
多角形をスタックに投入するための構成では、子多角形を処理でき、親多角形に優先して子多角形を表出順序リストに設定することできる。
【００９９】
図１２を詳細に考察する。ステップ１２１  で空のスタックを作成し、ステップ１２２  でスタックが空かどうかを判断する。反復の一回目では判断の結果が肯定なのは明かである。制御をステップ１２４  へ渡す。
【０１００】
ステップ１２４  で多角形全部が処理されたかどうかを判断する。判断の結果が肯定であるとき、最終出力表出順序リストあるいはツリーが完成したことを意味する。制御を図５  のステップ５８へ戻す。
【０１０１】
ステップ１２４  での判断の結果が否定であるとき、制御をステップ１２５  へ渡す。そして、予備リストから次の多角形を現行本命多角形として選択する。
【０１０２】
多角形のスタックへの投入が終了すると、ステップ１２２  での判断の結果は否定となる。ステップ１２３  で、予備リストから多角形を取出すのに優先してスタックから最上位の多角形を取出し、次の現行本命多角形を判別する。その後、制御を再びステップ１２６  へ渡す。
【０１０３】
ステップ１２６  で現行本命多角形が既に最終表出順序リストに設定されているかどうかを判断する。判断の結果が肯定ならば、制御をステップ１２２  へ戻す。判断の結果が否定ならば、制御をステップ１２７  へ渡す。
【０１０４】
ステップ１２７  で現行本命多角形が子多角形かどうかを判断する。判断の結果が肯定ならば、最下位の子多角形を判別し現行本命多角形として設定する。最下位の子多角形は、それ自体は子を持たない多角形であり、多角形のツリー構造の末端の「葉」と呼ばれるものを同定することで判別される。
【０１０５】
ステップ１２７  での判断の結果が否定ならば、制御をステップ１２８  の次のステップ１２９  へ渡す。ステップ１２９  で現行本命多角形が遮ることができる多角形を判別するための処理を実行する。この処理で現行本命多角形が遮れる多角形を判別できたら、ステップ１２９  で、遮る側の多角形に関する表示と供にこの事実に関する情報が表示される。あるいは、現行本命多角形が遮れる多角形はないという趣意が表示される。
【０１０６】
ステップ１３０  で現行本命多角形が遮ることができる多角形があるかどうかを判断する。判断の結果が否定ならば、制御をステップ１３７  へ渡す。
【０１０７】
ステップ１３０  での判断の結果が肯定ならば、これは、すなわち、現行本命多角形を最終表出順序リストに設定できないということである。ステップ１３１  で、今では古い現行本命多角形と呼ばれる現行本命多角形をスタックに投入し、制御をステップ１３２  へ渡す。
【０１０８】
ステップ１３１  で古い現行本命多角形のスタックへの投入が終了したら、ステップ１２９  で判別された多角形（候補多角形）がステップ１３２  で新しい現行本命多角形となる（図１２）。
【０１０９】
ステップ１３３  で、新しい現行本命多角形が既にスタックに存在するかどうか、そして、サイクルが存在するかを判断する。判断の結果が肯定ならば、サイクルが存在する。そして、ステップ１３４  でサイクルを破壊しようとする。
【０１１０】
ステップ１３３  での判断の結果が否定ならば、制御をステップ１２９  （図１１）へ戻す。そして、新たに選択された現行本命多角形が遮れる多角形を判別するための処理を実行する。
【０１１１】
図１２において、ステップ１３４  でサイクルの破壊が終了すると、多角形の中には修正（例えば、分割とか切捨て）されたものがあるかもしれない。ステップ１３５  でこれらの多角形をスタックから除去す。ステップ１３４  のサイクル・破壊・ルーチンは、ステップ１３５  の制御に戻る前に最下位の修正された多角形を記録する。ほかの修正された多角形より長くスタックに存在した修正されたポリゴンを意味する。それからステップ１３５  は修正された多角形の他に、修正された多角形の１つより後にスタックに追加された未修正の多角形も取り除く。サイクル分割の試みが常に不成功に終る可能性がある。また、サイクルが存在するということを受け付けるか無視するかを判断する処理も必要かもしれない。しかし、図１２に関連づけた説明では、サイクル全部を破壊するものとする。大多数の場合、サイクル全部を破壊するからである。
【０１１２】
ステップ１３５  で修正された多角形のスタックからの除去が終了したら、ステップ１３６  でスタックは空かどうかを判断する。ステップ１３６  での判断の結果が否定ならば、スタックは空ではないということなので、制御をステップ１２３  へ戻す。そして、最上位の多角形をスタックから排除して現行本命多角形を選択する。あるいは、ステップ１３６  での判断の結果が肯定ならば、スタックは空であるということなので、制御をステップ１２４  へ戻す。そして、多角形全部が処理されたかどうかを再度判断する。
【０１１３】
ステップ１３０  （図１１）での判断の結果が否定ならば、ステップ１２９  で呼出された手続きは、現行本命多角形が遮れる多角形を判別できなかったということである。従って、ステップ１３７  で現行本命多角形を表出順序リストに設定す（図１２）。ステップ１３８  で、多角形データに変更を加えて、その多角形は表出順序リストに設定されているという事実を記録する。ステップ１３９  で、別の子多角形が存在するかどうかを判断する。現行本命多角形自体が子多角形ならば、判断の結果は肯定である。そうでなければ、判断の結果を否定にし制御をステップ１２２  へ戻す。
【０１１４】
ステップ１３７  で表出順序リストに設定された多角形が子多角形ならば、ステップ１４０  でその他の子多角形が表出順序リストに設定されているがどうかを判断する。判断の結果が否定ならば、制御を再びステップ１２２  へ戻す。あるいは、判断の結果が肯定ならば、親多角形を判別するデータに着目することが必要になる（ステップ１４１  ）。子多角形が両方とも表出順序リストに設定されたということは、親多角形が表出順序リストに設定されたということと同じなので、親多角形を除去して着目しないようにする。
【０１１５】
ステップ１４１  で制御をステップ１３８  へ戻す。そして、親多角形に関する項目が変更されて、親多角形は表出順序リストに設定されているという趣意になる。先述のように、この親多角形はそれ自体が子なので、ステップ１３９  で判断が再度下される。そして、制御をステップ１２２  へ戻すまでループを数回反復させる。
【０１１６】
図１３は図１１のステップ１２９  に示された手続きを詳細に示す。この手続きは、現行本命多角形が遮れる多角形を識別する。ステップ１５１  で、次の多角形を予備リストから選択して現行本命多角形によって遮られる候補多角形として試験する。
【０１１７】
ステップ１５２  で、別の多角形がステップ１５１  で抽出されたかどうかを判断する。予備リスト内の多角形全部の処理が終了したならば、判断の結果は否定になる。ステップ１５２  での判断の結果が否定ならば、現行本命多角形は多角形をどれも遮れない（多角形は何も残ってないので遮れない）という趣意を表示し、制御を図１１Ａ  のステップ１３０  へ戻す。この場合、ステップ１３０  での判断の結果は否定になる。従って、制御をステップ図１２の１３７  へ渡す。そして、現行本命多角形を順番に表出順序リストに設定する。
【０１１８】
ステップ１５１  で予備リストから候補多角形を求めることができたら、ステップ１５２  での判断の結果を肯定にし、制御をステップ１５４  へ渡す。
【０１１９】
ステップ１５４  で、選択された候補多角形が現行本命多角形と同一かどうかを判断する。候補多角形が現行本命多角形と同一であり、ステップ１５４  での判断の結果が肯定ならば、制御をステップ１５１  へ戻し、次の多角形を新しい候補多角形として予備リストから選択し、現行本命多角形によって遮られるかどうかについての試験を実施する。
【０１２０】
ステップ１５４  での判断の結果が否定ならば、候補多角形は現行本命多角形とは異なるということなので、試験を実施して現行本命多角形が候補多角形を遮れるかどうかを判断する。
【０１２１】
ステップ１５５  で、観察軸方向の広がりの度合に着目する。広がりの度合に基づいて予備リストを作成するのである。観察軸方向に最も遠くまで広がる多角形を観察主の近辺に広がる多角形に優先してリストに設定するという順序で、多角形を予備リストに設定する。予備リストを作成する際、観察方向に最も遠くまで広がる多角形同士の頂点同士を比較して多角形を分類する。このようにして、ステップ１５５  で活用された特性に基づく予備リストが作成される。
【０１２２】
ステップ１５５  で、最も遠くまで広がる候補多角形の広がりの度合すなわち候補多角形を予備リストに位置づける際に使用された広がりの度合を、最も近くで広がる現行本命多角形の広がりの度合に比較する。現行本命多角形に関する限り、ステップ１５５  で着目されるのは最も遠くまで伸びる広がりの度合（予備リストへ投入する際に使用された広がりの度合）ではなく最も近くで伸びる広がりの度合である。
【０１２３】
ステップ１５６  で、最も近くで広がる現行本命多角形の広がりの方が実際には最も遠くまで広がる候補多角形の広がりより遠くまで伸びているかどうかを判断する。この判断の結果が肯定ならば、現行本命多角形は候補多角形を覆い隠すことは出来ない。
【０１２４】
予備リストの重要な特徴は、ステップ１５５  と１５６  で行われた比較の結果に基づいて、本命多角形が候補多角形を遮ることは出来ないと判断される場合、多角形が予備リストに順序正しく配置されると仮定すれば、本命多角形は他のどの多角形をも覆い隠すことはできないということである。これは、予備リストに設定される多角形全部が最も遠くまで広がっているからである。このように、最も遠くまで広がる多角形の広がりが、最も近くで広がる本命多角形の広がりよりも近くまでしか伸びていない場合、その他の多角形全部の広がりは、最も近くで広がる本命多角形の広がりより近くまでしか伸びていないことになる。従って、本命多角形は他の多角形のどれをも遮ることは出来ない。すなわち、予備リストに残る他の多角形のどれかに対して試験をしなくても現行本命多角形を表出順序リストに設定できる。この手続きの優位性は、ステップ１５６  で実施した試験が成功すれば、必要な処理時間を顕著に低減できるこということである。
【０１２５】
この試験の優位な特徴は、サイクルを破壊するために分割された候補多角形の子多角形に着目する必要が無い点である。最も遠くまで広がる親多角形の広がりが、最も遠くまで広がる子多角形の広がりと同等となる。また、この（最も遠くまで広がる）子多角形が現行本命多角形によって遮られなければ、他の子多角形のどれもが現行本命多角形によって遮られない。このように、ステップ１５５  と１５６  で実施される試験は、試験が成功して、残りの多角形のどれかを試験する必要がなければ、非常に有効である。
【０１２６】
予備リストの作成で二つの重要な機能が発揮される。第一の機能は、表出順序リストに設定するために本命多角形を選択するときや本命多角形に対して比較するために候補多角形を選択するときの論理順序を提供する。第二の機能は、それをステップ１５５  と１５６  の処理に組合わせて実行すれば、本命多角形を最終表出順序リストに設定するのに必要な演算オーバヘッドをかなり短縮できるというものである。
【０１２７】
ステップ１５６  での判断で、現行本命多角形は候補多角形を遮れないことを確認できない場合、図１１のステップ１３０  へ復帰する前に何等かの処理を行わなければならない。実現し易くするために、候補多角形を分割して複数個の子多角形を作成するときに、葉の子多角形一つ一つに個別に着目することが望ましい。また、ステップ１５２  での判断の結果が否定になるまで、あるいは、ステップ１５５  と１５６  で実施される広がり試験が成功するまで、予備リストに残っている多角形全部に着目することが必要である。
【０１２８】
ステップ１５７  で、候補多角形は子多角形かどうかを判断する。判断の結果が肯定ならば、子多角形の構造を検査して葉の子多角形すなわち親ではなく分割されてない子多角形を判別する。ステップ１５８  で次の葉の子多角形を選択する。子多角形の構造に関連したプロセスは、予備リストから選ばれた根の多角形を構成する葉の子多角形全部が着目されるまで続く。子多角形を作成するステップにおいて、第一の子多角形は普通第二の子多角形よりも観察主から離れた位置に作成される。従って、ステップ１５８  では、ツリー構造の階層毎に階層順位順に子多角形を選択する。
【０１２９】
ステップ１５７  での判断の結果が否定ならば、制御をステップ１５９  へ渡す。制御はステップ１５８  に続くステップ１５９  にも渡される。ステップ１５９  で、手続きを実行して現行本命多角形が候補多角形を遮れるどうかを確認する。この候補多角形は、予備リストから選択された候補多角形あるいは予備リストから選択された多角形の葉の子多角形としての候補多角形である。
【０１３０】
ステップ１６０  で、現行本命多角形が候補多角形を遮れるかどうかを判断する。判断の結果が肯定ならば、ステップ１６１  でこの趣意を表示し制御をステップ１３０  へ戻す。ステップ１３０  での判断の結果が肯定ならば、ステップ１３１  で現行本命多角形をスタックに投入する。
【０１３１】
ステップ１６０  での判断の結果が否定ならば、予備リストから選択された多角形から派生した別の葉の子多角形があるかどうかをステップ１６２  で判断する。判断の結果が肯定ならば、制御をステップ１５８  へ戻しステップ１５９  で次の葉の子多角形を選択し現行本命多角形と比較する。このように、選択された多角形の葉の子多角形全部が着目されるまで、このループは繰返される。
【０１３２】
葉の子多角形全部に着目し終えたら、ステップ１６２  での判断の結果を肯定にし、制御をステップ１５１  へ戻す。ステップ１５１  で、次の多角形を候補多角形として予備リストから選択する。その後、先に詳細に説明した手続きが繰返えされる。
【０１３３】
予備リストから選択された次の多角形の広がりをステップ１５５  で比較する。ステップ１５６  での判断の結果が肯定ならば、残りの多角形のどれも現行本命多角形によって遮られないことが明白となる。すると、残りの多角形全部を候補多角形として着目する必要がなくなる。但し、ステップ１５５  と１５６  で実施した試験が不成功に終った場合は着目しなければならない。
【０１３４】
図１４は図１３のステップ１５９  の手続きを詳細に示す。この手続きは、現行本命多角形が候補多角形を遮れるかどうかを判断する。ステップ１８３  で、候補多角形のどこかの部分が現行本命多角形の平面の後に来るかどうかを判断する。現行本命多角形の平面は現行本命多角形の単位法線ベクトルによって規定される。また、現行本命多角形の平面は、実際の多角形の辺より先へ伸び、着目している世界空間の境界から外れた平面である。候補多角形のどの部分も現行本命多角形の平面の後に来ていないならば、現行本命多角形が候補多角形を遮ることはできない。また、ステップ１８３  での判断の結果は否定になる。
【０１３５】
ステップ１８３  での判断の結果が否定ならば、制御をステップ１９５  へ渡す。そして、現行本命多角形が候補多角形を遮ることは出来ないという趣意を表示し、制御を図１３のステップ１６０  へ戻す。
【０１３６】
ステップ１８３  での判断の結果が肯定的ならば、候補多角形の一部が現行本命多角形の平面の後に来るということなので、ステップ１８４  で「候補多角形の断片」と呼ばれるこの部分を表現するデータを格納する。
【０１３７】
ステップ１８５  で、現行本命多角形のどこかの部分が候補多角形の平面の前に来ているかどうかを判断する。現行本命多角形のどの部分も候補多角形の平面の前には来ていない場合、現行本命多角形が候補多角形を遮ることはできない。ステップ１８５  での判断の結果が否定ならば、制御を再びステップ１９５  へ渡す。そして、ステップ１６０  で、現行本命多角形は候補多角形を遮れないという趣意のデータを表示する。しかし、ステップ１８５  での判断の結果が肯定ならば、現行本命多角形は候補多角形を遮れる可能性が限定的ではないがある。
【０１３８】
ステップ１８６  で、候補多角形の平面の前に来ている現行本命多角形の断片を定義するデータを格納する。次に、ステップ１８４  と１８６  で格納された断片と境界面とを比較する。
【０１３９】
ステップ１８７  で境界面を選択する。平面には絶対位置はないが、その単位法線ベクトルで向きが規定される。単位法線ベクトルの正の方向は、対応する概念的な観察軸の方向である。また、多角形の断片の位置は、この正の方向に対して比較される。具体的には、ステップ１８８  で、境界面の法線ベクトルの正の方向に最も近くに位置する現行本命多角形の断片の点を判定する。その後ステップ１８９  で、同一の境界面の法線ベクトルの正の方向に最も遠くに位置する候補多角形の断片の点を判定する。ステップ１９０  で、現行本命多角形の断片の最も近い点は候補多角形の断片の最も遠い点より遠いかどうかを着目している平面に対して判断する。
【０１４０】
現行本命多角形の断片上の境界面に最も近い点が、前記の方向において候補多角形の断片の最も遠い点より遠い場合、現行本命多角形は境界面と平行な観察方向において候補多角形を遮れない。ステップ１９０  での判断の結果が肯定ならば、ステップ１９１  で、着目している境界面はもっとあるかどうかを判断する。この判断の結果が肯定ならば、制御をステップ１８７  へ戻す。そして、次の境界面を選択し、ステップ１８８  、１８９  および１９０  で距離試験を繰返す。現行本命多角形の境界面のどれかに最も近い点が、候補多角形のその境界面から最も遠い点よりも遠い場合、ステップ１９０  での判断の結果は肯定となり、現行本命多角形は候補多角形を遮れない。また、制御はステップ１９５  へ渡される。
【０１４１】
複数個の試験が入れ子形式で実施される。試験は、相互の効果が最大となるような順序で実施される。ステップ１８３  と１８５  で実施される試験は第一段階試験と見なされる。すなわち、候補多角形のどこかの部分が好適多角形の平面の後に来ているかどうかが判断される試験の他に、候補多角形の断片を定義するデータが収集される試験が実施される。同様に、現行本命多角形のどこかの部分が候補多角形の平面の前に来ているかどうかがステップ１８５  で判断されるとき、現行本命多角形の断片を定義するデータが収集される。
【０１４２】
ステップ１８３  と１８５  で実施される試験が不成功に終った場合、すなわち、判断の結果が肯定となった場合、第二段階試験が実施される。しかし、第二段階試験は、元の多角形データに対しては実行されず、ステップ１８４  と１８６  で格納されたデータに対して実行される。
【０１４３】
このように、現行本命多角形が表出順序リストに追加されるのを候補多角形が阻止する位置にあるかどうかの判断が試みられる場合、第一試験で一方の多角形のポテンシャル摩擦が発生する可能性のある部分（あるいは、両方の多角形の部分）を判別する。これによって、現行本命多角形が表出順序リストに追加されるのを阻止する。その後、遮る側の多角形の特定の部分一個あるいは複数個に対してのみ第二段階試験が排他的に実施される。このように、第一段階試験で現行本命多角形がリストに追加されるかどうかの決定が不成功に終ることがあったとしても、第二段階試験の実施を可能にする情報は得られる。
【０１４４】
ステップ１９０  での判断の結果が境界面全部に対して否定ならば、ステップ９１での判断の結果も否定になる。この時点で、候補多角形は現行本命多角形によって遮られないとは言えなくなる。ステップ１９２  で、現行本命多角形が候補多角形を遮れるかどうかの最終判断を下す。
【０１４５】
ステップ１９３  で、現行本命多角形が候補多角形を遮れるかどうかを判断する。判断の結果が再度否定ならば、制御をステップ１９５  へ渡す。しかし、試験全部を終了した後でも、ステップ１９３  での判断の結果が以前として肯定ならば、現行本命多角形は候補多角形を遮れると推測する。ステップ１６０  でこの趣意の情報を表示する。
【０１４６】
現行本命多角形が候補多角形を遮れるかどうかの最終判断を下すステップ１９２  の手続きを図１５と１６に詳細に示す。
【０１４７】
上記のように、図１４のステップ１８５  での現行本命多角形の断片に関する判断の結果に基づいて行えば、ステップ１８９  での判断は下し易くなる。更に、もしステップ１８９  の後でも遮りがあると判断される場合、この遮りの原因は、現行本命多角形の断片として判別された現行本命多角形の一部であることは周知の通りである。このように、候補多角形を遮るものがあるとしたら、それは現行本命多角形の断片である。また、現行本命多角形の残りの部分は候補多角形のどの部分をも遮れない。従って、図１５と１６の手続きにおいて、更に着目する必要があるのは現行本命多角形のみである。現行本命多角形の断片が候補多角形を遮っていないことを示すことができれば、現行本命多角形全体を最終表出順序リストに設定できる。
【０１４８】
上記のように、ステップ１９０  （図１４）で実施される試験では、境界面の法線ベクトル方向に最も近い現行本命多角形の断片の点と最も遠い候補多角形の点とを比較する。この試験に関する限り、着目された領域は、境界面の位置に関係する領域であり、断片自体の実面積より大きい領域になりがちである。実際の断片より大きい面積に着目すると、実際には遮りが起こる可能性が無い時に発生する遮りの可能性を試験で認識することができる。従って、ステップ１９２  の手続きは、現行本命多角形の断片の広がりで画定される領域ではなく実際の現行本命多角形が原因で遮りが発生するかどうかを判断する。
【０１４９】
図１５と１６は、候補多角形が現行本命多角形を実際に遮れるかどうかを判断する手続きを詳細に示す。この手続きは、境界辺、すなわちベクトルによって規定される境界面の交点で画定される辺と、断片辺と呼ばれる現行本命多角形の断片の辺とを参照する。具体的には、この手続きは、現行本命多角形の断片の一辺を選択し境界辺毎にその断片に着目する。その後、同様な手続きが他の断片の辺に対して繰り返される。
【０１５０】
ステップ２０１  （図１５）で少なくとも一つの境界辺があるかどうかを判断する。境界面が一つだけ存在する場合、この判断の結果は否定である。覆い隠しが発生し易くなり、制御はステップ２１５  （図１６）へ渡される。
【０１５１】
境界辺が少なくとも一つはある場合、ステップ２０１  での判断の結果が肯定になり境界辺が選択される。ステップ２０２  で、ステップ１８６  （図１４）で格納された現行本命多角形の断片の詳細情報を読取る。
【０１５２】
ステップ２０３  で現行本命多角形の断片に別の辺があるかどうかを判断する。反復一回目では、この判断の結果は肯定になる。断片の辺を選択して更なる試験を実施する。その後、ステップ２０４  で、断片辺の長さがゼロより大きいかどうかを判断する。ステップ２０４  での判断によって、辺が存在するように見えるが実際には長さがゼロであり存在しない場合の条件が認識される。こうして、ステップ２０４  での判断の結果が否定ならば、制御をステップ２０３  へ戻し次の断片辺を選択する。
【０１５３】
ステップ２０４  での判断の結果が肯定になるとき、ステップ２０５  で、断片のある平面が「視野錐体」に交差するかどうかを判断する。
【０１５４】
視野錐体は、境界面を境を成す方向の集合として定義される。視野錐体に交差する平面は、許容観察方向を示す正接ベクトルをもつ。この種の平面においては、前面を見れる観察方向があり、背面を見れる観察方向もある。逆に、断片の平面は、それが視野錐体の外側方向のみをもつ場合、視野錐体に交差しないと考えられる。この様な多角形の場合、視野錐体内の全方向に前面が見えるか、あるいは、視野錐体内の全方向に後面が見える。
【０１５５】
ステップ２０５  での判断の結果が肯定ならば、現行本命多角形平面は視野錐体に交差するということなので、ステップ２０６  で、現行本命多角形の断片の選択された辺の方向が視野錐体内にあるかどうかを判断する。すなわち、選択された辺を規定するベクトルが、視野錐体によって規定される許容観察方向の一つの方向に一致するかどうかを判断する。
【０１５６】
選択された辺ベクトルが許容観察方向に一致する場合、ステップ２０６  での判断の結果を肯定にし、制御をステップ２０３  へ戻して、別の辺を選択する。ステップ２０６  での判断の結果が否定ならば、あるいは、ステップ２０５  での判断の結果が否定ならば、制御をステップ２０７  へ渡して、ベクトルＫ  を算出する。
【０１５７】
ステップ２０７  で、選択された断片辺を規定するベクトルと選択された境界辺を規定するベクトルとのクロス乗積を算出することによってベクトルＫ  を決定する。
【０１５８】
ステップ２０８  で、別の境界辺があるかどうかを判断する。判断の結果が肯定ならば、次の境界辺を選択し更に着目する。
【０１５９】
ステップ２０９  で、先に算出されたベクトルＫ  とステップ２０８  で新たに選択された境界辺との間に形成される点乗積が負となるかどうかを判断する。
【０１６０】
ステップ２０９  で算出された点乗積が負の場合、ステップ２１０  で、Ｋ  の新しい値が断片辺の新しい境界辺（ステップ２０８  で選択される辺）とのクロス乗積として算出される。あるいは、ステップ２０９  での判断の結果が否定ならば、算出された点乗積はゼロより大きいかゼロと等しいとうことなので、以前に算出されたＫ  の値をそのままにし、制御をステップ２０８  へ戻す。そして、別の境界辺を選択する。このように、ステップ２０８  と２０９  とを境界辺毎に繰返す。ステップ２０９  で算出された点乗積が負であることが判明したら、格納されていたベクトルＫ  を再度算出する。
【０１６１】
最終的には、ステップ２０８  での判断の結果は否定になる。すなわち、境界辺はもうないので、制御を図１６のステップ２１１  へ渡す。
【０１６２】
ステップ２１１  で、先に算出されたベクトルＫ  に垂直な平面で、断片辺を規定するベクトルをもつ平面Ｓ  を算出する。
【０１６３】
ステップ２１２  で断片のどこかの部分がステップ２１１  で算出された平面Ｓ  の前に来ているかどうかを判断する。この判断の結果が肯定ならば、ステップ２１３  で着目している断片の定義内容を変更し、実際に平面Ｓ  の前に来ている断片の部分の定義を含むようにする。その後、制御をステップ２０３  へ戻し、更なる断片辺に着目する。
【０１６４】
ステップ２１２  での判断の結果が否定ならば、断片のどの部分も新たに算出された平面Ｓ  の前に来ていないとうことなので、現行本命多角形が候補多角形を遮ることはできない。従って、制御をステップ２１４  へ渡し、この趣意をも念的な観察軸に対応する許容観察方向のどれに対しても現行本命多角形によって遮られることはない。
【０１６５】
断片辺全部に着目し終えると後はずっと、ステップ２１２  での判断の結果は肯定になる。すなわち、断片の一部が常に新たに算出された平面Ｓ  の前に来るということなので、現行本命多角形が候補多角形を遮るように見える。こうして、ステップ２０３  での判断の結果は否定になり、制御をステップ２１５  へ渡す。
【０１６６】
ステップ２１５  での判断の結果によって、現行本命多角形が候補多角形を遮れないことを確認しようと試みる。ステップ２１３  で現行本命多角形の断片をおそらく数回修正したので、現行本命多角形の断片は非常に小さくなっている。ステップ２１５  で、現行本命多角形の断片がシステム内の丸め誤差と同じくらい小さくなったかどうかを判断する。現行本命多角形の断片が実際に存在するか、あるいは、この段階で断片と思われるものは単なる算術的な丸め誤差の産物なのかどうかについては、そのどちらにしても断言できない。ステップ２１５  での判断の結果が肯定ならば、残存する現行本命多角形の断片がシステム内の丸め誤差と同じくらい小さいということなので、現行本命多角形は候補多角形を遮れないという趣意のデータをステップ２１４  へ戻す。
【０１６７】
しかし、修正された現行本命多角形の断片が許容丸め誤差より大きい場合、ステップ２１５  での判断の結果は否定になり、現行本命多角形は候補多角形を遮れると推測する。この趣意を表すデータをステップ２１６  で設定し、制御を図１４のステップ１９３  へ戻す。
【０１６８】
詳細に説明してきた手続きは、表出順序リストに設定するための現行本命多角形を判別する。その後、試験を実施して、現行本命多角形と表出順序リストに設定されていない候補多角形とを比較することによって、現行本命多角形をリストに設定するのは適切かどうかを判断する。現行本命多角形が候補多角形を遮れるために、現行本命多角形をリストに追加できない場合、現行本命多角形をスタックに投入し、遮られる候補多角形を次の現行本命多角形と見なす。
【０１６９】
説明してきた手続きを使えば、リスト、ツリーあるいは有向グラフを完璧に組立てることができる。但し、それらの手続きは、現行本命多角形をリストに設定できるかどうか、あるいは、候補多角形を遮れるため現行本命多角形をリストに設定できないかどうかについて、そのどちらにしても、常に判断を下すことができなければならない。
【０１７０】
これらの手続きに障害が起こると思われる唯一の状況は、図１２のステップ１３３  のサイクルが認識される状況である。すなわち、新しい現行本命多角形が選択されるが、この現行本命多角形は以前に選択されたことがあり、既にスタックに投入されている場合である。ステップ１３３  で試験が実施されなければ、連続ループに陥り先に進まない。
【０１７１】
図１２のステップ１３４  に示すように、サイクル破壊手続きが設けられている。また、本実施例では、サイクル全部をステップ１３４  の処理で破壊できると仮定している。
【０１７２】
図１７〜２２は、図１２のステップ１３４  に示すサイクル破壊手続きを多数詳細に示す。サイクルが存在する場合、その中には多角形が二個だけ含まれる。多角形は互いに相手を遮ることが出来る。多角形の一方を他方の平面の周囲で分割させることでサイクルを破壊できるならば、このような二重多角形サイクルの破壊は比較的簡単である。しかし、本実施例では、必要とされる分割回数を低減させるために、手続きを最適化する。多角形を二個より多く有するサイクルには、より高度な分割手続きが必要である。
【０１７３】
図１７のステップ２２１  と２２２  で、サイクル長が２  に等しいかどうかを判断する。判断の結果が否定ならば、サイクルには多角形が二個より多く存在するということなので、制御を図１９のステップ２４１  に渡する。
【０１７４】
ステップ２２２  での判断の結果が肯定ならば、サイクルには多角形が二個だけ存在するということなので、多角形の構成は図１８の構成に類似したものとなる。図１８は二個の多角形Ｐ１とＰ２の先端を突合わせた様子を示す。図１８において、多角形の平面は軸２４０  の方向に交差している。図１８において、多角形の二次元図は軸２４０  の方を見おろしている。
【０１７５】
多角形Ｐ２の平面に着目すると、多角形Ｐ１は、多角形Ｐ２の平面の一方の面例えば左側の面の方へ垂線距離ｄ１だけ伸長している。同様に、多角形Ｐ１は、多角形Ｐ２の平面の他方の面の方へ距離ｄ２だけ伸長している。更に、逆の見方をすれば、多角形Ｐ２は、多角形Ｐ１の平面の一方の面の上方へ距離ｄ３だけ延長し、多角形Ｐ１の平面の他方の面の上方へ距離ｄ４だけ延長している。ステップ２２３  でこれらの距離ｄ１、ｄ２、ｄ３およびｄ４を算出し、ステップ２２４  でｄ２値がｄ１値より大きいかどうかを判断する。ｄ２値がｄ１値より大きい場合、ステップ２２４  での判断の結果は否定になり、ステップ２２５  で変数ｖ１をｄ２に等しい値に設定する。あるいは、判断の結果が肯定ならば、ｄ２値はｄ１値より大きいということなので、ステップ２２６  で変数ｖ１をｄ１に等しい値に設定する。
【０１７６】
ステップ２２７  で、ｄ４値がｄ３値より大きいかどうかを判断する。判断の結果が否定ならば、ｄ４値はｄ３値より大きくないということなので、ステップ２２８  で変数ｖ２をｄ４と等しい値に設定する。あるいは、判断の結果が肯定ならば、ｄ４値はｄ３値より大きいということなので、ステップ２２９  で変数ｖ２をｄ３に等しい値に設定する。
【０１７７】
ステップ２３０  で、変数ｖ２が変数ｖ１より大きいかどうかを判断する。判断の結果が肯定ならば、ｖ２値はｖ１値より大きいということなので、ステップ２３１  で多角形Ｐ２を分割する。あるいは、ステップ２３０  での判断の結果が否定になれば、変数ｖ２は変数ｖ１より大きくないということなので、ステップ２３２  で多角形Ｐ１を分割する。
【０１７８】
どちらの場合でも、多角形の分割は交線２４０  上で起こる。図１８に示す例においては、ｄ１値はｄ３値より大きいので、変数ｖ１は変数ｖ２より大きいと判断される。これによって、多角形Ｐ１は二つの子多角形に分割される。分割は軸２４０  で起こる。この分割によって、サイクルが破壊し制御は図１２のステップ１３５  へ戻る。
【０１７９】
ステップ２２２  での判断の結果が否定ならば、サイクルには多角形が二個より多く存在するということなので、制御を図１９のステップ２４１  へ渡す。
【０１８０】
ステップ２４１  で、別の多角形がサイクルに存在するかどうかを判断する。反復の一回目では判断の結果は肯定になる。
【０１８１】
ステップ２４２  で、多角形の平面が観察（視野）錐体に交差するかどうかを判断する。前述のように、現行の概念的な観察軸に対応する観察方向全部から表面を一つだけを見ることができ、その表面は背面か前面であるとき、平面は観察錐体に交差しない。同様に、平面が観察錐体に交差するならば、いくつかの方向から前面を見ることができ、他の方向から背面を見ることができる。単位法線ベクトルの向きを変化させることによって、このような平面を検出できる。すなわち、単位法線ベクトルを反転して、以前に背面だった表面を前面すればよい。多角形が観察錐体に交差しない場合、反転後の多角形は目に見えなくなる。従って、不可視試験を繰返せば、この種の多角形平面を判別できる。しかし、平面が観察錐体に交差する場合、反転させても向きによっては依然として目に見えるようならば、多角形の反転は何の効果もない。
【０１８２】
図１９に示す手続きの目的は、観察錐体に交差しない多角形を判別することである。この多角形の観察方向は、平面の一方の面上にあるとも平面の他方の面上にあるとも考えられる。このような多角形が存在する場合、その多角形を使えば、サイクルの破壊後に他の多角形全部を分割させるための平面を判別できる。具体的には、ステップ２４１  で選択された平面が観察錐体に交差するかどうかのステップ２４２  での判断の結果が肯定ならば、その平面を拒絶し制御をステップ２４１  へ戻す。ステップ２４２  での判断の結果が否定ならば、選択された多角形は観察錐体に交差しない平面に存在するということなので、ステップ２４３  でサイクル内の他の多角形全部を選択された多角形の平面の周囲で分割する。ステップ２４４  で、最下位の分割多角形が判別されたことを記録し、修正（分割）された多角形全部をスタックから除去し制御をステップ１３５  へ戻す。
【０１８３】
ステップ２４１  での判断の結果が否定ならば、多角形全部が着目され、その多角形全部が観察錐体に交差するということなので、多角形のどれか一つを使用して残りの多角形全部を分割させるための平面を識別することはできない。ステップ２４１  での判断の結果が否定ならば、制御を図２０のステップ２５１  へ渡す。
【０１８４】
図２０に示す手続きは、観察錐体に交差しない平面の回りで多角形を分割するという点で図１９の手続きに類似している。前述の手続きにおいては、多数の平面が演算の対象となる。具体的には、初期境界面と、視野の調節後に設定された境界面とが演算の対象となる。観察錐体内に多角形が何も存在しないので、多角形を使って分割を実行できない場合、この条件を満たす別の平面が選択される。
【０１８５】
ステップ２５１  で、境界面の位置を定義するために先に生成されたデータから候補多角形の分割面を選択する。法線ベクトルに基づいて適当な候補多角形を選択する。法線ベクトルを反転しても、依然として不可視試験に合格せず、いくつかの有効観察方向から見える場合、その平面は候補平面となる。
【０１８６】
候補平面の集合の収集が終了したら、候補平面一つ一つに着目して多角形分割を実行するのに適当な平面を判別する。
【０１８７】
先に演算されたデータを参照して選択した候補平面は、単位法線ベクトルで規定される。各単位法線ベクトルは実際に平行面族を規定する。平行面の向きは同じだが絶対位置によって規定されない。この平面集合から、概念的な平面を法線ベクトル方向に所望の絶対位置まで移動することによって、実際の分割面を画定することができる。ステップ２５２  で、別の候補平面があるかどうかを判断する。判断の結果が肯定ならば、第一の候補平面を選択する。先述のように、この段階では、候補平面は絶対位置をもたない。また、候補平面は法線ベクトル方向に移動させられる。候補平面を法線ベクトル方向に移動すると多角形の交点が発生する。その交点の個数を記録する（ステップ２５３  ）。
【０１８８】
ステップ２５４  で、多角形の交点の個数から局所最小点の位置を判別する。交点の位置を定義するデータをヒストグラムとする。局所最小点はヒストグラム内の一つの位置であり、その位置に対して平面を法線方向に移動させると交点数が増加する。実施例では、これらの局所最小点位置を候補多角形の分割面用のポテンシャル位置と考える。
【０１８９】
理想的な分割面は多角形を一つだけ分割させる。このような平面を識別できれば、それを即座に好適な分割面として採用する。ステップ２５５  で、たった一つの多角形に交差する候補平面に関して局所最小点位置があるかどうかを判断する。この判断の結果が肯定ならば、制御をステップ２５８  へ渡す。すなわち、選択された平面の周囲に対して分割を実行し、これによって、サイクルを破壊するのである。そして、手続きは図１２のステップ１３５  へ戻る。ステップ２５５  での判断の結果が否定ならば、局所最小点全部が一つより多くの多角形に交差するということなので、制御をステップ２５２  へ戻し、別の候補平面を選択する。
【０１９０】
ステップ２５５  での判断の結果が肯定になるまで、候補平面毎にステップ２５２  〜２５５  を繰返す。その結果、分割が発生する。さもなければ、ステップ２５２  での判断の結果が否定になる。
【０１９１】
ステップ２５２  での判断の結果が否定になると、候補平面各々の局所最小点を互いに比較し、最下位の局所最小点をもつ平面を選択する（ステップ２５６  ）。最下位の局所最小点がゼロに等しいならば、丸め誤差からサイクルを検出できる。すなわち、丸め誤差のないサイクルが判別される。この場合、分割するものは何もないので、制御を図１２のステップ１３５  へ渡す。
【０１９２】
最下位の局所最小点がゼロに等しくない場合、制御をステップ２５８  へ渡し、選択された平面に対して分割を実行する。その後、サイクルを破壊した後、制御をステップ１３５  へ渡す（図１２）。
【０１９３】
ステップ２５６’で、局所最小点があるかどうかを判断する。判断の結果が否定ならば、サイクルを破壊する別の手続きが、図２１に詳細に示すように起動される。
【０１９４】
図２１において、ステップ２６１  で多角形をＰ１と見なす。この多角形は、概念的な観察軸方向に最も遠くまで広がる多角形である。サイクル内に存在する多角形の中でＰ１は、サイクル内の他のどの多角形よりも先に予備リストに設定された多角形である。多角形Ｐ１の概略を図２２に示す。
【０１９５】
ステップ２６２  で、多角形Ｐ２を判別する。多角形Ｐ２は、多角形Ｐ１を遮れる多角形である。この多角形も図２２に認識される。
【０１９６】
ステップ２６３  で、多角形Ｐ２に実際に遮られた多角形Ｐ１の断片を判別する。ステップ２６４  で、ステップ２６３  で判別された多角形の断片が多角形Ｐ１全体に該当するかどうかを判断する。すなわち、多角形Ｐ１全体が実際には多角形Ｐ２によって遮られているかどうかを判断する。判断の結果が肯定ならば、制御をステップ２６５  へ渡す。そして、次に最も遠くまで広がる多角形があるかどうかを判断する。判断の結果が肯定ならば、制御をステップ２６１  へ戻し、最も遠くまで広がる次の多角形を選択し新しいＰ１とする。
【０１９７】
各多角形が全体的に別の多角形によって遮られることは殆ど有り得ないが、有り得ない事態が起こったとき、ステップ２６５  での判断の結果は否定になる。その結果、制御をステップ２６６  へ渡し、サイクルを破壊できないという趣意を表示する。そして、制御をステップ１３５  へ戻する。
【０１９８】
ステップ２６４  での判断の結果が否定ならば、断片は多角形Ｐ１全体より小さいということなので、制御をステップ２６７  へ渡す。そして、多角形Ｐ２によって遮られた多角形Ｐ１の断片はサイクル内の次の多角形を遮るかどうかを判断する。
【０１９９】
図２２に示す例では、多角形Ｐ２によって遮られた多角形Ｐ１の断片は多角形Ｐ３を遮らない。この場合、ステップ２６７  での判断の結果は否定になる。そうしたら、多角形Ｐ１を分割して断片と残りの部分とにし（ステップ２６８  ）、これによって、サイクルを破壊し、制御をステップ１３５  へ戻す。
【０２００】
ステップ２６７  での判断の結果が肯定ならば、多角形Ｐ２によって遮られた断片は多角形Ｐ３を遮るということなので、多角形Ｐ１の断片と残りの部分への分割はサイクルの破壊には到らない。しかし、この分割によって他の処理でサイクルを破壊し易くなる。従って、分割によって断片や残りの部分が非常に小さくなることがなければ、分割は実行する価値がある。
【０２０１】
ステップ２６７  での判断の結果が肯定ならば、制御をステップ２６９  へ渡す。そして、多角形の残りの部分の面積（Ｐ１−断片）が究極の親多角形の面積を３  で除した商より大きいかどうかを判断す。究極親多角形は、予備リストに存在する根元の多角形であり、子ではない多角形である。
【０２０２】
ステップ２６９  での判断の結果が肯定ならば、残りの部分は究極親多角形の面積を３  で除した商より大きいということなので、ステップ２７０  で分割を実行し制御をステップ２６１  へ戻す。そして、別の多角形Ｐ１を選択する。
【０２０３】
ステップ２６９  での判断の結果が否定ならば、残りの部分は小さいということなので、分割を実行しても何も達成されないと判断する。この場合、制御をステップ２６６  へ戻し、サイクルを破壊できないという意味で肯定応答をする。その後、制御をステップ１３５  へ戻す。
【０２０４】
図２３は、内部メモリ装置に対してデータの読み書きを行うプロセッサ３１５  が配置された対話式三次元図形システムを示す。メモリ装置に格納されたデータは三次元画像データと二次元画像データとプロセッサへの指令とを定義する。
【０２０５】
プロセッサ３１５  は入力装置からデータを入力し、手動キーボード３１６  とマウスやトラックボール３１７  やデジタルタブレット／スタイラスなどの位置検出装置とで構成される。
【０２０６】
二次元画像は可視表示装置（ＶＤＵ）３１８上に表示される。可視表示装置３１８  は、フレームバッファをラスタで走査することによって映像速度で出力画像データを受信する装置で、専用表示器を備えている。可視表示装置３１８  が提供できる精細度は、例えば、画素１０００個に対応する走査線を１０００本という形式で表現される。従って、１，０００，０００  個の画素に対応する領域をもつフレームバッファが必要である。プログラムデータと画像データとの一括転送を実行するために、ハード磁気ディスクや光ディスクや光テープドライブなどの大容量記憶装置３１９  が設けられている。
【０２０７】
フロッピーディスク３２０  やＣＤ  ＲＯＭなどの取り外し可能記憶装置を使用して画像データ及び／あるいはプロセッサ命令を格納してもよい。画像信号は、ＶＤＵ３１８に出力されて画像を表示し、フレームバッファやプロセッサ３１５  から取出されて送信もしくは格納される。例えば、ビデオカセット記録器３２２  を接続して、取り外し可能ビデオカセット３２４  に生成された画像を記録する。
【０２０８】
図２４を参照して、一般的なシステムの操作法について説明する。プロセッサ３１５  は異なる時刻に異なる多数の処理を実行して、内部メモリに格納されたプログラムを走行させる。プロセッサ３１５  は、（内部メモリの外に）その処理を行う手段４０２  〜４１０  を備えている。これらの手段を図２４に図示する。本実施例においては、これらの手段は全部プロセッサ３１５  によって実現される。しかし、別のプロセッサや専用論理回路を相互接続して各々の機能を果たすようにも構成できる。
【０２０９】
システムは、第一に動画化される三次元の被写体の形状を定義し、選択的に被写体を編集するために配置された定義器すなわちエディタ４０２  で構成される。通常、定義器４０２  は大容量記憶装置３１９  と３２０  に接続され、定義された被写体を格納して後に使用できるようにする。また、エディタ４０２  は入力装置３１６  と３１７  に接続され、オペレータが三次元の被写体を変更できるようにする。その他の入出力装置（例えば、ネットワークを介して接続される他のコンピュータ）を追加してもよいし、入力装置３１６  と３１７  および大容量記憶装置３１９  と３２０  の代わりに用いてもよい。次に詳細に説明するが、本実施例においては、三次元被写体を定義するデータとは、被写体を構成する複数個の多角形表面（通常、連続する多角形表面）の頂点を表現するデータである。頂点のみを定義するだけで、多数の画素をもつ表面を比較的小さくしかも被写体の画像が再生される際の解像度に左右されずに表現できる。
【０２１０】
プロセッサ３１５  は、更に、他の領域を遮る領域を最後に描出するという描出順序（すなわち、フレームバッファ４１２  に表出する順序）を決定する順位に従って被写体の表面あるいは領域を分類するという初期処理を実行するための手段４０４  を備えている。分類器４０４  は、定義器４０２  によって定義された被写体データを読取り、後に使用される領域の分類リストを生成し、その後、被写体を描出し動画化する。
【０２１１】
表示器３１８  などの二次元画面上に表示された被写体やフレームバッファ４１２  に格納された画像データは、被写体が観察される方向に依存する。しかも、被写体と表示器３１８  の平面に対応する概念的な観察点との間の距離にも依存するかもしれない。プロセッサ３１５  は、オペレータが入力装置３１７  を使って（例えば、観察点の座標および／もしくは方向を定義することによって）観察方向すなわち方向と距離とを定義できるようにする視野制御手段４０６  を備えている。一度に一つづつ観察点を定義するのではなく、入力手段３１７  を使って、例えば、連続的に表出される画像を動画化するのに充分な移動方向と速度とを設定することによって連続する観察点の軌道すなわち観察方向を規定する。観察方向および／もしくは距離を定義するデータは、被写体と表示器３１８  の概念的な平面（概念的な観察点）との間の相対的な距離と方向とを規定する。また、被写体が一つだけ表示されている場合、問題なのは被写体と画面との間の相対的な傾きだから、上記のデータを使って被写体の位置と向きあるいは画面の位置と向きを規定する。一方、相互に規定された位置に存在する多数の被写体を描出する場合、視野コントローラ４０６  は、一度に一つの被写体に対して視野位置か新しい位置かを規定し、一つの被写体を単独で移動できるか視野を被写体全部に対して移動できることが好ましい。
【０２１２】
表示器３１８  に対応する観察面に関して被写体の相対的な向きを規定し終えると、プロセッサ３１５  は、必要なデータを使って投影手段４０８  が各三次元被写体を（領域毎に）二次元観察面に投影できるようにする。投影器４０８  によって投影された二次元観察面領域は、その領域を着色する（すなわち、その領域内の画素に対応するフレームバッファ領域に予め設定された色値を割当てる）ための表出器４１０  によって分類器４０４  が先に定義した順序で表出される。外側か（前向きの）被写体の方へ向いている領域だけを表出することが必要である。表出器４１０  は、各領域を試験して投影面上でその領域が向いている方向を判定する。領域全部を表出しフレームバッファ３１８  に対応する画像データを書込み終ると、視野コントローラ４０６  は必要ならば観察点を更新する。観察点が変更されると、投影器４０８  と表出器４１０  とが各々のプロセスを前述のように再実行する。
【０２１３】
図２３と２４に示すシステム内の手段４０２  〜４１０  は、被写体の新しい視野が表示される度に作動する必要のあるもの（手段４０６  、４０８  および４１０  ）と実際に必要な視野に関係なく作動できるもの（手段４０２  と４０４  ）との二つのグループに分類される。当業者ならば、この二つのグループの内で機能毎に分類して機能ブロックを作成して、その機能ブロックを様々な形態に実現できることが認識されよう。
【０２１４】
プロセッサ３１５  の対話プロセス段階４０６  〜４１０  における操作手順について背景に触れながら簡単に述べる。視野コントローラ４０６  は制御されて観察変換を定義する。観察変換は、被写体の頂点が規定された「世界」座標系に観察点を関係づける。局所変換と観察変換とが終了すると、実際に見える被写体の広がりを判定することによって被写体選別を実行する。広がりは、次元毎に被写体に対して規定される。すなわち、最高値と最低値とが、被写体に対してＸ  軸、Ｙ  軸およびＺ  軸の各々について決定される。Ｘ  軸、Ｙ  軸およびＺ  軸方向の広がりが一定の平面から成る立方体の境界箱を画定すれば、このプロセスを容易に実行できる。境界箱は観察空間へ変換され、変換された境界箱の位置が着目され、境界箱が観察可能な空間内に完全に入っているか、観察可能空間から完全に外れているか、観察可能空間に交差しているどうかが判断される。
【０２１５】
被写体が観察可能空間から完全に外れている場合、その被写体を画定する多角形に対しては何も処理を施さない。このため、処理時間は顕著に低減される。観察空間内に完全に入っている被写体の場合、多角形に対する処理は進み、処理時間の低減は行われない。しかし、境界箱を変換するための処理オーバヘッドは極めて僅かである。一部が観察可能空間内にあり一部が観察可能空間外にある被写体の場合、交差面を定義するデータを格納して多角形の切抜きを行い易くする。
【０２１６】
反復毎に一意に時刻を刻むクロックが設けられている。この刻時は、光源か被写体かの位置が変わる度に適用される。前回の反復期間から今回の反復期間までの間に、照明の位置や向きあるいは多角形の位置に変化が生じなかったことが分かれば、先回の反復期間中に算出された照明パラメータ値を再使用する。
【０２１７】
局所変換は、被写体を被写体自体の空間から世界空間へ変換する。光源の位置に逆変換を施して光源を被写体空間へ変換することによって、照明パラメータ値を求める。すなわち、被写体空間で照明パラメータ値を算出する。そして、連結マトリックスに基づいて被写体自体の空間から直接観察空間へ被写体を変換する。
【０２１８】
このように連結局所変換と視野変換を実現して、被写体の幾何学的構造を観察空間へ変換する。
【０２１９】
観察空間内に存在しない多角形は切抜かれる。このプロセスを実行するために、被写体選別で発生した追加情報が使用される。
【０２２０】
三次元画像データを二次元画像データへ変換し、背面選別を実行する。走査変換を施す。このプロセスは、１画素当りのビット数が８  しかないというフレームバッファの限定容量によって制限される。その後、ビデオ速度でフレームバッファをラスタ走査して、二次元ビデオ画像を作成する。
【０２２１】
上記の方法が三次元画像生成の前処理段階で実現されているが、その中の少なくともいくつかの方法を対話段階に使用できることは当業者には明白である。例えば、電子図形システムは、周知の通り、前処理なしで多角形を分類して対話を通して設定される観察位置単位に表出順序リストを作成する。このように、本発明は本書に記載の実施例に限定されない。
【発明の効果】
以上説明したように本発明によれば、３次元空間上に定義されたオブジェクトを陰面除去等も踏まえて表出する処理を行うに際し、的確に陰面除去を行うことが可能である。
【図面の簡単な説明】
【図１】三次元対話式図形環境の各段階を示す図、
【図２】被写体を構成する多角形の位置を定義する形状ファイルの構造を示す図、
【図３】図２に示された形状ファイルを読む手続きを示す図、
【図４】概念的な観察方向と境界面とを示す図、
【図５】分割面の位置を算出するステップと、視野を調節するステップと、目に見えない多角形を除去するステップと、予備リストを作成するステップと、表出順序リストを作成するステップとから成る表出順序リストの準備段階を示す図、
【図６】図５に示す分割面の位置の算出に係わるステップを詳細に示す図、
【図７】図５に示す視野の調節手続きを詳細に示す図、
【図８】図５に示す可視性試験手続きを詳細に示す図、
【図９】図５に示す予備リストの作成手続きを詳細に示す図、
【図１０】親多角形を分割して子多角形を作成するときの多角形データ構成を示す図、
【図１１】予備リストの多角形を選択して表出順序リストあるいはツリー上にそれらの多角形を設定するための手続きであって、現行本命多角形によって遮られる候補多角形を判別しようとするステップを含む手続きを詳細に示す図、
【図１２】予備リストの多角形を選択して表出順序リストあるいはツリー上にそれらの多角形を設定するための手続きであって、現行本命多角形によって遮られる候補多角形を判別しようとするステップを含む手続きを詳細に示す図、
【図１３】図１１に示す現行本命多角形が遮れる候補多角形を判別するための手続きを詳細に示す図、
【図１４】図１３に示す現行本命多角形が候補多角形を遮れるかどうかを確認するための手続きを詳細に示す図、
【図１５】図１４に示す現行本命多角形が候補多角形を遮れるかどうかを確認するための更なる手続きを詳細に示す図、
【図１６】図１４に示す現行本命多角形が候補多角形を遮れるかどうかを確認するための更なる手続きを詳細に示す図、
【図１７】多角形二個から成るサイクルを破壊するための図１１Ｂ  に示す手続きを詳細に示し、二個より多くの多角形をもつサイクルを破壊するための手続きを示す図、
【図１８】図１７に示す手続きについて図解する図、
【図１９】図１７に示す二個より多くの多角形をもつサイクルを分割するための手続きを詳細に示す図、
【図２０】二個より多くの多角形をもつサイクルを分割するための更なる手続きを詳細に示す図、
【図２１】二個より多くの多角形をもつサイクルを分割するための更なる手続きを詳細に示す図、
【図２２】図２１に詳細に示された手続きについて図解する図、
【図２３】対話式三次元図形環境を提供するシステムについて図解する図、
【図２４】対話式三次元図形環境を提供するシステムについて図解する図。
【符号の説明】
４１  球体
４２  原点
４３  概念的な観察軸
４４  区画
４５  水平分割面
４６  第一の垂直分割面
４７  第二の垂直分割面
【図１】
0003542372.tif 000002
【図２】
0003542372.tif 000003
【図３】
0003542372.tif 000004
【図４】
0003542372.tif 000005
【図５】
0003542372.tif 000006
【図６】
0003542372.tif 000007
【図７】
0003542372.tif 000008
【図８】
0003542372.tif 000009
【図９】
0003542372.tif 000010
【図１０】
0003542372.tif 000011
【図１１】
0003542372.tif 000012
【図１２】
0003542372.tif 000013
【図１３】
0003542372.tif 000014
【図１４】
0003542372.tif 000015
【図１５】
0003542372.tif 000016
【図１６】
0003542372.tif 000017
【図１７】
0003542372.tif 000018
【図１８】
0003542372.tif 000019
【図１９】
0003542372.tif 000020
【図２０】
0003542372.tif 000021
【図２１】
0003542372.tif 000022
【図２２】
0003542372.tif 000023
【図２３】
0003542372.tif 000024
【図２４】
0003542372.tif 000025