(57)【要約】  基底曲面に基づいて生成されるトリム面を含む物体の形状を表示する表示処理方法は、基底曲面を三角形分割する工程と、トリム面の外形を定義するための外ループと物体の形状に応じて外ループ内に設けられる内ループとを含むループについて、ループ多角形を生成する工程と、視点と基底曲面との位置関係に基づき、投影面への写像が全単射であるという条件を満たし且つ三角形を複数含む、基底曲面上の領域である視線一価領域を特定する工程と、視線一価領域毎に、表示すべきか否かを制御する画素毎のデータであるマスクデータを、当該視線一価領域とループ多角形とから生成する工程と、三角形の各々について、投影面上の画像データを生成する工程と、マスクデータと画像データとから描画処理を実施する工程とを含む。
2012073363.tif 000002
【特許請求の範囲】
【請求項１】
基底曲面に基づいて生成されるトリム面を含む物体の形状を表示する表示処理方法であって、
前記基底曲面を三角形分割して、生成された三角形のデータをデータ格納部に格納するステップと、
前記トリム面の外形を定義するための外ループと前記物体の形状に応じて前記外ループ内に設けられる内ループとを含むループについて、ループ多角形を生成し、生成されたループ多角形のデータを前記データ格納部に格納するステップと、
視点と前記基底曲面との位置関係に基づき、投影面への写像が全単射であるという条件を満たし且つ前記三角形を複数含む、前記基底曲面上の領域である視線一価領域を特定し、当該視線一価領域のデータを前記データ格納部に格納する視線一価領域特定ステップと、
前記視線一価領域毎に、表示すべきか否かを制御する画素毎のデータであるマスクデータを、当該視線一価領域と前記データ格納部に格納されている前記ループ多角形とから生成し、マスクデータ格納部に格納するマスクデータ生成ステップと、
前記データ格納部に格納されている前記三角形の各々について、前記投影面上の画像データを生成し、前記データ格納部に格納する画像データ生成ステップと、
前記マスクデータ格納部に格納されている前記マスクデータと前記データ格納部に格納されている画像データとから描画処理を実施するステップと、
を含み、コンピュータにより実行される表示処理方法。
【請求項２】
前記視線一価領域特定ステップが、
前記基底曲面内の各三角形について、前記視点に対しておもて面か裏面かを判定し、前記データ格納部に格納するステップと、
おもて面と判定され且つ連結している複数の三角形を含むおもて面辺連結体と、裏面と判定され且つ連結している複数の三角形を含む裏面辺連結体とを特定するステップと、
をさらに含む請求項１記載の表示処理方法。
【請求項３】
前記視線一価領域特定ステップが、
前記おもて面辺連結体及び前記裏面辺連結体のいずれかである辺連結体の境界と前記視点とを通る直線により、前記辺連結体を分割して面分を生成するステップ
をさらに含む請求項２記載の表示処理方法。
【請求項４】
前記視点一価領域特定ステップが、
生成された前記面分を、前記視点から見て重ならず且つ隣接する面分の集まりに分けて連結するステップ、
をさらに含む請求項３記載の表示処理方法。
【請求項５】
前記視線一価領域特定ステップが、
前記おもて面辺連結体及び前記裏面辺連結体のいずれかである辺連結体の境界をある平面に投影して、当該ある平面上の境界を単調区間に分割するステップと、
前記単調区間が２以下であるか判断するステップと、
を含む請求項１記載の表示処理方法。
【請求項６】
前記視線一価領域特定ステップが、
前記単調区間が３以上である場合には、前記単調区間同士の交点に対応する、前記辺連結体の境界上の点である第１の点を特定するステップと、
前記第１の点を含む、前記辺連結体の境界上のセグメントを、前記視線を通る直線で前記辺連結体上に投影することで、前記辺連結体を分割して面分を生成する面分生成ステップと、
をさらに含む請求項５記載の表示処理方法。
【請求項７】
前記視線一価領域特定ステップが、
前記辺連結体が表裏境界を有する場合には、当該表裏境界と、前記第１の点を含む、前記辺連結体の境界上のセグメントを、前記視線を通る直線で前記辺連結体上に投影することで得られる線分とが接する第２の点を特定するステップ
をさらに含み、
前記面分生成ステップにおいて、前記第２の点も前記第１の点のように前記辺連結体の分割に用いる
請求項６記載の表示処理方法。
【請求項８】
前記視線一価領域特定ステップが、
生成された前記面分から、前記第１の点を含む境界上の点に基づき、前記視点から見て重なる面分の組を特定するステップと、
前記面分の組に含まれる各面分が異なるグループに属するように、生成された前記面分を隣接関係に基づき分類し結合するステップと、
をさらに含む請求項６又は７記載の表示処理方法。
【請求項９】
前記マスクデータ生成ステップが、
前記データ格納部に格納されている前記ループ多角形のうち外ループについてのループ多角形である外ループ多角形と前記視線一価領域との集合積である外ループ集合積を生成し、前記データ格納部に格納するステップと、
前記データ格納部に格納されている前記ループ多角形のうち内ループについてのループ多角形である内ループ多角形と前記視線一価領域との集合積である内ループ集合積を生成し、前記データ格納部に格納するステップと、
前記データ格納部に格納されている前記外ループ集合積内部の各点に相当する、前記投影面上の画素のマスクデータを、当該画素を表示すべきことを表すように設定する表示設定ステップと、
前記データ格納部に格納されている前記内ループ集合積内部の各点に相当する、前記投影面上の画素のマスクデータを、当該画素を表示すべきでないことを表すように設定するステップと、
を含む請求項１乃至８のいずれか１つ記載の表示処理方法。
【請求項１０】
前記基底曲面全体が前記視線一価領域であることが保証される、空間内のボリュームを決定し、当該ボリュームのデータを前記データ格納部に格納するステップ
をさらに含み、
前記視線一価領域特定ステップが、
前記視点が前記ボリューム内に含まれるか判断するステップと、
前記視線が前記ボリューム内に含まれると判断された場合には、前記基底曲面に含まれる全ての前記三角形を連結した領域を前記視線一価領域として特定するステップと、
を含む請求項１記載の表示処理方法。
【請求項１１】
前記マスクデータ生成ステップの前に、前記外ループと前記基底曲面の外周とが一致するか判断するステップと、
前記外ループと前記基底曲面の外周とが一致し、且つ前記基底曲面全体が前記視線一価領域である場合、前記データ格納部に格納されている前記三角形の各々について、前記投影面上の画像データを生成し、当該画像データにより描画処理を実施するステップと、
をさらに含む請求項１乃至１０のいずれか１つ記載の表示処理方法。
【請求項１２】
請求項１乃至１１のいずれか１つ記載の表示処理方法をコンピュータに実行させるためのプログラム。
【請求項１３】
基底曲面に基づいて生成されるトリム面を含む物体の形状を表示する表示処理装置であって、
前記基底曲面を三角形分割して、生成された三角形のデータをデータ格納部に格納する三角形分割部と、
前記トリム面の外形を定義するための外ループと前記物体の形状に応じて前記外ループ内に設けられる内ループとを含むループについて、ループ多角形を生成し、生成されたループ多角形のデータを前記データ格納部に格納するループ多角形生成部と、
視点と前記基底曲面との位置関係に基づき、投影面への写像が全単射であるという条件を満たす前記三角形を複数含む、前記基底曲面上の領域である視線一価領域を特定し、当該視線一価領域のデータを前記データ格納部に格納する視線一価領域処理部と、
前記視線一価領域毎に、表示すべきか否かを制御する画素毎のデータであるマスクデータを、当該視線一価領域と前記データ格納部に格納されている前記ループ多角形とから生成し、マスクデータ格納部に格納するマスクデータ生成部と、
前記データ格納部に格納されている前記三角形の各々について、前記投影面上の画像データを生成し、前記データ格納部に格納する画像データ生成部と、
前記マスクデータ格納部に格納されている前記マスクデータと前記データ格納部に格納されている画像データとから描画処理を実施する描画処理部と、
を有する表示処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、表示装置に物体を表示するための表示処理技術に関する。
【背景技術】
【０００２】
例えばＣＡＤ（Computer Aided Design）においては、精密に物体を表現するために、物体はトリム面の集まりとして表現されることが多い。このトリム面（trimmed surface）は、図８９に示すように、基底曲面（base surface）１００１又はその拡張曲面を、閉じた自己交差しない面上線である外ループ（outer loop）１００２で囲われた領域であって、その内部の閉じた面上線である内ループ（inner loop）１００３及び１００４で囲われた領域を除外することによって生成される図形である。但し、内ループ１００３及び１００４は存在しない場合もある。また、特殊なケースとして基底曲面の境界と外ループが一致するケースもある。【０００３】
ＣＡＤシステムのコンピュータでは、内部に蓄えられたトリム面の集まりにより形成される物体表面の情報と視点や照明条件などの表示条件とを与えて、トリム面画像の集まりとして物体形状を表示する。【０００４】
なお、トリム面という用語は、サーフェスモデラが主流であった時代から使用されているが、トリム面間の連結関係を表すデータである位相情報（topological information）を保有するか否かにかかわらず使用される。トリム面間の連結関係を表すデータを有するソリッドモデラの場合には、トリム面はフェース（面分（Face））と言う用語が対応する。【０００５】
ＣＡＤで生成されたトリム面は、基底曲面を表現する曲面や面上線の曲線の形式では画面上に表示することはできない。そこで，図８９のトリム面を図９０に示すような三角形の集まりに近似（テッセレーション（tessellation）又は三角化（triangulation）という）して、各三角形を表示し、隠面処理はＺバッファを用いることによってトリム面の表示を実現する従来技術が知られている。トリム面のテッセレーションでは、基底曲面のパラメタ一定線と面上線を線分列に近似することと、両者の交点を参照して三角形分割がなされることが特徴であり、トリム面のテッセレーションは大きな計算時間を要するのが問題となっている。【０００６】
これに対して、このようなトリム面を表示するコンピュータグラフィックスシステムには、以下のようなマスク（mask）を使用する従来技術が存在しており、本発明はこれに関連してなされたものである。すなわち、従来技術ではテッセレーションの技法に基づいて、基底曲面を三角形分割し、トリム曲線が三角形のいずれかと交差するか判断する。そして、交差が生じる場合には、当該三角形とトリム曲線との交点を計算し、その交差状況に基づき、トリム面内部が表示されるようにするマスクバッファを生成する。マスクバッファには、画素（pixel）毎に、表示画面上において当該三角形内の対応する画素を表示させる場合にはマスクオフの意味で「１」を設定し、表示させない場合にはマスクオンの意味で「０」を設定する。三角形分割で生成された三角形を表示画面上に表示する場合には、三角形内の全ての画素について画素値を算出するが、当該画素のマスクの値が「１」であれば表示画面上に表示し、マスクの値が「０」であれば表示画面上に表示しない。この表示処理を全ての３角形について繰り返す。なお、公開された従来技術では負論理を採用してマスクオフを「１」、マスクオンを「０」としているが、システム構築に当たっては正論理を採用してマスクオフを「０」、マスクオンを「１」としても問題ない。【０００７】
このようなマスクを用いる従来技術でも、トリム面のテッセレーションの技法を用いるので三角形毎にトリム曲線との交差を判断せざるを得ず、三角形の数が多い場合には、多くの交差計算を行うため、過大な計算時間を要するという問題がある。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特許第３３４４５９７号公報
【特許文献２】特開平４−２８９９８４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
従って、本技術の目的は、一側面において、トリム面を高速に表示するための技術を提供することである。
【課題を解決するための手段】
【００１０】
本技術は、一側面において、基底曲面から生成されるトリム面を含む物体の形状を表示する表示処理方法であって、（Ａ）基底曲面を三角形分割して、生成された三角形のデータをデータ格納部に格納するステップと、（Ｂ）トリム面の外形を定義するための外ループと物体の形状に応じて外ループ内に設けられる内ループとを含むループについて、ループ多角形を生成し、生成されたループ多角形のデータをデータ格納部に格納するステップと、（Ｃ）視点と基底曲面との位置関係に基づき、投影面への写像が全単射であるという条件を満たす三角形を複数含む、基底曲面上の領域である視線一価領域を特定し、当該視線一価領域のデータをデータ格納部に格納する視線一価領域特定ステップと、（Ｄ）視線一価領域毎に、表示すべきか否かを制御する画素毎のデータであるマスクデータを、当該視線一価領域とデータ格納部に格納されているループ多角形とから生成し、マスクデータ格納部に格納するマスクデータ生成ステップと、（Ｅ）データ格納部に格納されている三角形の各々について、投影面上の画像データを生成し、データ格納部に格納する画像データ生成ステップと、（Ｆ）マスクデータ格納部に格納されているマスクデータとデータ格納部に格納されている画像データとから描画処理を実施するステップとを含む。
【図面の簡単な説明】
【００１１】
【図１】図１は、第１の実施の形態に係る表示処理装置の機能ブロック図である。
【図２】図２は、視線一価領域を説明するための図である。
【図３】図３は、第１の実施の形態に係る処理フロー（前半）を示す図である。
【図４】図４は、三角形分割された基底曲面及びテッセレーションされたトリム面の一例を示す図である。
【図５】図５は、基底曲面の三角形分割を説明するための図である。
【図６】図６は、ループ多角形を説明するための図である。
【図７】図７は、第１の実施の形態に係る視線一価領域生成処理の処理フローを示す図である。
【図８】図８は、表裏判定内積を説明するための図である。
【図９】図９は、おもて面辺連結体及び裏面辺連結体を説明するための図である。
【図１０】図１０は、第１の実施の形態に係るマスクデータ生成処理の処理フローを示す図である。
【図１１】図１１は、おもて面辺連結体をスクリーン座標上に表した図である。
【図１２】図１２は、裏面辺連結体をスクリーン座標上に表した図である。
【図１３】図１３は、外ループ集合積を説明するための図である。
【図１４】図１４は、内ループ集合積を説明するための図である。
【図１５】図１５は、マスクデータの生成を説明するための図である。
【図１６】図１６は、マスクデータの生成を説明するための図である。
【図１７】図１７は、マスクデータの生成を説明するための図である。
【図１８】図１８は、マスクデータの生成を説明するための図である。
【図１９】図１９は、マスクデータの生成を説明するための図である。
【図２０】図２０は、マスクデータの生成を説明するための図である。
【図２１】図２１は、第１の実施の形態に係る処理フロー（後半）を示す図である。
【図２２】図２２は、シェーディングを説明するための図である。
【図２３】図２３は、投影されたループ集合積の三角形分割を説明するための図である。
【図２４】図２４は、投影されたループ集合積の三角形分割を説明するための図である。
【図２５】図２５は、三角形分割の一例を示す図である。
【図２６Ａ】図２６Ａは、画素走査法を説明するための図である。
【図２６Ｂ】図２６Ｂは、画素走査法で外ループと内ループとを同時に走査する場合の処理を説明するための図である。
【図２７】図２７は、襞が現れるが故に視線一価でない辺連結体を説明するための図である。
【図２８】図２８は、上方に向かう突起を有するが故に視線一価でない辺連結体を説明するための図である。
【図２９】図２９は、第２の実施の形態に係る表示処理装置の機能ブロック図である。
【図３０】図３０は、表示上重なりを生ずる基底曲面の一例を示す図である。
【図３１】図３１は、第２の実施の形態に係る処理フロー（前半）を示す図である。
【図３２】図３２は、第２の実施の形態に係る視線一価領域生成処理の処理フロー（前半）を示す図である。
【図３３】図３３は、第２の実施の形態に係る視線一価領域生成処理の処理フロー（後半）を示す図である。
【図３４】図３４は、起伏が存在するが故に複数のおもて面辺連結体又は複数の裏面辺連結体が生成される例を示す図である。
【図３５】図３５は、バッカス・ナウア記法で定義された、重合を考慮しない辺連結体を表すデータの一例を示す図である。
【図３６】図３６は、パラメタ空間中に表された図２７の辺連結体を示す図である。
【図３７】図３７は、パラメタ空間中に表された図２８の辺連結体を示す図である。
【図３８】図３８は、重合線を説明するための図である。
【図３９】図３９は、図３８の辺連結体を投影面上に表した図である。
【図４０】図４０は、図３８の辺連結体をパラメタ平面上に表した図である。
【図４１】図４１は、襞が現れる物体の重合線を説明するための図である。
【図４２】図４２は、突起を有する物体の重合線を説明するための図である。
【図４３】図４３は、凹みを有する物体の重合線を説明するための図である。
【図４４】図４４は、バッカス・ナウア記法で定義された、重合を考慮した辺連結体を表すデータの一例を示す図である。
【図４５】図４５は、射影重合多角形生成処理の処理フローを示す図である。
【図４６】図４６は、重合点特定処理の処理フローを示す図である。
【図４７】図４７は、境界点列を単調区間に分割した一例を示す図である。
【図４８】図４８は、単調区間数を説明するための図である。
【図４９】図４９は、投影面上での単調区間の交差を説明するための図である。
【図５０】図５０は、単調区間の交点を示す図である。
【図５１】図５１は、自己交差点に対応する重合点を説明するための図である。
【図５２】図５２は、複比を用いた座標の算出を説明するための図である。
【図５３】図５３は、単調区間の交点を示す図である。
【図５４】図５４は、重合点の追加を説明するための図である。
【図５５】図５５は、重合点の追加を説明するための図である。
【図５６】図５６は、重合点の追加を説明するための図である。
【図５７】図５７は、特異点を説明するための図である。
【図５８】図５８は、特異点を説明するための図である。
【図５９Ａ】図５９Ａは、特異点の特定を説明するための図である。
【図５９Ｂ】図５９Ｂは、特異点の特定を説明するための図である。
【図５９Ｃ】図５９Ｃは、特異点の特定を説明するための図である。
【図６０】図６０は、特異点を説明するための図である。
【図６１】図６１は、第２の実施の形態に係る重合面分特定処理の処理フローを示す図である。
【図６２】図６２は、重合面分特定処理を説明するための図である。
【図６３】図６３は、セグメント端点の内外判定を説明するための図である。
【図６４】図６４は、交差する重合線の分割を説明するための図である。
【図６５Ａ】図６５Ａは、重合線の追加及び面分の分割を説明するための図である。
【図６５Ｂ】図６５Ｂは、重合面分の関係を説明するための図である。
【図６６】図６６は、３つの重合面分を示す図である。
【図６７】図６７は、回転数を説明するための図である。
【図６８Ａ】図６８Ａは、第２の実施の形態に係る視線一価領域確定処理の処理フローを示す図である。
【図６８Ｂ】図６８Ｂは、第２の実施の形態に係る単純な視線一価領域確定処理の処理フローを示す図である。
【図６９】図６９は、第２の実施の形態に係る視線一価領域確定処理を説明するための図である。
【図７０】図７０は、第２の実施の形態に係る視線一価領域確定処理を説明するための図である。
【図７１】図７１は、マスクデータ生成処理の処理フローを示す図である。
【図７２】図７２は、マスクデータ生成処理を説明するための図である。
【図７３】図７３は、第２の実施の形態に係る処理フロー（後半）を示す図である。
【図７４】図７４は、描画処理を説明するための図である。
【図７５】図７５は、視線一価確定ボリュームが存在しない基底曲面の一例を示す図である。
【図７６】図７６は、視線一価簡易判定処理の処理フローを示す図である。
【図７７】図７７は、確定ボリューム生成処理の処理フローを示す図である。
【図７８】図７８は、平面の視線一価確定ボリュームを説明するための図である。
【図７９】図７９は、視線一価確定ボリュームを表すデータの一例を示す図である。
【図８０】図８０は、円弧掃引体の判断条件を説明するための図である。
【図８１】図８１は、円弧掃引体の視線一価確定ボリュームを示す図である。
【図８２】図８２は、球面の判断条件を説明するための図である。
【図８３】図８３は、球面の視線一価確定ボリュームを示す図である。
【図８４】図８４は、自由曲面の確定ボリューム生成処理の処理フローを示す図である。
【図８５】図８５は、自由曲面の参照軸を説明するための図である。
【図８６】図８６は、自由曲面の視線一価確定ボリュームを示す図である。
【図８７】図８７は、簡易判定処理の処理フローを示す図である。
【図８８】図８８は、コンピュータの機能ブロック図である。
【図８９】図８９は、テッセレーションを行う前の基底曲面及びトリム面の一例を示す図である。
【図９０】図９０は、三角形分割された基底曲面及びテッセレーションされたトリム面の一例を示す図である。
【発明を実施するための形態】
【００１２】
［実施の形態１］
図１に、本実施の形態に係る表示処理装置の機能ブロック図を示す。本実施の形態に係る表示処理装置は、ＣＡＤシステムにより生成された３次元モデルデータを格納している３次元モデル格納部１０１と、３次元空間内の視点データや照明データ等を格納している表示条件格納部１０３と、三角形生成部１０５と、処理途中のデータ等を格納するデータ格納部１０７と、ループ多角形生成部１０９と、視線一価領域生成部１１１と、マスク生成部１１３と、マスクデータ格納部１１５と、画像データ生成部１１７と、描画処理部１１９とを有する。
【００１３】
三角形生成部１０５は、３次元モデル格納部１０１に格納されている基底曲面のデータ及び表示条件格納部１０３に格納されているデータから、基底曲面を分割して三角形データを生成し、データ格納部１０７に格納する。また、ループ多角形生成部１０９は、３次元モデル格納部１０１に格納されているトリム面のデータ及び表示条件格納部１０３に格納されているデータから、表示するモデルの詳細度に応じてトリム面の境界を近似したループ多角形のデータを生成し、データ格納部１０７に格納する。そして、視線一価領域生成部１１１は、データ格納部１０７に格納された三角形データ及び表示条件格納部１０３に格納されているデータを用いて、投影面への写像が全単射であるという条件を満たす視線一価領域のデータを生成し、データ格納部１０７に格納する。さらに、マスク生成部１１３は、データ格納部１０７に格納された視線一価領域の境界データ及びループ多角形のデータを用いてマスクデータを生成し、マスクデータ格納部１１５に格納する。また、画像データ生成部１１７は、データ格納部１０７に格納された三角形データ及び表示条件格納部１０３に格納されている視点や照明のデータを用いて画像データを生成し、データ格納部１０７に格納する。そして、描画処理部１１９は、データ格納部１０７に格納された画像データ及びマスクデータ格納部１１５に格納されたマスクデータを用いて描画処理を行う。
【００１４】
ここで、視線一価領域について説明する。まず、視線一価（sight-line single-valuedness）とは、画素と表示対象とが１：１に対応することである。すなわち、視線一価であるとは、表示対象から投影面への写像が全単射（bijective , or one-to-one onto）であることを意味する。図２の例では、基底曲面１１０１を視点に対して投影面１１０３上に投影する場合、点Ｐ及び点Ｑが点（画素）Ｘに対応する。従って、この視点から見た基底曲面１１０１は視線一価とは言えない。この場合、画素Ｘのマスク情報で点Ｐ及び点Ｑの表示状態を制御すると、表示において両者に矛盾を生ずる。よって、以下で述べるように基底曲面を分割すると共にマスクを用いた表示制御を行うことにより、トリム面１１０２上にある点Ｐを表示し、トリム面１１０２上にない点Ｑは表示抑制する。一方、表示対象全体が視線一価であれば、このような問題は生じない。ここでは、視線一価である領域を視線一価領域と呼ぶこととする。
【００１５】
次に、図３乃至図２６Ｂを用いて、図１に示した表示処理装置の処理内容について説明する。なお、３次元モデル格納部１０１にはトリム面の集まりとして表される３次元モデルデータが、表示条件格納部１０３には視点データや照明データ等が予め格納されているものとする。
【００１６】
図３は、本実施の形態における処理の流れ（前半）を示したものである。まず、三角形生成部１０５では、３次元モデル格納部１０１から３次元モデルとして表された物体の一部に係る基底曲面のデータを取得し、三角形分割の処理が行われる（図３：ステップＳ１）。本実施の形態では、図４に示した基底曲面及びトリム面を例にして説明する。本ステップでは、例えば図５に示すように分割される。生成される三角形は、ｕ，ｖパラメタ空間又は３次元空間における点として表現される。なお、図５では均等なパラメタを用いて三角形に分割した例を示しているが、均等な三角形でなくてもよいし、できるだけ正三角形に近いような三角形に分割しても問題ない。生成された三角形データは、データ格納部１０７に格納される。
【００１７】
より詳細には、まず、表示する３次元モデルの詳細度に基づいて基底曲面の分割数を決定する。詳細度は、例えば表示条件格納部１０３に格納されている視点データ及び近似許容差に基づいて動的に決定する。詳細度の決定は当業者によく知られた技術であり、例えばShawn P Austin et al., Comparison of Discretization Algorithms for NURBS Surfaces with Application to Numerically Controlled machining, CAD vol. 29 no.1 pp. 71-83や特許４４３７５０４号公報に記載されている。
【００１８】
分割数が決定されると、分割点のｕ，ｖパラメタが算出できる。そして、算出されたｕ，ｖパラメタから三角形の頂点の座標が算出できる。当該座標計算も当業者にはよく知られた幾何学計算であり、例えばGerald Farin; Curves and Surfaces for Computer Aided Geometric Design, 2nd Edition, Academic Press Inc.. CA, USA, 1990に記載されている。
【００１９】
以上の処理によって算出された頂点をｕ，ｖ方向に接続すると、基底曲面を格子状に分割する四辺形が得られる。そして、当該四辺形の対角を同じ向きに結ぶと、図５に示した格子対角三角形（lattice diagonal triangles）が生成される。格子対角三角形は、ｕ，ｖパラメタに対応付けられたテーブル状の点の集まりとして表現できる。すなわち、３次元空間又はパラメタ空間中の点を２次元配列で表現できる。格子対角三角形は頂点の特定が容易であり、また、行あるいは列の三角形ストリップを用いた分割三角形の走査が可能であるため、高速処理に有利である。以下、基底曲面を格子対角三角形に分割したものとして説明を行う。なお、三角形ストリップとは高々二つの辺が共有される三角形の連結体を意味するものとする。
【００２０】
次に、ループ多角形生成部１０９は、３次元モデル格納部１０１から基底曲面上のトリム面を形成する外ループ及び内ループのデータを取得し、当該外ループ及び内ループを表示するモデルの詳細度に応じて近似してループ多角形（Loop Polygon）を生成する（図３：ステップＳ３）。ここでは、図６に示すように外ループ多角形１２０１並びに内ループ多角形１２０２及び１２０３が生成される。なお、トリム面の形状によっては内ループが存在しない場合もある。ループ多角形は、多くの場合、３次元空間中の点列として表現されるが、曲線又は曲面のパラメタの列で表現することも可能である。生成されたループ多角形のデータは、データ格納部１０７に格納される。
【００２１】
本ステップでも、まず外ループ及び内ループを形成する幾何曲線の分割数を決定する。ステップＳ１と同様に、表示状態における視点と近似許容差に基づいて動的に決定するものであり、ステップＳ１において決定された詳細度を基準に分割数を決めるようにしてもよい。
【００２２】
分割数が計算されると、分割点の曲線パラメタ又は座標値が算出できる。これもステップＳ１と同様に、当業者にはよく知られた幾何学計算技術によって実現できる。ここでは、図６における各辺の接続点に相当する分割点も算出される。すなわち、ループ多角形は基底曲面の分割三角形とは独立に、表示するモデルの詳細度に応じてループを近似して生成される（図６白丸）。なお、従来技術では図４の黒丸で示されているようにループ上に分割三角形との交点が付加されるが、本技術では図４の黒丸は付加されない。
【００２３】
なお、一般的に、表示対象の３次元モデルは複数のトリム面によって形成される。すなわち、隣接するトリム面は外ループに係る一部の辺を共有する。共有される辺について既に分割点が計算済みであるならば、同一の分割点を採用するようにしてもよい。
【００２４】
その後、視線一価領域生成部１１１は、視線一価領域生成処理を実施する（図３：ステップＳ５）。この視線一価領域生成処理については、図７乃至図９を用いて説明する。なお、本実施の形態で処理対象とする図４に示した基底曲面は、おもて面辺連結体及び裏面辺連結体がそれぞれ視線一価となる。
【００２５】
図７は、本実施の形態における視線一価領域生成処理を示す処理フローである。まず、視線一価領域生成部１１１は、データ格納部１０７に格納されているステップＳ１（図３）で生成した三角形データ、及び表示条件格納部１０３に格納されている視点データを取得し、三角形データ毎に表裏判定を行う（図７：ステップＳ１１）。判定結果を示すデータについては、例えばデータ格納部１０７に一時的に保持しておく。ここでは、図８に示すように、視点から三角形へのベクトルＶと、向き付けられた三角形の法線ベクトルＮとの内積である表裏判定内積（side discriminative inner product）を算出し、当該内積が負の値であればおもて面であると判定する。
【００２６】
なお、本ステップは、処理対象をおもて面に限定するために実施するものではない。特別な処理対象の場合、例えばＷＯ００／００２１６５に記載された、閉じた曲面に限定される場合は裏面を処理対象から除外することが行われる。しかしながら、ＣＡＤという技術分野を主な対象とする場合、一般的に裏面も表示することが要求される。
【００２７】
そして、視線一価領域生成部１１１は、データ格納部１０７に格納された表裏判定の結果を示すデータを用いて、辺を共有するおもて面同士又は裏面同士を連結し、おもて面辺連結体及び裏面辺連結体を生成する（図７：ステップＳ１３）。また、視線一価領域生成部１１１は、例えばおもて面辺連結体及び裏面辺連結体の境界点列のデータをデータ格納部１０７に格納する。ここでは、図９に示すように、基底曲面を分割することにより得られる三角形を用いて、おもて面が視点を向いている領域（白色の領域）と裏面が視点を向いている領域（ハッチングが施された領域）とが生成される。
【００２８】
規則性を持たない一般的な分割三角形の場合には、１つの三角形からアドバンシングフロント法によっておもて面辺連結体及び裏面辺連結体を生成することができる。一方、基底曲面を格子対角三角形に分割した場合は、格子の列方向又は行方向の三角形ストリップを利用した走査によって高速に処理することができる。
【００２９】
その後、視線一価領域生成部１１１は、データ格納部１０７に格納されたおもて面辺連結体及び裏面辺連結体の各々を視線一価領域として特定する（ステップＳ１５）。図４に示した基底曲面の場合は、図９に示したおもて面辺連結体及び裏面辺連結体がそれぞれ視線一価領域と特定される。また、データ格納部１０７に格納されたおもて面辺連結体及び裏面辺連結体を表す境界点列に関連付けて、視線一価領域であることを示すデータを登録する。そして、視線一価領域生成処理を終了し、図３の処理に戻る。
【００３０】
図３（処理フロー前半図）の処理に戻り、マスク生成部１１３は、データ格納部１０７に格納されている未処理の視線一価領域を１つ取得する（ステップＳ７）。なお、基底曲面全体が視線一価領域の場合は、基底曲面全体が取得される。また、マスク生成部１１３は、データ格納部１０７からループ多角形のデータも取得しておく。そして、マスク生成部１１３は、マスクデータ生成処理を実施する（ステップＳ９）。このマスクデータ生成処理については、図１０乃至図２０を用いて説明する。
【００３１】
図１０のマスクデータ生成処理において、まず、マスク生成部１１３は、取得した視線一価領域及びループ多角形の座標をスクリーン座標に変換し、変換後の座標をデータ格納部１０７に格納する（図１０：ステップＳ３１）。本ステップでは、図９のおもて面辺連結体が処理対象の視線一価領域である場合、図１１のようにスクリーン座標上に変換される。また、図９の裏面辺連結体が処理対象の視線一価領域である場合、図１２のようにスクリーン座標上に変換される。
【００３２】
次に、マスク生成部１１３は、データ格納部１０７に格納されている視線一価領域及びループ多角形のデータを用いて、内ループ及び外ループとおもて面辺連結体又は裏面辺連結体との間の集合積であるループ集合積を生成し、データ格納部１０７に格納する（図１０：ステップＳ３３）。ここでは、視線一価領域並びにこれと交差する外ループ多角形及び内ループ多角形を入力として、外ループ集合積及び内ループ集合積を得る。ループ集合積は、例えば、視線一価領域の境界点列とループ多角形の境界点列との多角形集合演算（Polygon Clipping）により生成することができる。多角形集合演算の実現方法は周知の技術であり、例えばBala R. Vatti, A Generic Solution to Polygon Clipping, Communication of the ACM, July 1992 (vol. 35), pp.56-63に、走査線算法を用いて、和差積の種類に応じて交差による切断片を選択する例が記載されている。なお、ステップＳ３３等で行う集合演算は、パラメタ空間、実体空間、カメラ座標系及びスクリーン座標系のいずれでも行うことが可能である。本実施の形態では、スクリーン座標系を採用するものとする。
【００３３】
本ステップでは、処理対象の視線一価領域に対して、図１３に示すような外ループ集合積及び図１４に示すような内ループ集合積が得られる。図１３では、破線で外ループ集合積の外形が示されている。そして、視線一価領域１３０１（ハッチングあり）が処理対象の場合、外ループ集合積１３０２（ハッチングあり）が生成され、視線一価領域１３０３（ハッチングなし）が処理対象の場合、外ループ集合積１３０４（ハッチングなし）が生成される。また、図１４では、太い実線で内ループ集合積の外形が示されている。そして、視線一価領域１４０１（ハッチングあり）が処理対象の場合、内ループ集合積１４０２（ハッチングあり）が生成され、視線一価領域１４０３（ハッチングなし）が処理対象の場合、内ループ集合積１４０４（ハッチングなし）及び１４０５（ハッチングなし）が生成される。
【００３４】
そして、図１のマスク生成部１１３は、マスクデータ格納部１１５のマスクデータを、全ての画素についてＯＮに初期化する（図１０：ステップＳ３５）。なお、マスクデータは画素単位でＯＮ又はＯＦＦに設定され、ＯＮに設定された画素は描画処理が抑制され、ＯＦＦに設定された画素は描画処理が行われるものとする。
【００３５】
また、マスク生成部１１３は、データ格納部１０７に格納された外ループ集合積の境界データを用いて、外ループ集合積の内部に相当するマスクデータをＯＦＦに設定する（図１０：ステップＳ３７）。なお、ループ多角形の内部の画素を特定する方法として、ループ多角形の三角形分割による方法（投影多角形三角形分割法）や、ループ多角形の走査線による塗り潰しによる方法（画素走査線法）がよく知られているが、これらの詳細は後述する。本ステップでは、図１３の視線一価領域１３０１が処理対象の場合、図１５の外ループ集合積１５０１の内部に相当する領域のマスクデータがＯＦＦに設定される。また、図１３の視線一価領域１３０３が処理対象の場合、図１５の外ループ集合積１５０２の内部に相当する領域のマスクデータがＯＦＦに設定される。スクリーン座標上で表すと、図１５の外ループ集合積１５０１には、図１６に示すようにＯＦＦが設定され、図１５の外ループ集合積１５０２には、図１７に示すようにＯＦＦが設定される。
【００３６】
図１３乃至図１７に示されているように、ステップＳ３７の外ループ集合積の境界には、ループとおもて面辺連結体又は裏面辺連結体との間の交点以外付加されていない。これに対して従来法では、図４に示されているように、テッセレーションをそのまま用いる方法にせよ、特許文献２に記載されたマスクを用いる方法にせよ、ループと分割三角形との間の交点が多数付加される。本実施の形態では、交点を付加するための交点計算時間や、表示又はマスクデータ生成のための三角形分割生成等にかかる時間が大幅に削減される。ここに本技術の一つの効果が現れる。
【００３７】
さらにその後、図１のマスク生成部１１３は、データ格納部１０７に格納された内ループ集合積のデータを用いて、内ループ集合積の内部に相当するマスクデータをＯＮに設定する（図１０：ステップＳ３９）。なお、上でも述べたとおり、トリム面の形状によっては内ループが存在しない場合もある。内ループが存在しない場合、本ステップの処理は省略する。また、内ループ集合積の内部の画素を特定する方法としては、ステップＳ３７と同様に投影多角形三角形分割法や画素走査線法を用いることができる。本ステップでは、図１４の視線一価領域１４０１が処理対象の場合、図１８の内ループ集合積１６０１の内部に相当する領域のマスクデータがＯＮに設定される。また、図１４の視線一価領域１４０３が処理対象の場合、図１８の内ループ集合積１６０２及び１６０３の内部に相当する領域のマスクデータがＯＮに設定される。スクリーン座標上で表すと、図１８の内ループ集合積１６０１には図１９に示すようにＯＮが設定され、図１８の内ループ集合積１６０２及び１６０３には図２０に示すようにＯＮが設定される。そして、マスク生成部１１３は、未処理の内ループ集合積が存在するか判断し（図１０：ステップＳ４１）、存在する場合にはステップＳ３９の処理に戻る。ここでは、内ループの数だけステップＳ３９が繰り返される。一方、未処理の内ループ集合積が存在しない場合、マスクデータ生成処理を終了して図３の処理に戻り、端子Ａを介して図２１の処理に移行する。
【００３８】
なお、マスクデータを生成する処理は、ループ集合積の排他和によっても実現することができる。排他和を用いる例には、例えば特開平４−２８９９８４号公報がある。排他和を用いる場合は、マスクデータがＯＮの画素を表示しＯＦＦの画素を表示抑制するものとして、外ループ多角形及び内ループ多角形の内部をそれぞれＯＮに設定したデータを用いることで、本実施の形態に適用することができる。以上で図３（処理フロー前半図）の処理を終わり、図２１に進む。
【００３９】
図２１に本実施の形態の処理フロー（後半）を示す。画像データ生成部１１７は、データ格納部１０７から、基底曲面を分割することにより生成された三角形データのうち視線一価領域に含まれる未処理の三角形データを１つ取得する（図２１：ステップＳ２１）。そして、画像データ生成部１１７は、当該三角形の画像データを生成し、データ格納部１０７に格納する（ステップＳ２３）。ここでは、基底曲面を分割することにより生成され、データ格納部１０７に格納されている三角形データ、並びに表示条件格納部１０３に格納されている視点データ及び照明データを用いて、画像データを生成する。詳細には、処理対象の三角形を座標変換し、スクリーン座標上に表す。また、スクリーン座標上の各画素に対応する三角形上の点について視点からの距離を算出し、奥行き情報（Ｚ値）として保持しておき、Ｚバッファの値と比較することで隠面消去に利用する。そして、画素の色情報を、例えば図２２に示すフォン反射モデル（Phong reflection model）により算出する。なお、出力光強度は、次の式で計算される。ただし、ここでは環境光は省略されている。
【００４０】
Ｃ＝ＫdＬdcosθ＋ＫsＬs（cosα）k
なお、Ｃ＝出力光強度、Ｌd＝拡散反射（diffuse reflection）光強度、Ｋd＝拡散反射率（正、１未満）、Ｋs＝鏡面反射率（正、１未満）、θ＝法線方向と光源方向のなす角、α＝鏡面反射光と視点方向のなす角、ｋ＝光沢度（滑らかで鏡面反射に近いほど大きい）とする。
【００４１】
以上の処理により、画素の位置、Ｚ値及び色情報が算出される。その後、描画処理部１１９は、データ格納部１０７に格納された画像データとマスクデータ格納部１１５に格納されたマスクデータとを用いてフレームバッファへの描画処理を行う（図２１：ステップＳ２５）。ここでは、マスクデータがＯＦＦの画素に対して、当該画素について保持されているＺバッファの値とＺ値とを比較し、Ｚ値の方が視点側に近い場合、当該画素の色情報でフレームバッファを更新する。また、当該Ｚ値でＺバッファを更新する。一方、マスクデータがＯＮの画素については描画を行わない。
【００４２】
その後、画像データ生成部１１７は、視線一価領域内の三角形について未処理のものが存在するか判断し（図２１：ステップＳ２７）、未処理の三角形があれば、ステップＳ２１の処理に戻る。一方、未処理の三角形が存在しない場合、マスク生成部１１３は、未処理の視線一価領域が存在するか判断し（ステップＳ２９）、未処理の視線一価領域があれば、端子Ｂを介してステップＳ７の処理に戻る。一方、未処理の視線一価領域が存在しない場合、処理を終了する。
【００４３】
以上の処理により、１つのトリム面が描画される。表示対象の３次元モデル全体を描画するためには、３次元モデルを形成する複数のトリム面に対してこのような処理を行う。また、例えば視点の位置や角度の変更、表示対象の拡大縮小等に伴い、３次元モデル全体に対してステップＳ５（図３）以降の処理を再度実施する。なお、ステップＳ１又はステップＳ３で用いる詳細度が変化する場合は、ステップＳ１又はステップＳ３の処理も再度実施する。また、基底曲面を分割することにより生成された三角形やトリム面の境界を近似することにより生成されたループ多角形について詳細度に応じた点列のデータを保持しておき、再計算を省略できるようにしてもよい。
【００４４】
ここで、ステップＳ３７及びＳ３９（図１０）で行うマスクデータの生成について、より詳細に述べる。
【００４５】
（Ａ）投影多角形三角形分割法
本方法では、投影されたループ集合積の境界が形成する多角形を三角形分割し、各三角形の内部に相当する画素のマスクデータを、例えば外ループの場合はＯＦＦに内ループの場合はＯＮに設定する。投影面におけるループ集合積の境界を図２３に示すが、白丸はループの分割点若しくはループとおもて面辺連結体又は裏面辺連結体との間の交点である。すなわち、従来法とは異なりループと分割三角形との間の交点を求めないため、従来法に比べて高速な処理が可能になる。図２３に示すループ集合積が、例えば図２４のように分割される。多角形の三角形分割は、特にループ集合積が凸多角形であることが分かっている場合（例えばループが円であることをＣＡＤデータから知ることができた場合）、図２５に示すように、任意の頂点と他の頂点とを結ぶ扇形三角形に分割できるため高速に実現可能である。また、一般的な多角形の三角形分割の方法として、単調なｙ角形を用いるｎ角形に関する計算量オーダＯ（ｎlogｎ）の平面走査線算法（plane scan line algorithm）と、一つの頂点に隣接する二つの頂点を結んだ線分が他の辺と交差しない三角形チップを順次探索する計算量オーダＯ（ｎ2）の耳切法（ear clipping）とがよく知られている。なお、ｎ角形は（ｎ−２）個の三角形に分割される。例えば、前者に関しては、ドバークほか著  浅野哲夫訳コンピュータ・ジオメトリ  近代科学社に、また後者に関してはDavid Eberly, Triangulation by Ear Clipping, Geometric Tools, LLC, Last Modified: March 1, 2008 （http://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdfから２０１０年１１月取得可能）に詳細な記載がある。
【００４６】
代表的な上記の２つの三角形分割法では、平面走査線算法の方が高速である。平面走査線算法は、自己交差を有しない単純な多角形を単調なｙ角形に変換し、単調なｙ角形を三角形分割する。また、上記の平面走査線アルゴリズムは、内ループを有する場合にもそのまま適用することができる。すなわち、複数の閉じた点列から構成される多角形に対して同一の平面走査線算法を適用することができる。なお、内ループ及び外ループの辺の数の合計がｎ個、内ループの数がｍ個の場合、（ｎ−２＋２ｍ）個の三角形に分割される。
【００４７】
上記の走査線アルゴルズムを用いて、外ループ集合積及び内ループ集合積に関して同時にマスクデータを生成することができ、ステップＳ３７乃至ステップＳ４１を同時に実行するようにしてもよい。その処理速度は、内外別々に実行する場合に比べて大きな違いはない。
【００４８】
（Ｂ）画素走査法
本方法では、まず外ループ集合積の場合（ステップＳ３７）は、外ループ集合積の境界に対応する画素のマスクデータを例えばＯＦＦに設定する。図２６Ａの例では、境界点列上の画素のマスクデータがＯＦＦになる。その後、スクリーン座標上の画素を左から走査する。また、走査すると共に、マスクデータがＯＦＦの点列との（１からの）交点番号を算出し、当該交点番号が奇数である区間のマスクデータをＯＦＦに設定する。なお、例えば図２６Ａの黒丸のような極大極小点では交点番号を二つ設定する。図２６Ａに見るように、多角形内部の画素がＯＦＦになる。一方、内ループ集合積の場合（ステップＳ３９）は、（Ａ）投影多角形三角形分割法の場合と同様に、マスクデータをＯＮに設定する点が異なるのみである。
【００４９】
画素走査法の場合も、図２６Ｂに示すように外ループ集合積および内ループ集合積と走査線との交点番号を算出し、当該交点番号が奇数である区間のマスクデータをＯＦＦに設定することによって、ステップＳ３７乃至ステップＳ４１を同時に実行するようにしてもよい。
【００５０】
以上のような処理を行うことによって、視線一価領域ごとにマスクデータの生成処理及びトリム面の描画処理を行うことができる。なお、視線一価領域同士の重なりは、例えばＺバッファを用いた隠面消去により処理される。本実施の形態で例示した単純な物体であれば、上でも述べたとおり、おもて面が視点側を向いた領域と裏面が視点側を向いた領域とをそれぞれ視線一価領域であると判断する。そして、各視線一価領域に対し、トリム面上（外ループの内側且つ内ループの外側）か否かに基づいてマスクデータを生成する。マスクデータは、トリム面の近似点列（外ループ多角形及び内ループ多角形）と視線一価領域（おもて面辺連結体又は裏面辺連結体の境界点列）との集合演算により生成される。基底曲面を分割することにより得られた三角形毎にループ多角形との交点を求める場合と比較すると、本実施の形態ではループ多角形と三角形の各々との交差計算を行わないため、交差する三角形の数が多くなるほど処理負荷の軽減効果がある。
【００５１】
［実施の形態２］
実施の形態１の表示対象は、おもて面辺連結体及び裏面辺連結体がそれぞれ視線一価であったが、おもて面辺連結体又は裏面辺連結体が視線一価にならない場合もあり得る。図２７に示す「襞」が現れる例では、おもて面が視点側を向いた連続する面の一部に、図示された視点からは重なって見えない部分が存在する。なお、図２７において、黒丸は視点を表し、白丸は視線と基底曲面との交点を表している。また、ハッチングが施された領域は、裏面が視点側を向いており、裏面辺連結体となる。例えば、図示された視線を辿ると、まず手前のおもて面との交点が存在し、次に裏面との交点が存在し、最後に奥のおもて面との交点が存在する。すなわち、この基底曲面から生成されるおもて面辺連結体の投影面への写像は、全単射でない。
【００５２】
同様に、図２８に示す中央部に上方へ向かう突起がある例の場合も、図示された視点から見た場合におもて面同士の重なる部分がある。図２８では、一点鎖線でパラメタ一定線を示しており、図２８の基底曲面は中央が上に凸になった形状であることがわかる。なお、図２８においても、黒丸は視点を表し、白丸は視線と基底曲面の交点を表している。また、ハッチングが施された領域は裏面が視点側を向いており裏面辺連結体となる。図示された２つの視線はおもて面と裏面の境界及びおもて面を通るものであり、この基底曲面から生成されるおもて面辺連結体の投影面への写像も全単射でない。
【００５３】
本実施の形態では、視線一価でないおもて面辺連結体又は裏面辺連結体を視線一価領域に分割した上で、マスク生成処理及び描画処理を行う。
【００５４】
図２９に、本実施の形態に係る表示処理装置の機能ブロック図を示す。本実施の形態に係る表示処理装置は、ＣＡＤシステムにより生成された３次元モデルデータを格納している３次元モデル格納部１０１と、３次元空間内の視点データや照明データ等を格納している表示条件格納部１０３と、三角形生成部１０５と、処理途中のデータ等を格納するデータ格納部１０７と、ループ多角形生成部１０９と、簡易判定前処理部１２１と、視線一価領域生成部１２３と、マスク生成部１１３と、マスクデータ格納部１１５と、画像データ生成部１１７と、描画処理部１１９とを有する。また、簡易判定前処理部１２１を有しない場合もある。なお、実施の形態１と同様の処理を行う場合は、同じ符号を付してある。
【００５５】
三角形生成部１０５は、３次元モデル格納部１０１に格納されている基底曲面のデータ及び表示条件格納部１０３に格納されているデータから、基底曲面を分割して三角形データを生成し、データ格納部１０７に格納する。また、ループ多角形生成部１０９は、３次元モデル格納部１０１に格納されているトリム面のデータ及び表示条件格納部１０３に格納されているデータから、トリム面を近似したループ多角形のデータを生成し、データ格納部１０７に格納する。そして、簡易判定前処理部１２１は、３次元モデル格納部１０１に格納されている基底曲面のデータを用いて、当該基底曲面全体が視線一価となる視点であることが保証される座標の範囲を計算し、データ格納部１０７に格納しておく。また、視線一価領域生成部１２３は、データ格納部１０７に格納された三角形データ及び表示条件格納部１０３に格納されているデータを用いて、投影面への写像が全単射であるという条件を満たす視線一価領域のデータを生成し、データ格納部１０７に格納する。視線一価領域生成部１２３は、簡易判定前処理部１２１が計算したデータを用いて、基底曲面全体が視線一価となるか判断するようにしてもよい。さらに、マスク生成部１１３は、データ格納部１０７に格納された視線一価領域のデータ及びループ多角形のデータを用いてマスクデータを生成し、マスクデータ格納部１１５に格納する。また、画像データ生成部１１７は、データ格納部１０７に格納された三角形データ及び表示条件格納部１０３に格納されている視点や照明のデータを用いて画像データを生成し、データ格納部１０７に格納する。そして、描画処理部１１９は、データ格納部１０７に格納された画像データ及びマスクデータ格納部１１５に格納されたマスクデータを用いて描画処理を行う。
【００５６】
次に、図３０乃至図７４を用いて、図２９に示した表示処理装置の処理内容について説明する。本実施の形態でも、３次元モデル格納部１０１にはトリム面の集まりとして表される３次元モデルデータが、表示条件格納部１０３には視点データや照明データ等が予め格納されているものとする。また、本実施の形態では、図３０に示すような基底曲面を処理対象の例として説明する。なお、図示された黒丸は視点を表し、白丸は視線と基底曲面との交点を表している。視点から見た図３０の基底曲面は、全体がおもて面であるが、一部は交差して重なっている。
【００５７】
図３１は、本実施の形態における処理フロー（前半）である。まず、三角形生成部１０５は、３次元モデル格納部１０１から３次元モデルとして表された物体の一部に係る基底曲面のデータを取得し、三角形分割を行う（図３１：ステップＳ５１）。また、生成された三角形データは、データ格納部１０７に格納される。本ステップの処理は、実施の形態１のステップＳ１（図３）の処理と同様である。ここでは、図３０に示した基底曲面が三角形分割される。
【００５８】
次に、ループ多角形生成部１０９は、３次元モデル格納部１０１から基底曲面上のトリム面を形成する外ループ及び内ループのデータを取得し、当該外ループ及び内ループを近似してループ多角形を生成する（図３１：ステップＳ５３）。生成されたループ多角形のデータは、データ格納部１０７に格納される。本ステップの処理は、ステップＳ３と同様である。本実施の形態では、図３０に示した基底曲面全体がトリム面であるものとして説明する。
【００５９】
その後、視線一価領域生成部１２３は、視線一価領域生成処理を実施する（ステップＳ５５）。この視線一価領域生成処理については、図３２乃至図６５Ｂを用いて説明する。
【００６０】
まず、視線一価領域生成部１２３は、視線一価簡易判定処理（オプション）を実施する（図３２：ステップＳ６１）。本ステップでは、基底曲面全体が視線一価であるか簡易判定する。当該視線一価簡易判定処理の内容については、後で説明する。そして、視線一価領域生成部１２３は、基底曲面全体が視線一価領域であるか判断する（図３２：ステップＳ６３）。例えば、ステップＳ６１において簡易判定フラグを設定しておき、本ステップでは当該簡易判定フラグに基づいて処理を分岐させる。
【００６１】
基底曲面全体が視線一価領域であると判断された場合、視線一価領域生成部１２３は、基底曲面全体が視線一価領域であることを示すデータを設定する（図３２：ステップＳ６５）。ここでは、ステップＳ５１（図３１）で生成された三角形からおもて面辺連結体又は裏面辺連結体を生成し、当該おもて面辺連結体又は裏面辺連結体の境界点列を表すデータをデータ格納部１０７に格納すると共に、視線一価領域であることを示すデータを登録する。その後、端子Ｆを介して図３３の処理へ移行し、視線一価領域生成処理を終了して図３１の処理に戻る。
【００６２】
一方、基底曲面全体が視線一価領域でない場合、端子Ｅを介して図３３の視線一価領域生成処理（後半）へ移行する。なお、図３２において破線で示したステップＳ６１乃至ステップＳ６５の処理は必須でない。これらの処理を行わずに、端子Ｅを介して図３３の視線一価領域生成処理（後半）に移行してもよい。
【００６３】
図３３の視線一価領域生成処理（後半）に移行して、視線一価領域生成部１２３は、データ格納部１０７に格納されているステップＳ５１（図３１）で生成した三角形データ、及び表示条件格納部１０３に格納されている視点データを取得し、三角形データ毎に表裏判定を行う（図３３：ステップＳ７１）。本ステップの処理は、ステップＳ１１（図７）と同様である。ここでは、図３０に示した基底曲面全体がおもて面であると判定されたものとする。
【００６４】
そして、視線一価領域生成部１２３は、データ格納部１０７に格納された表裏判定の結果を示すデータを用いて、辺を共有するおもて面同士又は裏面同士を連結し、おもて面辺連結体及び裏面辺連結体を生成する（図３３：ステップＳ７３）。また、視線一価領域生成部１２３は、例えばおもて面辺連結体及び裏面辺連結体の境界点列のデータをデータ格納部１０７に格納する。本ステップの処理は、ステップＳ１３（図７）と同様である。ここでは、図３０に示した基底曲面全体から１つのおもて面辺連結体が生成されたものとする。
【００６５】
なお、図３４に示すような起伏のある形状では、１つの基底曲面から複数のおもて面辺連結体又は複数の裏面辺連結体が生成されることもある。図３４では、ハッチングが施された中央の領域は黒丸で示した視点に対して裏面を向いており、裏面辺連結体となる。そして、その両側の白色の２つの領域は視点に対しておもて面を向いており、おもて面辺連結体となる。
【００６６】
ここで、おもて面辺連結体及び裏面辺連結体の境界点列表現について具体例を挙げておく。図２８に示した中央部に上方へ向かう突起を有する基底曲面では、おもて面（おもて面が視点側を向いた領域）の内側に裏面（裏面が視点側を向いた領域）が存在する。このように、基底曲面に凹凸がある場合、おもて面に囲われた裏面や裏面に囲われたおもて面が現れることがある。このおもて面と裏面との境界を表裏境界と呼ぶこととし、図２８のように閉じた表裏境界を閉表裏境界と呼ぶこととする。また、例えば図２８の外周のように、基底曲面の境界に相当する、おもて面辺連結体又は裏面辺連結体の境界を曲面境界と呼ぶこととする。一方、図２７に示した基底曲面の表裏境界のように、曲面境界上の２点を結ぶ表裏境界を、開表裏境界と呼ぶこととする。
【００６７】
おもて面辺連結体及び裏面辺連結体の境界は、曲面境界、閉表裏境界及び開表裏境界により表すことができる。また、曲面境界、閉表裏境界及び開表裏境界は、基底曲面を分割することにより得られた三角形の頂点の集まり（点列，polyline）として表現することができる。
【００６８】
従って、おもて面辺連結体及び裏面辺連結体は、例えば図３５のように、文脈自由文法の構文を表現するバッカス・ナウア（Backus-Naur）記法を用いて表現することができる。ここで、境界点列は、例えばｕ，ｖパラメタ平面上で反時計回りになるような順序で表すものとする。ここで、図３５のφは空であることを表す記号である。なお、図２８のように、おもて面辺連結体又は裏面辺連結体が他の裏面辺連結体又はおもて面辺連結体を包含する場合、前者は後者を再帰的に用いて表現することができる。このような包含を表す関係情報の生成は、外側の境界点列から内側の各境界点列への並列型のポインティングでも実現できるし、外側の境界点列から内側の境界点列及び内側の境界点列間を関連付ける直列型のポインティングでも実現可能である。保持されるデータは、ソリッドモデリングにおける例えばウイングドエッジ構造等と同型であり、当業者には公知の技術である。なお、図３５に示したデータ構造は、重合（後述）を考慮しない状態に対応しており、実施の形態１においても採用することができる。また、後に重合を考慮した段階で、図３５に示したデータ構造は図４４に示すデータ構造に拡張される。
【００６９】
図２７及び図２８に示した基底曲面から生成されるおもて面辺連結体をパラメタ平面上に模式的に表すと、図３６及び図３７のようになる。図３６のおもて面辺連結体は、細線で表された曲面境界１７０２と曲面境界１７０２上の２点を結ぶ太線で表された開表裏境界１７０１とで形成され、境界点列として表される。なお、図示した黒丸は開表裏境界点であり、白丸は曲面境界点である。図３７のおもて面辺連結体は、細線で表された曲面境界１７０４と曲面境界１７０４の内部に存在する太線で表された閉表裏境界１７０３とで形成され、境界点列として表される。なお、図示した黒丸は閉表裏境界点であり、白丸は曲面境界点である。また、閉表裏境界１７０３は、おもて面辺連結体に囲われた裏面辺連結体の境界点列として表される。ステップＳ７３（図３３）では、おもて面辺連結体又は裏面辺連結体を表すデータとして、このような境界点列データを格納するものとする。
【００７０】
辺連結体などの表現方法の説明から処理の説明に戻り、視線一価領域生成部１２３は、データ格納部１０７から未処理のおもて面辺連結体又は裏面辺連結体を１つ取得する（図３３：ステップＳ７５）。ここでは、図３０に示した基底曲面全体から生成された１つのおもて面辺連結体が取得されたものとする。そして、視線一価領域生成部１２３は、射影重合多角形生成処理を実施する（ステップＳ７７）。この射影重合多角形生成処理については、図４５乃至図５６を用いて説明する。
【００７１】
射影重合多角形生成処理では、おもて面辺連結体又は裏面辺連結体の一部に視線一価でない部分がある場合、おもて面辺連結体又は裏面辺連結体を複数の視線一価領域に分割する。具体的には、曲面境界又は表裏境界に沿って走査しつつ、当該曲面境界又は表裏境界をおもて面辺連結体又は裏面辺連結体上に射影した線分の集まりである重合線（superposition polyline）を特定し、当該重合線でおもて面辺連結体又は裏面辺連結体を分割する。
【００７２】
例えば、図３０の基底曲面から生成されたおもて面辺連結体の場合は、図３８に示すように重合線１８０１乃至１８０４が特定される。そして、ハッチングが施された手前の面と奥の面とが異なる視線一価領域に属するように、おもて面辺連結体が分割される。なお、このように視点から見たときに重なる手前の面と奥の面とを重合面（superposition faces）と呼ぶこととする。また、図３８のおもて面辺連結体は、例えば投影面上では図３９のように表すことができ、パラメタ平面上では図４０のように表すことができる。図３９において、点ｖ1乃至ｖ4、辺ｅ1乃至ｅ4及び面ｆ1は手前に、点ｖ1＊乃至ｖ4＊、辺ｅ1＊乃至ｅ4＊及び面ｆ1＊は奥に存在するものとし、重なった点、辺及び面は、パラメタ平面上では図４０に示すように対応する。
【００７３】
なお、図２７の基底曲面の場合は、図４１に示すように重合線１９０１及び１９０２が特定される。図４１では、裏面辺連結体に対してハッチングが施されている。そして、黒丸を視点として、おもて面辺連結体上に表裏境界線を射影すると、重合線１９０１及び１９０２が特定される。
【００７４】
また、図２８の基底曲面の場合は、図４２に示すように重合線２００１が特定される。図４２でも、裏面辺連結体に対してハッチングが施されている。そして、黒丸を視点として、おもて面辺連結体上に表裏境界線を射影すると、重合線２００１が特定される。
【００７５】
さらに、図４３に基底曲面の中央が凹になり且つ凹部の先が黒丸で示した視点から見えるような形状の例を示す。図４３でも裏面辺連結体に対してハッチングが施されており、基底曲面内部に表裏境界線を有する。また、おもて面辺連結体上に表裏境界線を射影すると、曲面境界と接する重合線２１０１及び閉表裏境界に接する重合線２１０２が特定される。
【００７６】
図３５に示した境界点列データのデータ構造に対して重合線及び重合面を表すデータを追加したデータ構造の一例を、拡張バッカス・ナウア記法を用いて図４４に示す。この例では、おもて面辺連結体又は裏面辺連結体を視線一価となる面分に分割し、視点を基準とした前後関係を表す情報等も保持させるようになっている。
【００７７】
図４５に示す射影重合多角形生成処理に入り、視線一価領域生成部１２３は、処理対象のおもて面辺連結体又は裏面辺連結体を例えば投影面に射影し、射影境界点列のデータをデータ格納部１０７に格納する（図４５：ステップＳ９１）。ここでは、おもて面辺連結体又は裏面辺連結体の境界点列に対して射影行列（射影変換行列）を作用させ、投影面上の境界点列を算出する。上でも述べたとおり、図３９に示すような投影面上の境界点列が算出される。なお、投影面の代わりに、視点を含まない平面であれば異なる平面を用いることができる。
【００７８】
そして、視線一価領域生成部１２３は、重合点特定処理を実施する（図４５：ステップＳ９３）。この重合点特定処理については図４６乃至図５６を用いて説明する。
【００７９】
視線一価領域生成部１２３は、重合点を計算する。この計算は、セグメントの組の総当たり計算でも求めることができるが、例えば次のような工程を踏むと効率がよい。すなわち、ステップＳ９１（図４５）で求めた射影境界点列を例えば反時計回りに任意の点から走査し、ｘ座標の値が単調増加若しくは単調減少する区間、又はｙ座標の値が単調増加若しくは単調減少する区間に分割し、分割後の境界点列を表す情報をデータ格納部１０７に格納する（図４６：ステップＳ１０１）。例えば、図３９に示したおもて面辺連結体をｙ座標の値が単調増加する区間又は単調減少する区間で分割すると、図４７のようになる。図４７では、上下方向をｙ軸方向として、ｙ座標の値が単調増加する区間（すなわち減少しない区間）と、ｙ座標の値が単調減少する区間（すなわち増加しない区間）とに分割されている。なお、黒丸で示したｖa乃至ｖdは区間の端点であり、単調区間数は４である。
【００８０】
そして、以下のように重合点の有無の簡易判定を行うと処理効率がよい。すなわち、視線一価領域生成部１２３は、ステップＳ１０１で分割したｘ軸方向又はｙ軸方向の単調区間数が２以下であるか判断する（ステップ１０３）。単調区間数が２以下の場合、視線一価領域生成部１２３は、重合点特定処理を終了し、図４５の射影重合多角形生成処理に戻る。
【００８１】
ここで、図４８は、ｙ座標の値についての単調区間が２であり、且つ射影境界点列が交差する形状を示している。なお、黒丸は単調区間の境界を示している。図４８のように、もしも区間数が２であって投影面上で射影境界点列が交差するとすれば、そもそもその表示対象はおもて面辺連結体又は裏面辺連結体でない。すなわち、おもて面辺連結体又は裏面辺連結体の場合、単調区間数が２以下であれば、境界点列は投影面上で交差せず全体が視線一価であると判断できる。
【００８２】
一方、ｘ軸方向又はｙ軸方向の単調区間数が２より大きい場合、視線一価領域生成部１２３は、単調区間の未処理の組合せをデータ格納部１０７から取得する（ステップＳ１０５）。本ステップでは未処理の単調区間の組合せを１組取得し、後のステップにおいて処理対象の単調区間同士が投影面上で交差するか判断する。
【００８３】
次に、視線一価領域生成部１２３は、処理対象の組合せに係る単調区間が投影面上で交差するか判断する（図４６：ステップＳ１０７）。ここでは、各単調区間中の隣り合う射影境界点間の線分であるセグメント同士を順次突き合わせ処理する。なお、セグメントの端点で隣り合うセグメント同士は接続されるが、本ステップでは当該端点について交差しているとは判断しない。また、同一単調区間中のセグメント同士が交差することはない。
【００８４】
図４９の例では、例えば単調区間ｖaｖbと単調区間ｖcｖdとの組合せについて処理を行う場合、ｖa及びｖcを起点としてセグメント同士の突合せ処理を行う。例えば、ｙ座標の値でソートされたセグメントについてマッチング処理を行えば、例えばセグメントの全ての組合せについて交差判定を行うよりも処理効率がよい。具体的には、まずセグメントｖaｖa1とセグメントｖcｖc1との組合せについて交差判定し、交差しないと判断される。次に、セグメントｖa1ｖa2とセグメントｖcｖc1との組合せについて交差判定し、交差しないと判断される。そして、セグメントｖa1ｖa2及びセグメントｖc1ｖc2、セグメントｖa2ｖa3及びセグメントｖc1ｖc2・・・と順次交差判定し、セグメントｖa3ｖa4及びセグメントｖc1ｖc2が交差すると判断される。その後、セグメントｖa7ｖb及びセグメントｖc2ｖdの組合せまで交差判定を行い、単調区間の本組合せについてステップＳ１０７の処理が完了する。
【００８５】
単調区間が交差しない場合、処理はステップＳ１１７（図４６）に移行する。一方、単調区間が交差する場合、視線一価領域生成部１２３は、投影面上の交点座標を算出する（図４６：ステップＳ１０９）。ここでは、図５０に白丸で示す交点が特定されたものとする。このような投影面上の交点を、以下では自己交差点（self-intersection point）と呼ぶことにする。
【００８６】
そして、視線一価領域生成部１２３は、重合点を算出する。例えば、当該自己交差点座標を、セグメントのパラメタ座標に変換し、空間座標に変換することによって算出する（ステップＳ１１１）。ここでは、図５０に白丸で示した自己交差点の座標から、図５１に白丸で示すようなパラメタ平面上の２つの座標ｖ1及びｖ1＊が特定される。なお、このような自己交差点に対応する境界点列上の２点を重合点と呼ぶこととする。
【００８７】
具体的には、複比保存則を用いて投影面上の座標をセグメントのパラメタ座標に変換する。すなわち、図５２に示すように、セグメントの両端点を０及び１とするパラメタｔが定める直線上の４点の複比と、投影面に射影された４点の複比とが不変であるという性質を利用して、パラメタ座標ｔへの変換を行う。なお、複比の算出には４点を用いるため、通常一点不足するのでセグメントの端点や交点に加えて、例えばセグメントの中点などの補助の射影点も用いる。以上のような処理により、基底曲面を分割することにより得られた三角形上に、投影面上の点を射影することができる。このような基底曲面（基底曲面を分割することにより得られた三角形）への射影を、以下では曲面射影と呼ぶこととする。
【００８８】
その後、視線一価領域生成部１２３は、視点から交点座標に対応する２点への３次元空間内の距離を算出する（図４６：ステップＳ１１３）。ここでは、ステップＳ１１１で求めた重合点の座標を用いて、視点からｖ1及びｖ1＊への３次元空間での距離を算出する。そして、視線一価領域生成部１２３は、投影面上の交点に対応する２点を境界点列上に追加する。ここで、視点から見た重なりの前後を示す識別子を付与し（ステップＳ１１５）、後の重合面分取得順序設定に利用できるようにしてもよい。重合点及び識別子のデータは、例えば図４４に示した構造の境界点列データに追加され、データ格納部１０７に格納される。対応する重合点は、視点からの距離を基に境界点列データのリスト構造を辿ることで特定できる。図５１の例では、対応する２つの重合点のうち視点から遠い方の点に「＊」が付されており、図４４に示したデータ構造では、「視点側頂点」又は「反視点側頂点」といった順序情報として登録される。また、重合点等により分割された境界点列の一部又は重合線の点列の一部を、部分境界点列と呼ぶこととする。
【００８９】
そして、ステップＳ１０７（図４６）においてセグメントが交差しないと判断された場合、又はステップＳ１１５の後、視線一価領域生成部１２３は、セグメントの未処理の組合せが存在するか判断する（ステップＳ１１７）。未処理の組合せが存在しない場合、重合点特定処理（図４６）を終了して図４５の射影重合多角形生成処理に戻る。一方、未処理の組合せが存在する場合、ステップＳ１０５の処理に戻る。ステップＳ１０５乃至ステップＳ１１７の処理を繰り返すことにより、図５３に示す投影面上の交点が特定され、図５４に示す重合点ｖ1乃至ｖ4及びｖ1＊乃至ｖ4＊が追加される。
【００９０】
ここで、重合点特定処理と図４４に示した境界点列データのデータ構造との関係について述べておく。重合点特定処理を実施する前の境界点列データは、図４４に示したデータ項目のうち、ソリッドモデリングにおける頂点に対応する重合点等を表す情報、エッジに対応する部分境界点列を表す情報、フェースに対応する面分を表す情報等を有していない。これに対して、境界点列データにおいて重合点が付加されると、部分境界点列及び面分が追加される。図５５を用いてパラメタ平面上に示すと、重合点ｖ1が付加されると、破線で範囲を示した部分境界点列ｂ1及び実線で囲われた面分ｆ1が追加される。また、部分境界点列ｂ1には接続される面分ｆ1が１つ対応するため、位相情報として部分境界点列と面分との接続情報が保持される。そして、図５６に示すように、対応する重合点ｖ1＊が境界点列にさらに付加されると、部分境界点列ｂ1及びｂ2の２つに分割される。このとき、境界点列データにおいて、部分境界点列ｂ1と面分ｆ1との接続情報は変更されず、分割された部分境界点列ｂ2と面分ｆ1との接続情報が追加される。このような重合点追加の位相処理は、ソリッドモデリングにおけるエッジ分割処理に相当し、当業者には公知の技術である。
【００９１】
図４５の射影重合多角形生成処理に戻り、視線一価領域生成部１２３は、データ格納部１０７に格納されたおもて面辺連結体又は裏面辺連結体の境界点列データを基に、処理対象の辺連結体に重合点が存在するか判断する（図４５：ステップＳ９５）。なお、重合点が存在しなければ、処理対象のおもて面辺連結体又は裏面辺連結体は視線一価である。重合点が存在しない場合、射影重合多角形生成処理を終了し、図３３の視線一価領域生成処理（後半）に戻る。
【００９２】
一方、重合点が存在する場合、視線一価領域生成部１２３は、データ格納部１０７に格納されたおもて面辺連結体又は裏面辺連結体のデータから、表裏境界上の特異点を探索する（図４５：ステップＳ９７）。ここで、表裏境界線と重合線とが接する点を特異点（singularity point）と呼ぶこととする。すなわち、特異点とは、視点から重なって見える表裏境界線及び重合線のうち、手前に存在する線分と奥に存在する線分とが１点に縮退した点である。図５７に、図２７の基底曲面のうちおもて面辺連結体を投影面上に表した模式図を示す。なお、ハッチングが施された領域は重合面を示している。図５７の例では、ｖ13が特異点であり、ｖ11及びｖ11＊が重合点である。また、図５７は図５８のようにパラメタ平面上に表すことができ、境界点列ｖ11ｖ12ｖ13ｖ11＊と、重合線ｖ11＊ｖ12＊ｖ13ｖ11とが、ｖ13１点で接している。
【００９３】
次に、特異点を特定するための処理について説明する。まず、特異点では、表裏境界上の１頂点から当該１頂点に隣接する２つの頂点へ至るベクトルと視線ベクトルとが形成する２つの平面の各々が、当該表裏境界上の１頂点を含み隣接する２頂点を含まない三角形と交差する。ステップＳ９７では、表裏境界上の点列を走査し、このような条件を満たす点を探索する。
【００９４】
ここで、特異点に関する条件について図５９Ａ乃至図５９Ｃを用いて説明する。図５９Ａ乃至図５９Ｃにおいて、Ｐ1、Ｐ2、Ｐ3、Ｐ11、Ｐ12及びＰ13は、基底曲面を分割することにより生成された三角形の頂点を表している。また、Ｐ1、Ｐ2及びＰ3は表裏境界上の点であり、Ｐ11、Ｐ12及びＰ13は辺連結体内部の点である。また、ハッチングが施された三角形Ｘ1及びＸ2は、表裏境界上の１点Ｐ2を含み、Ｐ2に隣接する２点Ｐ1及びＰ3を含まない三角形である。なお、点Ｑは視点を表している。
【００９５】
ステップＳ９７（図４５）では、表裏境界上の点列を走査し特異点を探索する。図５９Ａでは、太線で示された表裏境界線上の点Ｐ1、Ｐ2及びＰ3が上で述べた条件を満たすか判断する。Ｐ2が処理対象であるとき、まず、図５９Ｂに示すように、視点Ｑから点Ｐ2へのベクトルとＰ2から隣接する点Ｐ1へのベクトルとが形成する第１の平面が、三角形Ｘ1又はＸ2と交差するか判断する。ここでは、交線１８０１で交差するものとする。また、図５９Ｃに示すように、視点Ｑから点Ｐ2へのベクトルと、Ｐ2から隣接する点Ｐ3へのベクトルとが形成する第２の平面が、三角形Ｘ1又はＸ2と交差するか判断する。ここでは、交線１８０２で交差するものとする。このように、２つの平面がそれぞれ条件を満たす場合、点Ｐ2は特異点であると判断される。なお、図５９Ａ乃至図５９Ｃは、例えば図５７及び図５８における点ｖ13周辺を拡大したものに相当し、図５９Ａ乃至図５９Ｃの点Ｐ2は図５７及び図５８の点ｖ13に相当する。
【００９６】
なお、おもて面辺連結体の内側に裏面辺連結体が存在する図２８に示したような場合も、図５９Ａ乃至図５９Ｃを用いて説明した条件に基づいて特異点を探索することができる。また、中心部に上方へ凸な形状を有する場合の図６０に示すように、特定された特異点は、表裏境界線と重合線（太い実線）との接点である。また、データ格納部１０７に格納された境界点列データに対し、特異点であることを示す識別子を付与する。そして、特異点により、部分境界点列はさらに２つの部分境界点列に分割されるものとする。なお、この特異点追加の位相処理はソリッドモデリングにおけるエッジ分割処理に相当し、当業者には公知の技術である。
【００９７】
その後、視線一価領域生成部１２３は、重合面分特定処理を実施する（図４５：ステップＳ９９）。この重合面分特定処理で図６１の処理フローに進む。その処理については、図６１乃至図６７を用いて説明する。
【００９８】
重合面分特定処理では、重合点又は特異点から境界点列を走査して、おもて面辺連結体又は裏面辺連結体の内部に射影される重合線を特定し、当該重合線により辺連結体を分割する。そして、分割された面分のうち投影面上で重なる重合面分に対し対応関係を登録する。
【００９９】
図６１に重合面分特定処理の処理フローを示す。まず、視線一価領域生成部１２３は、データ格納部１０７に格納された境界点列データから重合点又は特異点を端点とする未処理のセグメントを１つ取得する（図６１：ステップＳ１２１）。図６２に示す例では、重合点ｖ1を端点とするセグメントｖ1ｘが取得されたものとする。そして、視線一価領域生成部１２３は、取得したセグメントが例えば投影面上においておもて面辺連結体又は裏面辺連結体の内部に射影されるか判断する（ステップＳ１２３）。ここでは、セグメントの一端である重合点又は特異点とは反対側の端点が、投影面においておもて面辺連結体又は裏面辺連結体の内部に射影されるか判定する。具体的には、図６３に示すように、投影面に射影された表裏境界点ｖ1及びｖ2と、曲面境界点ｗ1及びｗ2と、自己交差点ｘと、おもて面辺連結体の法線ベクトルｎとを用いて、以下に示す式（１）の値が正であれば、ｖ2がおもて面辺連結体の内部に存在すると判断する。
【数１】
2012073363.tif 000003
【０１００】
辺連結体内部へ射影されない場合、処理はステップＳ１３５（図６１）へ移行する。一方、辺連結体内部へ射影される場合、視線一価領域生成部１２３は、処理対象のセグメントの曲面射影を行う（ステップＳ１２４）。図６２を用いてパラメタ平面上に表すと、ステップＳ１２４において、セグメントｖ1ｘは重合線ｖ1＊ｘ＊として辺連結体内部へ射影される。そして、視線一価領域生成部１２３は、射影された重合線が他の重合線と交差するか判断する（ステップＳ１２５）。図６２の例では、他の重合線とは交差しないと判断される。交差しない場合、ステップＳ１２９の処理に移行する。一方、交差する場合、視線一価領域生成部１２３は、データ格納部１０７に格納された境界点列データにおいて重合線の点列の交点に重合点を追加し、当該重合点で重合線を分割する（ステップＳ１２７）。
【０１０１】
ここで、例えば図６４に示すように、重合線同士が交差する場合がある。図６４の例では、既に重合線・・・ｐ25ｐ26ｐ27ｐ28・・・が射影されており、新たに重合線ｖ21ｐ21ｐ22ｐ23ｐ24が射影されたものとする。その後、重合線ｐ23ｐ24が射影され、ステップＳ１２５において交差判定が行われると、既に存在する重合線と交差したと判断される。そして、ステップＳ１２７（図６１）において、データ格納部１０７の境界点列データにおいて重合線の部分境界点列に交点ｑ21が追加されると共に、部分境界点列はさらに・・・ｐ25ｐ26ｑ21、ｑ21ｐ27ｐ28・・・及びｖ21ｐ21ｐ22ｐ23ｑ21に分割される。また、その後に射影されるｑ21ｐ24ｐ25ｖ22も部分境界点列としてデータ格納部１０７の境界点列データに登録される。なお、ｆ1乃至ｆ4は、部分境界点列によって分割された面分を表しており、このような面分のデータも後の処理で登録される。
【０１０２】
ステップＳ１２５（図６１）で他の重合線と交差しないと判断された場合、又はステップＳ１２７の後、視線一価領域生成部１２３は、処理対象のセグメントが他の重合点又は特異点に到達したか判断する（ステップＳ１２９）。ここでは、ステップＳ１２１で取得されたセグメントの重合点又は特異点を起点として、ここまでの処理で基底曲面へ射影されたセグメントの他端が重合点又は特異点であるか判断する。具体的には、データ格納部１０７に格納されている境界点列データを参照し、セグメントの他端を表す点に重合点及び特異点を表す識別子が登録されているか判断する。
【０１０３】
重合点又は特異点に到達していない場合、視線一価領域生成部１２３は、ステップＳ１２１（図６１）で取得されたセグメントの重合点又は特異点を起点として、ここまでの処理で射影されたセグメントの他端に隣接するセグメントの曲面射影を行う（ステップＳ１３１）。その後、処理はステップＳ１２４へ戻る。図６２の例では、ステップＳ１２９において、初めに取得されたセグメントｖ1ｘの端点ｘは重合点又は特異点でないと判断され、ステップＳ１３１において隣接するセグメントｘｖ2が取得された後、ステップＳ１２４において重合線ｘ＊ｖ2＊が射影される。
【０１０４】
一方、重合点又は特異点に到達した場合、視線一価領域生成部１２３は、重合線及び重合面分を表すデータを、おもて面辺連結体又は裏面辺連結体を形成する面分としてデータ格納部１０７に登録する（図６１：ステップＳ１３３）。図６２の例では、セグメントｘｖ2が射影された後、ステップＳ１２９において重合点ｖ2に到達したと判断され、ステップＳ１３３において重合線を表す部分境界点列及び部分境界点列により表される面分のデータが登録される。
【０１０５】
なお、生成された重合線は辺連結体を形成する面分を分割し、２つの面分への接続情報を有する。また、部分境界点列は向きが同調するように保持され、面分を形成する。重合線を追加する位相処理は、ソリッドモデリングにおけるフェース分割処理に相当し、当業者には公知の技術である。
【０１０６】
その後、視線一価領域生成部１２３は、重合点又は特異点を端点とする未処理のセグメントが存在するか判断する（図６１：ステップＳ１３５）。存在する場合、ステップＳ１２１の処理に戻る。一方、未処理のセグメントが存在しない場合、視線一価領域生成部１２３は、データ格納部１０７に格納された境界点列データを基に対応する重合面分を特定し、境界点列データに面分間の対応を表すデータを登録する（ステップＳ１３７）。上でも述べたように、重合点には、対応する重合点及び視点から見たときの前後関係を表す順序情報が登録されている。具体的には、図４４に示したように、ｖ1には反視点側頂点としてｖ1＊が登録されており、ｖ1＊には視点側頂点としてｖ1が登録されている。同様に、ｖ2及びｖ2＊、ｖ3及びｖ3＊、ｖ4及びｖ4＊、ｘ及びｘ＊等の対応関係も登録されている。重合点の対応関係がわかれば、対応する重合点を含む部分境界点列同士が対応すると判断でき、対応する部分境界点列によって囲われた面分同士も対応すると判断できる。ステップＳ１３７では、部分境界点列間及び面分間の対応関係が特定され、部分境界点列の順序情報及び面分の順序情報としてデータ格納部１０７に登録される。
【０１０７】
図６２の例に対しステップＳ１２１乃至ステップＳ１３５（図６１）の処理を繰り返すことで、最終的には図６５Ａに示すような重合線が追加され、処理対象のおもて面辺連結体は面分ｆ1乃至ｆ5に分割される。また、ステップＳ１３７では、部分境界点列ｂ1及び重合線ｖ1＊ｖ2＊、部分境界点列ｂ4及び重合線ｖ2ｖ3、部分境界点列ｂ5及び重合線ｖ3＊ｖ4＊、並びに重合線ｂ8及びｖ4ｖ1を形成する点の順序情報から、図６５Ａにおいて一点鎖線の矢印で示した点列の対応関係がわかるため、これらの点列で囲われた面分ｆ2及び面分ｆ5が対応する重合面分であると特定される。以上の処理により、面分の位相情報及び重合面分の対応関係が登録される。なお、重合線で分割された面分はそれぞれが視線一価である。図６５Ａのおもて面辺連結体を投影面上に表した例を図６５Ｂに示す。
【０１０８】
ここで、重合線と重合線とが交差する場合について補足する。例えば、図６６に示すおもて面辺連結体には、対応する３つの重合面分が存在している。このような辺連結体であっても、上で述べた重合点特定処理及び重合面分特定処理により面分を分割することができる。また、このような面分についても、視点側及び反視点側の面分が登録され、リスト構造を辿ることで重合面分を特定できる。
【０１０９】
なお、重合面分の数は、射影境界点列で表された面分上の点に対する射影境界点列の回転数（rotation number）を用いて計算することができる。回転数とは、閉曲線Ｃ（ｔ）がパラメタに沿って１周するとき、ある点ｐの周囲を正方向に回転する数をいうものとする。ここで、回転数は対応する面分の数を表している。すなわち、図６６において回転数が１の面分は、他に重合面分が存在しないことを意味し、回転数が２の面分は、他に１つの重合面分が存在することを意味している。図６７では、反時計回りを正方向とすると、点ｐ1、ｐ2及びｐ3の周りの回転数はそれぞれ＋１、−１及び０である。なお、投影面上の自己交差点の周囲に存在する回転数の符号が異なる射影境界点列は、おもて面辺連結体又は裏面辺連結体の境界ではないと判断することができる。
【０１１０】
ステップＳ１３７（図６１）の後、重合面分特定処理を終了して図４５の射影重合多角形生成処理に戻り、さらに射影重合多角形生成処理を終了して図３３の視線一価領域生成処理（後半）に戻る。そして、視線一価領域生成部１２３は、視線一価領域確定処理を実施する（図３３：ステップＳ７９）。ここで図６８Ａに進むが、この視線一価領域確定処理については、図６８Ａ乃至図７０を用いて説明する。
【０１１１】
視線一価領域確定処理は、実際に表示する視線一価領域を確定する処理である。最も単純な視線一価領域生成法は、特定した面分を視線一価領域とする方法である。単純な視線一価領域確定処理の手順を図６８Ｂに示す。
【０１１２】
図６８Ｂの視線一価領域確定処理では、視線一価領域生成部１２３は、データ格納部１０７から未処理の面分を１つ抽出し、当該面分に対して視線一価領域であることを表すデータを登録する（図６８Ｂ：ステップＳ１９１）。そして、視線一価領域生成部１２３は、データ格納部１０７に未処理の面分が存在するか判断し、存在する場合、ステップＳ１９１の処理に戻る（ステップＳ１９３）。一方、存在しない場合、視線一価領域確定処理を終了して図３３の視線一価領域生成処理（後半）に戻る。このように、各面分を視線一価領域として確定させても問題ない。
【０１１３】
しかしながら、例えば図６５Ｂを観察すると面分ｆ１、ｆ２、ｆ３を１つの視線一価領域としても問題ないことが分かる。位相演算は高速処理が可能であるから、分割された面分を結合して処理の効率化を図ってもよい。視線一価領域生成処理では、重合面分特定処理において分割された面分を基に、接続しても全体が視線一価となる隣接した面分同士を接続する。すなわち、１つの視線一価領域がより広くなるように、分割された面分を接続し直す。以下この処理を行う方法を説明する。
【０１１４】
まず、視線一価領域生成部１２３は、データ格納部１０７に格納された境界点列データを取得し、おもて面辺連結体又は裏面辺連結体が重合面分を含んでいるか判断する（図６８Ａ：ステップＳ１４１）。具体的には、境界点列データにおいて、対応する視点側面分又は反視点側面分の登録があるか否かにより判断できる。例えば図６５Ａのおもて面辺連続体は、対応する面分ｆ2及び面分ｆ5を含むものと判断される。重合面分が存在しない場合、視線一価領域生成部１２３は、例えばおもて面辺連結体又は裏面辺連結体が視線一価領域であることを表すデータをデータ格納部１０７に格納する（ステップＳ１５７）。例えば、境界点列データにおいて辺連結体のデータに対して視線一価であることが確定したことを示すフラグを立ててもよいし、後の処理において辺連結体のデータが面分に分割されていない場合は全体が視線一価であるものと扱うようにしてここでは特別なデータを登録しなくてもよい。その後、視線一価領域確定処理を終了し、図３３の視線一価領域生成処理（後半）に戻る。
【０１１５】
一方、ステップＳ１４１（図６８Ａ）において重合面分が存在すると判断された場合、視線一価領域生成部１２３は、各面分を初期的に仮の視線一価領域としてデータ格納部１０７に登録する（ステップＳ１４３）。例えば、境界点列データの辺連結体に含まれる面分のデータに対して視線一価であることを示すフラグを立ててもよいし、後の処理において各面分が視線一価であるものと扱うようにしてここでは特別なデータを登録しなくてもよい。図６５Ａに示した例では、例えば、面分ｆ1乃至ｆ5に対してそれぞれ視線一価領域であることを表すデータが登録される。そして、視線一価領域生成部１２３は、データ格納部１０７の境界点列データから未処理の重合面分を１つ取得する（ステップＳ１４５）。ここでは、例えば、対応する面分が順序情報に登録されている重合面分であって、当該重合面分及び対応する面分（対応する面分が複数存在する場合は、対応する面分のうち少なくとも１つ）がいずれも未処理であるという条件を満たす重合面分を１つ取得する。なお、取得された重合面分に対応する面分を、便宜上カウンタパートと呼ぶこととする。ここでは、図６５Ａのおもて面辺連結体から、面分ｆ5が取得され、取得された面分の順序情報から面分ｆ2がカウンタパートとして特定されるものとする。
【０１１６】
その後、視線一価領域生成部１２３は、処理対象の面分Ｘに隣接する未処理の面分を１つ取得する（図６８Ａ：ステップＳ１４７）。具体的には、処理対象の面分Ｘと辺（部分境界点列）を共有する未処理の面分が取得される。ここでは、図６５Ａの面分ｆ4が取得されたものとする。そして、視線一価領域生成部１２３は、当該面分Ｘに隣接する面分と面分Ｘのカウンタパートとが隣接するか判断する（ステップＳ１４９）。ここでは、隣接する面分とカウンタパートとが辺を共有するか判断する。隣接する面分とカウンタパートとが隣接する場合、処理はステップＳ１５３に移行する。なお、図６５Ａの例では、面分ｆ5に隣接する面分ｆ4と面分ｆ5のカウンタパートｆ2とは辺を共有しておらず、隣接しないと判断される。隣接する面分とカウンタパートとが隣接しない場合、視線一価領域生成部１２３は、隣接する面分を処理対象の面分に結合する（ステップＳ１５１）。ここでは、図６９に示すように、面分ｆ4及び面分ｆ5を１つの面分に結合する。なお、この後の処理では、結合された面分ｆ4及び面分ｆ5を処理対象の面分であるものとして扱う。
【０１１７】
ステップＳ１４９（図６８Ａ）において隣接する面分とカウンタパートとが隣接しないと判断された場合、又はステップＳ１５１の後、視線一価領域生成部１２３は、データ格納部１０７の境界点列データにおいて、処理対象の面分に隣接する未処理の面分が存在するか判断する（ステップＳ１５３）。未処理の面分が存在する場合、処理はステップＳ１４７に戻る。図６９の例では、面分ｆ1が未処理の隣接する面分である。面分ｆ1は、ステップＳ１４７において取得され、その後のステップＳ１４９では面分ｆ5のカウンタパートｆ2に隣接すると判断され、再びステップＳ１５３に移行する。
【０１１８】
一方、ステップＳ１５３（図６８Ａ）において隣接する未処理の面分が存在しないと判断された場合、視線一価領域生成部１２３は、データ格納部１０７の境界点列データにおいて、未処理の重合面分が存在するか判断する（ステップＳ１５５）。なお、処理対象であった面分は処理済みとし、当該面分を１つの視線一価領域として確定させる。ステップＳ１５５では、ステップＳ１４５と同様に、未処理の重合面分であって、カウンタパートのうち少なくとも１つが未処理であるという条件を満たすものが存在するか判断する。未処理の重合面分が存在する場合、処理はステップＳ１４５に戻る。
【０１１９】
一方、未処理の重合面分が存在しない場合、視線一価領域生成部１２３は、未処理の面分のうち隣接する面分を結合する（ステップＳ１５６）。例えば、図７０に示すように、残った仮の視線一価領域である面分ｆ1、ｆ2及びｆ3を１つの視線一価領域として結合する。その後、視線一価領域確定処理を終了して図３３の処理に戻る。
【０１２０】
視線一価領域確定処理では、対応する複数の重合面分が１つの視線一価領域に含まれないように結合されればよい。よって、ステップＳ１４９において隣接する面分自体がカウンタパートでなければ、ステップＳ１５１において処理対象の面分に結合するようにしてもよい。また、重合面分特定処理において分割された面分はそれぞれが視線一価であるため、視線一価領域確定処理を実施せずに各面分を視線一価領域として扱うようにしてもよい。なお、ステップＳ１４５において重合面分を取得する順番は任意であるが、例えば視点に近い順に取得してもよい。また、これらの内部的な処理は、ソリッドモデリングにおいて頻繁に行われるものであり、当業者には公知である。
【０１２１】
図３３の視線一価領域生成処理（後半）に戻り、視線一価領域生成部１２３は、データ格納部１０７において未処理のおもて面辺連結体又は裏面辺連結体が存在するか判断する（ステップＳ８１）。未処理のおもて面辺連結体又は裏面辺連結体が存在する場合、処理はステップＳ７５に戻る。一方、未処理のおもて面辺連結体又は裏面辺連結体が存在しない場合、視線一価領域生成処理を終了して図３１の処理に戻る。
【０１２２】
図３１の処理に戻り、マスク生成部１１３は、データ格納部１０７に格納されている未処理の視線一価領域を１つ取得する（ステップＳ５７）。本ステップの処理は、ステップＳ７と同様である。なお、基底曲面全体が視線一価領域の場合は、基底曲面全体が取得される。また、マスク生成部１１３は、データ格納部１０７からループ多角形のデータも取得しておく。ここでは、視線一価領域として図７０の面分ｆ4及びｆ5が取得されたものとする。また、上でも述べたとおり、図３０に示した基底曲面は全体がトリム面であるため、基底曲面の外形を近似した外ループ多角形のデータが取得される。なお、本実施の形態の説明に用いた例では内ループ多角形は存在しない。そして、マスク生成部１１３は、マスクデータ生成処理を実施する（ステップＳ５９）。このマスクデータ生成処理については、図７１及び図７２を用いて説明する。
【０１２３】
図７１にマスクデータ生成処理の処理フローを示す。まず、マスク生成部１１３は、取得した視線一価領域及びループ多角形の座標をスクリーン座標に変換し、変換後の座標をデータ格納部１０７に格納する（図７１：ステップＳ１６１）。本ステップの処理は、ステップＳ３１（図１０）と同様である。本実施の形態でもスクリーン座標系を用いるものとして説明する。本ステップでは、図７０の面分ｆ4及びｆ5が処理対象の視線一価領域である場合、図７２のようにスクリーン座標上に変換される。図７２では、破線で面分ｆ1乃至ｆ3も示している。
【０１２４】
次に、マスク生成部１１３は、データ格納部１０７に格納されている視線一価領域及びループ多角形のデータを用いて、ループ集合積を生成し、データ格納部１０７に格納する（ステップＳ１６３）。本ステップの処理は、ステップＳ３３（図１０）と同様である。本ステップでは、処理対象の視線一価領域に対して、図７２に示したものと同様の形状の外ループ集合積が得られる。
【０１２５】
なお、視線一価領域及びループ多角形の境界点列データを利用し、先に説明した和差積の種類に応じて交差による切断片を選択する多角形集合演算（Polygon Clipping）より高速な集合演算が可能となる。例えば、ループ多角形と視線一価領域の境界とが交差しない場合であって、ループ多角形が視線一価領域に内包されているときは、ループ多角形がループ集合積であり、内包されていないときは、ループ集合積は存在しない。そして、ループ多角形と視線一価領域の境界とが交差する場合、ループ多角形は曲面境界では視線一価領域境界と交差することはなく、表裏境界線上又は重合線上で交差する。このようなときも、視線一価領域の境界点列の向きと、ループ多角形の境界点列の向きとを矛盾なく選択する（同調させる）ことによって、上記の多角形集合演算（Polygon Clipping）より高速にループ集合積を計算することができる。
【０１２６】
そして、マスク生成部１１３は、マスクデータ格納部１１５のマスクデータを初期化する（図７１：ステップＳ１６５）。本ステップの処理は、ステップＳ３５と同様であり、マスクデータ全体をＯＮに初期化しておく。また、マスク生成部１１３は、データ格納部１０７に格納された外ループ集合積のデータを用いて、外ループ集合積の内部に相当するマスクデータをＯＦＦに設定する（ステップＳ１６７）。ただし、ステップＳ６５（図３２）で基底曲面全体を視線一価領域に設定し、且つトリム面と基底曲面の境界が一致しており、例えば簡易判定処理で視線一価であるとの結果を得た場合には、画面全体のマスクデータをＯＦＦに設定してもよく、マスクを用いずに画面全体を表示するようにしてもよい。本ステップの処理は、ステップＳ３７（図１０）と同様であり、図７２の外ループ集合積の内部に相当する領域のマスクデータがＯＦＦに設定される。
【０１２７】
その後、マスク生成部１１３は、データ格納部１０７に格納された内ループ集合積のデータを用いて、内ループ集合積の内部に相当するマスクデータをＯＮに設定する（図７１：ステップＳ１６９）。本ステップの処理は、ステップＳ３９（図１０）と同様である。本実施例では内ループが存在しないため、本ステップでＯＮに設定される領域は存在しない。そして、マスク生成部１１３は、未処理の内ループ集合積が存在するか判断し（ステップＳ１７１）、存在する場合にはステップＳ１６９の処理に戻る。内ループが存在する場合は、内ループの数だけステップＳ１６９が繰り返される。一方、未処理の内ループ集合積が存在しない場合、マスクデータ生成処理を終了して図３１の処理に戻り、端子Ｃを介して図７３の処理に移行する。
【０１２８】
その後、画像データ生成部１１７は、データ格納部１０７から、基底曲面を分割することにより生成された三角形データのうち視線一価領域に含まれる未処理のデータを１つ取得する（図７３：ステップＳ１８１）。本ステップの処理は、ステップＳ２１（図２１）と同様である。そして、画像データ生成部１１７は、当該三角形の画像データを生成し、データ格納部１０７に格納する（ステップＳ１８３）。ここでは、基底曲面を分割することにより生成され、データ格納部１０７に格納されている三角形データ、並びに表示条件格納部１０３に格納されている視点データ及び照明データを用いて、画像データを生成する。本ステップの処理は、ステップＳ２３（図２１）と同様である。
【０１２９】
その後、描画処理部１１９は、データ格納部１０７に格納された画像データとマスクデータ格納部１１５に格納されたマスクデータとを用いてフレームバッファへの描画処理を行う（図７３：ステップＳ１８５）。ここでは、マスクデータがＯＦＦの画素に対して、当該画素について保持されているＺバッファの値とＺ値とを比較し、Ｚ値の方が視点側に近い場合、当該画素の色情報でフレームバッファを更新する。また、当該Ｚ値でＺバッファを更新する。一方、マスクデータがＯＮの画素については描画を行わない。本ステップの処理は、ステップＳ２５（図２１）と同様である。
【０１３０】
その後、画像データ生成部１１７は、視線一価領域内の三角形について未処理のものが存在するか判断し（図７３：ステップＳ１８７）、未処理の三角形があれば、ステップＳ１８１の処理に戻る。一方、未処理の三角形が存在しない場合、マスク生成部１１３は、未処理の視線一価領域が存在するか判断し（ステップＳ１８９）、未処理の視線一価領域があれば、端子Ｄを介してステップＳ５７（図３１）の処理に戻る。一方、未処理の視線一価領域が存在しない場合、処理を終了する。
【０１３１】
以上の処理により、１つのトリム面が描画される。本実施の形態では、図７２の視線一価領域に対して描画処理を行った後、端子Ｄを介してステップＳ５７の処理に戻る。そして、図７０の面分ｆ1、ｆ2及びｆ3を結合した視線一価領域について、図７４に示すように描画処理を行う。なお、例えばＺバッファを用いた隠面消去により、最終的には面分ｆ5が表示され、面分ｆ2は表示されない。
【０１３２】
また、本実施の形態では、対応する重合面が異なる視線一価領域に属するように面分を分割するため、それぞれを適切に描画できる。本実施の形態では基底曲面全体がトリム面であるものとしたが、例えばトリム面のうち面分ｆ5に相当する部分に外ループ又は内ループが存在する場合であっても、面分ｆ5と面分ｆ2とが異なる視線一価領域に属しそれぞれに対してマスクが生成されるため、外ループの外側又は内ループの内側には奥の面分ｆ2が描画されるようになる。
【０１３３】
また、視線一価領域確定処理においてより大きな視線一価領域を生成するため、従来のように基底曲面を分割することにより得られた三角形毎にループ多角形との交点を求める場合よりも交差計算の量が少なくなり、処理負荷が軽減される。
【０１３４】
［視線一価簡易判定処理］
実施の形態２において説明を先送りした視線一価簡易判定処理（図３２：ステップＳ６１）について、図７５乃至図８７を用いてここで説明する。視線一価簡易判定処理では、基底曲面全体が視線一価が保証される領域を基底曲面毎に予め計算しておく。そして、当該領域に視点の位置が属するか否かにより、基底曲面全体が視線一価であるか否かを判断する。なお、上記の基底曲面全体が視線一価であることが保証される視点の座標の集まりである立体を、以下では視線一価確定ボリューム（sight-line single-valuedness definite volume）と呼ぶこととする。
【０１３５】
例えば工業的に利用されるトリム面を表すための基底曲面には、視線一価確定ボリュームが存在することが多く、一般的に視点が視線一価確定ボリュームに含まれることも多い。従って、視線一価簡易判定処理は表示速度を向上させるために有効である。なお、例えば図７５に示す基底曲面のように、視線一価確定ボリュームが存在しない基底曲面もある。
【０１３６】
視線一価簡易判定処理の処理内容について、図７６を用いて説明する。まず、視線一価領域生成部１２３は、処理対象の基底曲面について今回が初回の処理であるか判断する（図７６：ステップＳ２０１）。ここでは、例えば、処理対象の基底曲面に対応付けられた視線一価確定ボリュームがデータ格納部１０７に格納されているか判断する。初回の処理でない場合、処理はステップＳ２０５へ移行する。一方、初回の処理である場合、簡易判定前処理部１２１は、確定ボリューム生成処理を実施する（ステップＳ２０３）。確定ボリューム生成処理については、図７７乃至図８６を用いて説明する。なお、本実施の形態では初回判定方式を採用しているが、たとえばＣＡＤシステムなどの別工程で確定ボリューム生成処理を行ってもよい。
【０１３７】
図７７に確定ボリューム生成処理の処理フローを示す。まず、簡易判定前処理部１２１は、データ格納部１０７に格納されている処理対象の基底曲面のデータを三角形分割し、格子点のデータをデータ格納部１０７に一時的に保持させておく（図７７：ステップＳ２１１）。ここでは、例えば所定の詳細度に基づいて格子対角三角形に分割する。なお、三角形分割はステップＳ１（図３）及びステップＳ５１（図３１）と同様の処理である。また、本実施例では三角形分割方式を採用しているが、曲面式から直接計算する方式を採用してもよい。
【０１３８】
次に、簡易判定前処理部１２１は、データ格納部１０７に保持されている格子点のデータを用いて、基底曲面が平面であるか判断する（図７７：ステップＳ２１３）。ここでは、例えば格子点の四隅のうちの３点から決まる平面上に他の１点が存在するかを判断する。なお、四隅の点以外を用いてもよく、５点以上を用いて判断するようにしてもよい。基底曲面が平面であると判断された場合、簡易判定前処理部１２１は、当該基底曲面が含まれる平面のデータを特定し、フラグ「平面」と平面を定義するデータとを、処理対象の基底曲面に関連付けてデータ格納部１０７に格納する（ステップＳ２１５）。平面を定義するデータとしては、例えば３つの格子点の座標を格納する。
【０１３９】
基底曲面が平面の場合は当該基底曲面を含む平面上以外が視線一価確定ボリュームとなる。例えば、図７８において平面とその法線が表されているものとすると、平面の矢印側の空間からはおもて面が見え、反対側の空間からは裏面が見える。また、データ格納部１０７に格納されるデータの例を図７９に示す。基底曲面が平面である場合には、例えば１行目のデータのようにフラグ「平面」と平面の幾何データとが登録される。ここでオプションとして、トリム面と基底曲面の境界が合致するかどうか検査して、結果を付帯情報として記録してもよい。その後、確定ボリューム生成処理を終了し、図７６の処理に戻る。
【０１４０】
一方、基底曲面は平面でない場合、簡易判定前処理部１２１は、データ格納部１０７に格納されている処理対象の基底曲面が円弧掃引体であるか判断する（図７７：ステップＳ２１７）。ここでは、一方のパラメタ値を固定しつつ他方のパラメタ値を変化させて得られるパラメタ一定線について、いずれかのパラメタ一定線が直線であり、且つ他方のパラメタ一定線の曲率中心が一直線上であれば、基底曲面は円弧掃引体と判断する。例えば、図８０において実線で表された基底曲面では、一方のパラメタ一定線が直線となり、且つ他方のパラメタ一定線の曲率中心が一直線（太い破線）となり、基底曲面は円弧掃引体であると判断される。図８０は円柱状の基底曲面を示しているが、同様の条件により円錐状の基底曲面についても円弧掃引体であると判断できる。
【０１４１】
基底曲面が円弧掃引体であると判断された場合、簡易判定前処理部１２１は、フラグ「円弧掃引体」と、視線一価確定ボリュームを特定するための付帯情報とを、処理対象の基底曲面に関連付けてデータ格納部１０７に格納する（図７７：ステップＳ２１９）。ここで、図８１に、視線一価確定ボリュームを円錐の軸に対し垂直な平面で切断した断面図を示す。図８１のうち、ハッチングが施された領域が視線一価確定ボリュームである。すなわち、実線で示された円錐とその定義境界線で接する破線で示された接平面とで区切られた領域のうち円錐の軸が含まれる領域と、２つの接平面により区切られた領域のうち接平面交線を挟んで円錐の存在する領域と反対側の領域とが、視線一価確定ボリュームとなる。
【０１４２】
視線一価確定ボリュームを特定するための付帯情報としては、例えば、図７９の２行目に示すように、円弧掃引体を表す幾何データ、円弧掃引体の定義境界線で接する２つの接平面の幾何データ及び当該接平面交線の幾何データが登録される。ここでオプションとして、トリム面と基底曲面の境界が合致するかどうか検査して、結果を付帯情報として記録してもよい。その後、確定ボリューム生成処理を終了し、図７６の処理に戻る。
【０１４３】
一方、基底曲面が円弧掃引体でない場合、簡易判定前処理部１２１は、データ格納部１０７に格納されている処理対象の基底曲面が球面であるか判断する（図７７：ステップＳ２２１）。ここでは、ｕパラメタ一定線及びｖパラメタ一定線の曲率中心を求め、曲率中心が一点に定まれば、基底曲面は球面であると判断する。例えば、図８２において実線で表された基底曲面では、ｕ及びｖパラメタ一定線の曲率中心が１点に定まっており、基底曲面は球面であると判断される。
【０１４４】
基底曲面が球面であると判断された場合、簡易判定前処理部１２１は、フラグ「球面」と、視線一価確定ボリュームを特定するための付帯情報とを、処理対象の基底曲面に関連付けてデータ格納部１０７に格納する（ステップＳ２２３）。図８３の例では、球面状の基底曲面の境界が太線で示され、当該基底曲面の視線一価確定ボリュームがハッチングが施された領域として示されている。図８３のように、視線一価確定ボリュームは円錐及び球面により表され、基底曲面のパラメタ中央値の座標と、基底曲面の曲率中心とを結ぶ直線が軸となる。また、当該軸と基底曲面の境界上における接平面との交点のうち、曲率中心から最も遠い点が円錐の頂点となる。そして、円錐の側面と球面とで区切られた領域のうち曲率中心の含まれる領域と、円錐の頂点を挟んで逆側の円錐内部の領域とが、視線一価確定ボリュームとなる。
【０１４５】
視線一価確定ボリュームを特定するための付帯情報としては、例えば、図７９の３行目に示すように、球面を表す幾何データ、円錐の軸、頂点及び半頂角といった円錐の幾何データが登録される。ここでオプションとして、トリム面と基底曲面の境界が合致するかどうか検査して、結果を付帯情報として記録してもよい。その後、確定ボリューム生成処理を終了し、図７６の処理に戻る。
【０１４６】
一方、基底曲面が球面でない場合、簡易判定前処理部１２１は、自由曲面の確定ボリューム生成処理を実施する（図７７：ステップＳ２２５）。この自由曲面の確定ボリューム生成処理については、図８４乃至図８６を用いて説明する。
【０１４７】
図８４に自由曲面の視線一価ボリューム生成処理の処理フローを示す。まず、簡易判定前処理部１２１は、データ格納部１０７に格納されている基底曲面のデータを基に参照軸を特定し、参照軸を表す幾何データをデータ格納部１０７に一時的に保持させておく（図８４：ステップＳ２３１）。ここでは、図８５に示すような基底曲面のパラメタ中央値の座標を通る接平面の単位法線ベクトルＶを求め、Ｖが通る直線を参照軸とする。次に、簡易判定前処理部１２１は、参照軸上の円錐頂点を特定し、例えば座標のデータをデータ格納部１０７に一時的に保持させておく（ステップＳ２３３）。ここでは、基底曲面を分割した各格子点における接平面と参照軸との交点を求め、最も基底曲面から遠い点を円錐頂点とする。
【０１４８】
その後、簡易判定前処理部１２１は、円錐の半頂角を算出する（ステップＳ２３５）。ここでは、図８６に示すように、参照軸と基底曲面の接平面とのなす角αを求め、最小値αminを半頂角とする。なお、基底曲面の接平面の単位法線ベクトルをＮとおくと、ｃｏｓα＝Ｖ・Ｎである。そして、簡易判定前処理部１２１は、ｃｏｓαminが負の値であるか判断する（ステップＳ２３７）。図７５に示したような基底曲面の場合、参照軸と基底曲面の接平面とは図８６において基底曲面よりも下の部分で交わるため、αは鈍角になる。結果として、最小値ｃｏｓαminは負になる。そして、ｃｏｓαminが負の場合には、視線一価確定ボリュームは存在しないと判断する。ｃｏｓαminが負の値である場合、簡易判定前処理部１２１は、フラグ「不在」をデータ格納部１０７に格納し（ステップＳ２３９）、確定ボリューム生成処理を終了して図７６の処理に戻る。例えば、図７９の５行目に示すように、フラグ「不在」が登録される。
【０１４９】
一方、ｃｏｓαminが負の値ではない場合、簡易判定前処理部１２１は、フラグ「自由曲面」と、視線一価確定ボリュームを特定するための付帯情報とを、処理対象の基底曲面に関連付けてデータ格納部１０７に格納する（ステップ２４１）。図８６においてハッチングが施された領域が視線一価確定ボリュームである。すなわち、参照軸上の円錐頂点Ｑを中心として両側に、半頂角がαminの側面を有する円錐が定義され、当該円錐を自由曲面で分割した領域のうち円錐頂点とは反対側の領域と、円錐頂点を挟んで反対側の円錐内部の領域とが、視線一価確定ボリュームとなる。なお、自由曲面の視線一価確定ボリュームについては、円錐でなく一般の錘体として求めることも可能である。しかし、一般の錐体を用いた場合は判定処理が複雑になるため、判定処理が容易であるという点で円錐を用いた視線一価確定ボリュームは有利である。
【０１５０】
視線一価確定ボリュームを特定するための付帯情報としては、例えば、図７９の４行目に示すように、自由曲面を表す幾何データ、円錐の軸、頂点及び半頂角といった円錐の幾何データが登録される。ここでオプションとして、トリム面と基底曲面の境界が合致するかどうか検査して、結果を付帯情報として記録してもよい。その後、確定ボリューム生成処理を終了し、図７６の処理に戻る。
【０１５１】
なお、基底曲面が、例えば機械系ＣＡＤにおいて多く用いられる円弧掃引体又は球の場合、おもて面辺連結体又は裏面辺連結体が視線一価となる。すなわち、視点から見た円弧掃引体側面又は球面の稜線がおもて面と裏面との境界となり、おもて面辺連結体又は裏面辺連結体がそれぞれ視線一価となる。よって、おもて面と裏面との境界を算出するための情報を予めデータ格納部１０７に保持させておき、視線一価領域を生成する際に用いることにより、基底曲面全体が視線一価と判断されない場合でも処理効率を上げることができる。
【０１５２】
例えば円錐は、一般的に円周方向及び母線方向のパラメタによって表現される。また、円錐の母線上の法線ベクトルは一定であり、視点から見た円錐の稜線である母線がおもて面と裏面との境界となる。よって、円錐の軸及び円周方向のパラメタを保持しておき、視点との関係に基づいて視線一価領域を計算することができる。なお、円柱や球面の場合も同様である。確定ボリューム生成処理においてこのような情報を用意するようにしてもよい。
【０１５３】
図７６の視線一価簡易判定処理に戻り、ステップＳ２０３の後、又はステップＳ２０１において初回の処理ではないと判断された場合、視線一価領域生成部１２３は、簡易判定処理を実施する（ステップＳ２０５）。この簡易判定処理については、図８７を用いて説明する。
まず、視線一価領域生成部１２３は、処理対象の基底曲面に関連付けられた簡易判定フラグをＯＦＦに初期化し、データ格納部１０７に保持させる（図８７：ステップＳ２５１）。そして、視線一価領域生成部１２３は、データ格納部１０７から処理対象の基底曲面に関連付けられたフラグを取得する（ステップ２５３）。ここでは、図７９に示したデータから、処理対象の基底曲面の項目「フラグ」に格納されたデータを取得する。
【０１５４】
次に、視線一価領域生成部１２３は、フラグが「不在」であるか判断する（図８７：ステップＳ２５５）。フラグが「不在」の場合は視点の位置に関係なく基底曲面は視線一価でないため、簡易判定フラグをＯＦＦに設定したまま簡易判定処理を終了して図７６の視線一価簡易判定処理に戻り、その後図３２の視線一価領域生成処理に戻る。
【０１５５】
一方、フラグが「不在」でない場合、視線一価領域生成部１２３は、表示条件格納部１０３から視点データを、データ格納部１０７から付帯データを取得する（ステップＳ２５７）。なお、本ステップの処理は、例えばステップＳ２５３（図８７）と同時に行うようにしてもよい。そして、視線一価領域生成部１２３は、フラグが「平面」であるか判断する（ステップＳ２５９）。フラグが「平面」の場合、平面上以外の空間が視線一価確定ボリュームである。従って、視線一価領域生成部１２３は、取得した視点データが表す視点の座標が付帯データとして登録されている平面上に存在するか判断し、平面上に存在しなければデータ格納部１０７の簡易判定フラグをＯＮに設定する（ステップＳ２６１）。その後、簡易判定処理を終了して図７６の処理に戻り、さらに図３２の視線一価領域生成処理に戻る。
【０１５６】
一方、フラグが「平面」でない場合、視線一価領域生成部１２３は、フラグが「円弧掃引体」であるか判断する（図８７：ステップＳ２６３）。フラグが「円弧掃引体」の場合、図８１においてハッチングが施された領域が視線一価確定ボリュームである。従って、基底曲面の定義境界線で接する接平面及び当該基底曲面によって区切られた領域のうち円錐の軸を含む領域、又は接平面により区切られた領域のうち接平面交線を挟んで基底曲面が存在する領域とは逆側の領域に視点データが表す視点の座標が含まれるか判断し、含まれる場合はデータ格納部１０７の簡易判定フラグをＯＮに設定する（ステップＳ２６５）。その後、簡易判定処理を終了して図７６の処理に戻り、さらに図３２の視線一価領域生成処理に戻る。
【０１５７】
一方、フラグが「円弧掃引体」でない場合、視線一価領域生成部１２３は、フラグが「球面」であるか判断する（図８７：ステップＳ２６７）。フラグが「球面」の場合、図８３においてハッチングが施された領域が視線一価確定ボリュームである。従って、円錐の側面と球面とで区切られた領域のうち曲率中心の含まれる領域、又は円錐の頂点を挟んで逆側の円錐内部の領域に視点データが表す視点の座標が含まれるか判断し、含まれる場合はデータ格納部１０７の簡易判定フラグをＯＮに設定する（ステップＳ２６９）。その後、簡易判定処理を終了して図７６の処理に戻り、さらに図３２の視線一価領域生成処理に戻る。
【０１５８】
一方、フラグが「球面」でない場合、フラグは「自由曲面」であると判断できる。フラグが「自由曲面」の場合、図８６においてハッチングが施された領域が視線一価確定ボリュームである。従って、円錐を自由曲面で分割した領域のうち円錐頂点とは逆側の領域、又は円錐頂点を挟んで逆側の円錐内部の領域に視点の座標が含まれるか判断し、含まれる場合はデータ格納部１０７の簡易判定フラグをＯＮに設定する（ステップＳ２７１）。その後、簡易判定処理を終了して図７６の処理に戻り、さらに図３２の視線一価領域生成処理に戻る。
【０１５９】
なお、円弧掃引体又は球面の基底曲面について、確定ボリューム生成処理においておもて面と裏面との境界を算出するための情報を用意している場合、視点が視線一価確定ボリュームに存在しないときであっても容易に視線一価領域に分割することができる。すなわち、予めデータ格納部１０７に保持されたパラメタ等を用いて、視点から見た円弧掃引体側面又は球面の稜線でおもて面辺連結体と裏面辺連結体とを生成することができる。例えば簡易判定処理において当該ケースを示すフラグを立てておき、後の処理において容易に視線一価領域を生成できるようにしてもよい。
【０１６０】
以上のような処理を行うことにより、基底曲面全体が視線一価であるか容易に判断することができ、基底曲面全体が視線一価であれば描画処理においてループ多角形の形状に基づいてマスクを生成することができる。従って、従来のように基底曲面を分割することにより得られた三角形毎にループ多角形との交点を求める場合よりも交差計算の量は少なくなり、処理負荷が軽減される。また、上でも述べたとおり、視線一価確定ボリュームを有する基底曲面が用いられることは多く、視点が視線一価確定ボリュームに含まれることも多いため、当該処理は表示速度を向上させるために有効である。
【０１６１】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、機能ブロック図は一例であって、必ずしも実際のプログラムモジュール構成と一致しない場合もある。また、処理フローについても、処理結果が変わらない限り、ステップの順番を入れ替えたり、並列実施するようにしてもよい。さらに、図７９に示したテーブルも一例であり、登録されるデータが異なる場合もある。
【０１６２】
なお、上で述べた表示処理装置は、コンピュータ装置であって、図８８に示すように、メモリ２５０１とＣＰＵ２５０３とハードディスク・ドライブ（ＨＤＤ）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【０１６３】
本実施の形態におけるフレームバッファは、メモリ２５０１又は表示制御部が有するメモリ等により実現される。そして、フレームバッファに格納された画像データは、表示制御部２５０７によって読み出され、表示装置２５０９に表示される。
【０１６４】
以上述べた本実施の形態をまとめると、以下のようになる。
【０１６５】
本実施の形態に係る表示処理方法は、基底曲面に基づいて生成されるトリム面を含む物体の形状を表示する表示処理方法であって、（Ａ）基底曲面を三角形分割して、生成された三角形のデータをデータ格納部に格納するステップと、（Ｂ）トリム面の外形を定義するための外ループと物体の形状に応じて外ループ内に設けられる内ループとを含むループについて、ループ多角形を生成し、生成されたループ多角形のデータをデータ格納部に格納するステップと、（Ｃ）視点と基底曲面との位置関係に基づき、投影面への写像が全単射であるという条件を満たし且つ三角形を複数含む、基底曲面上の領域である視線一価領域を特定し、当該視線一価領域のデータをデータ格納部に格納する視線一価領域特定ステップと、（Ｄ）視線一価領域毎に、表示すべきか否かを制御する画素毎のデータであるマスクデータを、当該視線一価領域とデータ格納部に格納されているループ多角形とから生成し、マスクデータ格納部に格納するマスクデータ生成ステップと、（Ｅ）データ格納部に格納されている三角形の各々について、投影面上の画像データを生成し、データ格納部に格納する画像データ生成ステップと、（Ｆ）マスクデータ格納部に格納されているマスクデータとデータ格納部に格納されている画像データとから描画処理を実施するステップとを含む。
【０１６６】
上で述べたような視線一価領域を特定して、当該視線一価領域を単位にマスクデータを生成することで、基底曲面を三角形分割して生成される三角形毎に処理するよりも効率良く且つ高速に描画を行うことができるようになる。
【０１６７】
なお、上で述べた視線一価領域特定ステップが、（Ｃ１）基底曲面内の各三角形について、視点に対しておもて面か裏面かを判定し、データ格納部に格納するステップと、（Ｃ２）おもて面と判定され且つ連結している複数の三角形を含むおもて面辺連結体と、裏面と判定され且つ連結している複数の三角形を含む裏面辺連結体とを特定するステップとをさらに含むようにしてもよい。
【０１６８】
単純な形状の場合には、このような処理によって特定されたおもて面辺連結体及び裏面辺連結体を視線一価領域として処理することも可能である。これによって上記ループとの交差判定を効率的に実施できるようになる。
【０１６９】
また、上で述べた視線一価領域特定ステップが、（Ｃ３）おもて面辺連結体及び裏面辺連結体のいずれかである辺連結体の境界と視点とを通る直線により、辺連結体を分割して面分を生成するステップをさらに含むようにしてもよい。より複雑な形状の場合には、このような処理を実施することで確実に視線一価領域を特定することができるようになる。なお、このような面分をそのまま視線一価領域として処理するようにしてもよい。
【０１７０】
さらに、視点一価領域特定ステップが、（Ｃ４）生成された面分を、視点から見て重ならず且つ隣接する面分の集まりに分けて連結するステップをさらに含むようにしてもよい。このようにすれば、より広い視線一価領域を生成することができるため、上記面分単位で処理するよりも効率が良くなる。
【０１７１】
また、上で述べた視線一価領域特定ステップが、（Ｃ１１）おもて面辺連結体及び裏面辺連結体のいずれかである辺連結体の境界をある平面に投影して、当該ある平面上の境界を単調区間に分割するステップと、（Ｃ１２）単調区間が２以下であるか判断するステップとを含むようにしてもよい。このような処理によっておもて面辺連結体又は裏面辺連結体を分割するか否かを高速に判断することができるようになる。
【０１７２】
さらに、上で述べた視線一価領域特定ステップが、（Ｃ１３）単調区間が３以上である場合には、単調区間同士の交点に対応する、辺連結体の境界上の点である第１の点（例えば実施の形態における重合点）を特定するステップと、（Ｃ１４）第１の点を含む、辺連結体の境界上のセグメントを視線を通る直線で辺連結体上に投影する（例えば実施の形態における曲面射影）ことで、辺連結体を分割して面分を生成する面分生成ステップとをさらに含むようにしてもよい。このような処理を例えばパラメタ空間において実施してもよい。また、これによって得られる面分をそのまま視線一価領域として処理するようにしても良い。
【０１７３】
さらに、上で述べた視線一価領域特定ステップが、（Ｃ１５）辺連結体が表裏境界を有する場合には、当該表裏境界と、第１の点を含む、辺連結体の境界上のセグメントを、視線を通る直線で辺連結体上に投影することで得られる線分とが接する第２の点（例えば実施の形態における特異点）を特定するステップをさらに含むようにしてもよい。その際、面分生成ステップにおいて、第２の点も第１の点のように辺連結体の分割に用いるものとする。第２の点が存在する場合には、第２の点も面分生成ステップで用いることで、適切に視線一価領域となる面分を生成できるようになる。
【０１７４】
さらに、上で述べた視線一価領域特定ステップが、（Ｃ１６）生成された面分から、第１の点を含む境界上の点に基づき、視点から見て重なる面分の組を特定するステップと、（Ｃ１７）面分の組に含まれる各面分が異なるグループに属するように、生成された面分を隣接関係に基づき分類し結合するステップとをさらに含むようにしてもよい。このようにすれば、より広い視線一価領域を得ることができるようになり、処理効率が向上する。
【０１７５】
なお、上で述べたマスクデータ生成ステップが、（Ｄ１）データ格納部に格納されているループ多角形のうち外ループについてのループ多角形である外ループ多角形と視線一価領域との集合積である外ループ集合積を生成し、データ格納部に格納するステップと、（Ｄ２）データ格納部に格納されているループ多角形のうち内ループについてのループ多角形である内ループ多角形と視線一価領域との集合積である内ループ集合積を生成し、データ格納部に格納するステップと、（Ｄ３）データ格納部に格納されている外ループ集合積内部の各点に相当する、投影面上の画素のマスクデータを、当該画素を表示すべきことを表すように設定するステップと、（Ｄ４）データ格納部に格納されている内ループ集合積内部の各点に相当する、投影面上の画素のマスクデータを、当該画素を表示すべきでないことを表すように設定するステップとを含むようにしてもよい。このようにすれば、適切なマスクデータが生成される。なお、外ループ集合積及び内ループ集合積を生成する処理は、各三角形について実施するよりも効率化されている。
【０１７６】
また、本表示処理方法は、（Ｇ）基底曲面全体が視線一価領域であることが保証される、空間内のボリュームを決定し、当該ボリュームのデータをデータ格納部に格納するステップを更に含むようにしてもよい。そして、上で述べた視線一価領域特定ステップが、（Ｃ２１）視点がボリューム内に含まれるか判断するステップと、（Ｃ２２）視線がボリューム内に含まれると判断された場合には、基底曲面に含まれる全ての三角形を連結した領域を視線一価領域として特定するステップとを含むようにしてもよい。このようにすれば、処理が簡略化され、視点が移動する際にも高速に視線一価領域を特定できる可能性が出てくる。
【０１７７】
また、本表示処理方法は、（Ｈ）マスクデータ生成ステップの前に、外ループと基底曲面の外周とが一致するか判断するステップと、（Ｉ）外ループと基底曲面の外周とが一致し、且つ基底曲面全体が視線一価領域である場合、データ格納部に格納されている三角形の各々について、投影面上の画像データを生成し、当該画像データにより描画処理を実施するステップとを含むようにしてもよい。これによって外ループと基底曲面の外周が一致するという特別な場合は、外ループ集合積計算ステップが省略されるので、処理の高速化が実現される。なお、全ての画素について表示すべきことを表すようにマスクを設定してもよいし、マスクを用いずに画像データを描画するようにしてもよい。
【０１７８】
なお、上記方法による処理をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【図１】
2012073363.tif 000004
【図２】
2012073363.tif 000005
【図３】
2012073363.tif 000006
【図４】
2012073363.tif 000007
【図５】
2012073363.tif 000008
【図６】
2012073363.tif 000009
【図７】
2012073363.tif 000010
【図８】
2012073363.tif 000011
【図９】
2012073363.tif 000012
【図１０】
2012073363.tif 000013
【図１１】
2012073363.tif 000014
【図１２】
2012073363.tif 000015
【図１３】
2012073363.tif 000016
【図１４】
2012073363.tif 000017
【図１５】
2012073363.tif 000018
【図１６】
2012073363.tif 000019
【図１７】
2012073363.tif 000020
【図１８】
2012073363.tif 000021
【図１９】
2012073363.tif 000022
【図２０】
2012073363.tif 000023
【図２１】
2012073363.tif 000024
【図２２】
2012073363.tif 000025
【図２３】
2012073363.tif 000026
【図２４】
2012073363.tif 000027
【図２５】
2012073363.tif 000028
【図２６Ａ】
2012073363.tif 000029
【図２６Ｂ】
2012073363.tif 000030
【図２７】
2012073363.tif 000031
【図２８】
2012073363.tif 000032
【図２９】
2012073363.tif 000033
【図３０】
2012073363.tif 000034
【図３１】
2012073363.tif 000035
【図３２】
2012073363.tif 000036
【図３３】
2012073363.tif 000037
【図３４】
2012073363.tif 000038
【図３５】
2012073363.tif 000039
【図３６】
2012073363.tif 000040
【図３７】
2012073363.tif 000041
【図３８】
2012073363.tif 000042
【図３９】
2012073363.tif 000043
【図４０】
2012073363.tif 000044
【図４１】
2012073363.tif 000045
【図４２】
2012073363.tif 000046
【図４３】
2012073363.tif 000047
【図４４】
2012073363.tif 000048
【図４５】
2012073363.tif 000049
【図４６】
2012073363.tif 000050
【図４７】
2012073363.tif 000051
【図４８】
2012073363.tif 000052
【図４９】
2012073363.tif 000053
【図５０】
2012073363.tif 000054
【図５１】
2012073363.tif 000055
【図５２】
2012073363.tif 000056
【図５３】
2012073363.tif 000057
【図５４】
2012073363.tif 000058
【図５５】
2012073363.tif 000059
【図５６】
2012073363.tif 000060
【図５７】
2012073363.tif 000061
【図５８】
2012073363.tif 000062
【図５９Ａ】
2012073363.tif 000063
【図５９Ｂ】
2012073363.tif 000064
【図５９Ｃ】
2012073363.tif 000065
【図６０】
2012073363.tif 000066
【図６１】
2012073363.tif 000067
【図６２】
2012073363.tif 000068
【図６３】
2012073363.tif 000069
【図６４】
2012073363.tif 000070
【図６５Ａ】
2012073363.tif 000071
【図６５Ｂ】
2012073363.tif 000072
【図６６】
2012073363.tif 000073
【図６７】
2012073363.tif 000074
【図６８Ａ】
2012073363.tif 000075
【図６８Ｂ】
2012073363.tif 000076
【図６９】
2012073363.tif 000077
【図７０】
2012073363.tif 000078
【図７１】
2012073363.tif 000079
【図７２】
2012073363.tif 000080
【図７３】
2012073363.tif 000081
【図７４】
2012073363.tif 000082
【図７５】
2012073363.tif 000083
【図７６】
2012073363.tif 000084
【図７７】
2012073363.tif 000085
【図７８】
2012073363.tif 000086
【図７９】
2012073363.tif 000087
【図８０】
2012073363.tif 000088
【図８１】
2012073363.tif 000089
【図８２】
2012073363.tif 000090
【図８３】
2012073363.tif 000091
【図８４】
2012073363.tif 000092
【図８５】
2012073363.tif 000093
【図８６】
2012073363.tif 000094
【図８７】
2012073363.tif 000095
【図８８】
2012073363.tif 000096
【図８９】
2012073363.tif 000097
【図９０】
2012073363.tif 000098
【手続補正書】
【提出日】平成25年5月9日(2013.5.9)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、表示装置に物体を表示するための表示処理技術に関する。
【背景技術】
【０００２】
例えばＣＡＤ（Computer Aided Design）においては、精密に物体を表現するために、物体はトリム面の集まりとして表現されることが多い。このトリム面（trimmed surface）は、図８９に示すように、基底曲面（base surface）１００１又はその拡張曲面において、閉じた自己交差しない面上線である外ループ（outer loop）１００２で囲われた領域であって、その内部の閉じた面上線である内ループ（inner loop）１００３及び１００４で囲われた領域を除外することによって生成される図形である。但し、内ループ１００３及び１００４は存在しない場合もある。また、特殊なケースとして基底曲面の境界と外ループが一致するケースもある。
【０００３】
ＣＡＤシステムのコンピュータでは、内部に蓄えられたトリム面の集まりにより形成される物体表面の情報と視点や照明条件などの表示条件とを与えて、トリム面画像の集まりとして物体形状を表示する。
【０００４】
なお、トリム面という用語は、サーフェスモデラが主流であった時代から使用されているが、トリム面間の連結関係を表すデータである位相情報（topological information）を保有するか否かにかかわらず使用される。トリム面間の連結関係を表すデータを有するソリッドモデラの場合には、トリム面はフェース（面分（Face））と言う用語が対応する。
【０００５】
ＣＡＤで生成されたトリム面は、基底曲面を表現する曲面や面上線の曲線の形式では画面上に表示することはできない。そこで，図８９のトリム面を図９０に示すような三角形の集まりに近似（テッセレーション（tessellation）又は三角化（triangulation）という）して、各三角形を表示し、隠面処理はＺバッファを用いることによってトリム面の表示を実現する従来技術が知られている。トリム面のテッセレーションでは、基底曲面のパラメタ一定線と面上線を線分列に近似することと、両者の交点を参照して三角形分割がなされることが特徴であり、トリム面のテッセレーションは大きな計算時間を要するのが問題となっている。
【０００６】
これに対して、このようなトリム面を表示するコンピュータグラフィックスシステムには、以下のようなマスク（mask）を使用する従来技術が存在している。すなわち、従来技術ではテッセレーションの技法に基づいて、基底曲面を三角形分割し、トリム曲線が三角形のいずれかと交差するか判断する。そして、交差が生じる場合には、当該三角形とトリム曲線との交点を計算し、その交差状況に基づき、トリム面内部が表示されるようにするマスクバッファを生成する。マスクバッファには、画素（pixel）毎に、表示画面上において当該三角形内の対応する画素を表示させる場合にはマスクオフの意味で「１」を設定し、表示させない場合にはマスクオンの意味で「０」を設定する。三角形分割で生成された三角形を表示画面上に表示する場合には、三角形内の全ての画素について画素値を算出するが、当該画素のマスクの値が「１」であれば表示画面上に表示し、マスクの値が「０」であれば表示画面上に表示しない。この表示処理を全ての３角形について繰り返す。なお、公開された従来技術では負論理を採用してマスクオフを「１」、マスクオンを「０」としているが、システム構築に当たっては正論理を採用してマスクオフを「０」、マスクオンを「１」としても問題ない。
【０００７】
このようなマスクを用いる従来技術でも、トリム面のテッセレーションの技法を用いるので三角形毎にトリム曲線との交差を判断せざるを得ず、三角形の数が多い場合には、多くの交差計算を行うため、過大な計算時間を要するという問題がある。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特許第３３４４５９７号公報
【特許文献２】特開平４−２８９９８４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
従って、本技術の目的は、一側面において、トリム面を高速に表示するための技術を提供することである。
【課題を解決するための手段】
【００１０】
本技術は、一側面において、基底曲面から生成されるトリム面を含む物体の形状を表示する表示処理方法であって、（Ａ）基底曲面を三角形分割して、生成された三角形のデータをデータ格納部に格納するステップと、（Ｂ）トリム面の外形を定義するための外ループと物体の形状に応じて外ループ内に設けられる内ループとを含むループについて、ループ多角形を生成し、生成されたループ多角形のデータをデータ格納部に格納するステップと、（Ｃ）視点と基底曲面との位置関係に基づき、投影面への写像が全単射であるという条件を満たす三角形を複数含む、基底曲面上の領域である視線一価領域を特定し、当該視線一価領域のデータをデータ格納部に格納する視線一価領域特定ステップと、（Ｄ）視線一価領域毎に、表示すべきか否かを制御する画素毎のデータであるマスクデータを、当該視線一価領域とデータ格納部に格納されているループ多角形とから生成し、マスクデータ格納部に格納するマスクデータ生成ステップと、（Ｅ）データ格納部に格納されている三角形の各々について、投影面上の画像データを生成し、データ格納部に格納する画像データ生成ステップと、（Ｆ）マスクデータ格納部に格納されているマスクデータとデータ格納部に格納されている画像データとから描画処理を実施するステップとを含む。
【図面の簡単な説明】
【００１１】
【図１】図１は、第１の実施の形態に係る表示処理装置の機能ブロック図である。
【図２】図２は、視線一価領域を説明するための図である。
【図３】図３は、第１の実施の形態に係る処理フロー（前半）を示す図である。
【図４】図４は、三角形分割された基底曲面及びテッセレーションされたトリム面の一例を示す図である。
【図５】図５は、基底曲面の三角形分割を説明するための図である。
【図６】図６は、ループ多角形を説明するための図である。
【図７】図７は、第１の実施の形態に係る視線一価領域生成処理の処理フローを示す図である。
【図８】図８は、表裏判定内積を説明するための図である。
【図９】図９は、おもて面辺連結体及び裏面辺連結体を説明するための図である。
【図１０】図１０は、第１の実施の形態に係るマスクデータ生成処理の処理フローを示す図である。
【図１１】図１１は、おもて面辺連結体をスクリーン座標上に表した図である。
【図１２】図１２は、裏面辺連結体をスクリーン座標上に表した図である。
【図１３】図１３は、外ループ集合積を説明するための図である。
【図１４】図１４は、内ループ集合積を説明するための図である。
【図１５】図１５は、マスクデータの生成を説明するための図である。
【図１６】図１６は、マスクデータの生成を説明するための図である。
【図１７】図１７は、マスクデータの生成を説明するための図である。
【図１８】図１８は、マスクデータの生成を説明するための図である。
【図１９】図１９は、マスクデータの生成を説明するための図である。
【図２０】図２０は、マスクデータの生成を説明するための図である。
【図２１】図２１は、第１の実施の形態に係る処理フロー（後半）を示す図である。
【図２２】図２２は、シェーディングを説明するための図である。
【図２３】図２３は、投影されたループ集合積の三角形分割を説明するための図である。
【図２４】図２４は、投影されたループ集合積の三角形分割を説明するための図である。
【図２５】図２５は、三角形分割の一例を示す図である。
【図２６Ａ】図２６Ａは、画素走査法を説明するための図である。
【図２６Ｂ】図２６Ｂは、画素走査法で外ループと内ループとを同時に走査する場合の処理を説明するための図である。
【図２７】図２７は、襞が現れるが故に視線一価でない辺連結体を説明するための図である。
【図２８】図２８は、上方に向かう突起を有するが故に視線一価でない辺連結体を説明するための図である。
【図２９】図２９は、第２の実施の形態に係る表示処理装置の機能ブロック図である。
【図３０】図３０は、表示上重なりを生ずる基底曲面の一例を示す図である。
【図３１】図３１は、第２の実施の形態に係る処理フロー（前半）を示す図である。
【図３２】図３２は、第２の実施の形態に係る視線一価領域生成処理の処理フロー（前半）を示す図である。
【図３３】図３３は、第２の実施の形態に係る視線一価領域生成処理の処理フロー（後半）を示す図である。
【図３４】図３４は、起伏が存在するが故に複数のおもて面辺連結体又は複数の裏面辺連結体が生成される例を示す図である。
【図３５】図３５は、バッカス・ナウア記法で定義された、重合を考慮しない辺連結体を表すデータの一例を示す図である。
【図３６】図３６は、パラメタ空間中に表された図２７の辺連結体を示す図である。
【図３７】図３７は、パラメタ空間中に表された図２８の辺連結体を示す図である。
【図３８】図３８は、重合線を説明するための図である。
【図３９】図３９は、図３８の辺連結体を投影面上に表した図である。
【図４０】図４０は、図３８の辺連結体をパラメタ平面上に表した図である。
【図４１】図４１は、襞が現れる物体の重合線を説明するための図である。
【図４２】図４２は、突起を有する物体の重合線を説明するための図である。
【図４３】図４３は、凹みを有する物体の重合線を説明するための図である。
【図４４】図４４は、バッカス・ナウア記法で定義された、重合を考慮した辺連結体を表すデータの一例を示す図である。
【図４５】図４５は、射影重合多角形生成処理の処理フローを示す図である。
【図４６】図４６は、重合点特定処理の処理フローを示す図である。
【図４７】図４７は、境界点列を単調区間に分割した一例を示す図である。
【図４８】図４８は、単調区間数を説明するための図である。
【図４９】図４９は、投影面上での単調区間の交差を説明するための図である。
【図５０】図５０は、単調区間の交点を示す図である。
【図５１】図５１は、自己交差点に対応する重合点を説明するための図である。
【図５２】図５２は、複比を用いた座標の算出を説明するための図である。
【図５３】図５３は、単調区間の交点を示す図である。
【図５４】図５４は、重合点の追加を説明するための図である。
【図５５】図５５は、重合点の追加を説明するための図である。
【図５６】図５６は、重合点の追加を説明するための図である。
【図５７】図５７は、特異点を説明するための図である。
【図５８】図５８は、特異点を説明するための図である。
【図５９Ａ】図５９Ａは、特異点の特定を説明するための図である。
【図５９Ｂ】図５９Ｂは、特異点の特定を説明するための図である。
【図５９Ｃ】図５９Ｃは、特異点の特定を説明するための図である。
【図６０】図６０は、特異点を説明するための図である。
【図６１】図６１は、第２の実施の形態に係る重合面分特定処理の処理フローを示す図である。
【図６２】図６２は、重合面分特定処理を説明するための図である。
【図６３】図６３は、セグメント端点の内外判定を説明するための図である。
【図６４】図６４は、交差する重合線の分割を説明するための図である。
【図６５Ａ】図６５Ａは、重合線の追加及び面分の分割を説明するための図である。
【図６５Ｂ】図６５Ｂは、重合面分の関係を説明するための図である。
【図６６】図６６は、３つの重合面分を示す図である。
【図６７】図６７は、回転数を説明するための図である。
【図６８Ａ】図６８Ａは、第２の実施の形態に係る視線一価領域確定処理の処理フローを示す図である。
【図６８Ｂ】図６８Ｂは、第２の実施の形態に係る単純な視線一価領域確定処理の処理フローを示す図である。
【図６９】図６９は、第２の実施の形態に係る視線一価領域確定処理を説明するための図である。
【図７０】図７０は、第２の実施の形態に係る視線一価領域確定処理を説明するための図である。
【図７１】図７１は、マスクデータ生成処理の処理フローを示す図である。
【図７２】図７２は、マスクデータ生成処理を説明するための図である。
【図７３】図７３は、第２の実施の形態に係る処理フロー（後半）を示す図である。
【図７４】図７４は、描画処理を説明するための図である。
【図７５】図７５は、視線一価確定ボリュームが存在しない基底曲面の一例を示す図である。
【図７６】図７６は、視線一価簡易判定処理の処理フローを示す図である。
【図７７】図７７は、確定ボリューム生成処理の処理フローを示す図である。
【図７８】図７８は、平面の視線一価確定ボリュームを説明するための図である。
【図７９】図７９は、視線一価確定ボリュームを表すデータの一例を示す図である。
【図８０】図８０は、円弧掃引体の判断条件を説明するための図である。
【図８１】図８１は、円弧掃引体の視線一価確定ボリュームを示す図である。
【図８２】図８２は、球面の判断条件を説明するための図である。
【図８３】図８３は、球面の視線一価確定ボリュームを示す図である。
【図８４】図８４は、自由曲面の確定ボリューム生成処理の処理フローを示す図である。
【図８５】図８５は、自由曲面の参照軸を説明するための図である。
【図８６】図８６は、自由曲面の視線一価確定ボリュームを示す図である。
【図８７】図８７は、簡易判定処理の処理フローを示す図である。
【図８８】図８８は、コンピュータの機能ブロック図である。
【図８９】図８９は、テッセレーションを行う前の基底曲面及びトリム面の一例を示す図である。
【図９０】図９０は、三角形分割された基底曲面及びテッセレーションされたトリム面の一例を示す図である。
【発明を実施するための形態】
【００１２】
［実施の形態１］
図１に、本実施の形態に係る表示処理装置の機能ブロック図を示す。本実施の形態に係る表示処理装置は、ＣＡＤシステムにより生成された３次元モデルデータを格納している３次元モデル格納部１０１と、３次元空間内の視点データや照明データ等を格納している表示条件格納部１０３と、三角形生成部１０５と、処理途中のデータ等を格納するデータ格納部１０７と、ループ多角形生成部１０９と、視線一価領域生成部１１１と、マスク生成部１１３と、マスクデータ格納部１１５と、画像データ生成部１１７と、描画処理部１１９とを有する。
【００１３】
三角形生成部１０５は、３次元モデル格納部１０１に格納されている基底曲面のデータ及び表示条件格納部１０３に格納されているデータから、基底曲面を分割して三角形データを生成し、データ格納部１０７に格納する。また、ループ多角形生成部１０９は、３次元モデル格納部１０１に格納されているトリム面のデータ及び表示条件格納部１０３に格納されているデータから、表示するモデルの詳細度に応じてトリム面の境界を近似したループ多角形のデータを生成し、データ格納部１０７に格納する。そして、視線一価領域生成部１１１は、データ格納部１０７に格納された三角形データ及び表示条件格納部１０３に格納されているデータを用いて、投影面への写像が全単射であるという条件を満たす視線一価領域のデータを生成し、データ格納部１０７に格納する。さらに、マスク生成部１１３は、データ格納部１０７に格納された視線一価領域の境界データ及びループ多角形のデータを用いてマスクデータを生成し、マスクデータ格納部１１５に格納する。また、画像データ生成部１１７は、データ格納部１０７に格納された三角形データ及び表示条件格納部１０３に格納されている視点や照明のデータを用いて画像データを生成し、データ格納部１０７に格納する。そして、描画処理部１１９は、データ格納部１０７に格納された画像データ及びマスクデータ格納部１１５に格納されたマスクデータを用いて描画処理を行う。
【００１４】
ここで、視線一価領域について説明する。まず、視線一価（sight-line single-valuedness）とは、画素と表示対象とが１：１に対応することである。すなわち、視線一価であるとは、表示対象から投影面への写像が全単射（bijective , or one-to-one onto）であることを意味する。図２の例では、基底曲面１１０１を視点に対して投影面１１０３上に投影する場合、点Ｐ及び点Ｑが点（画素）Ｘに対応する。従って、この視点から見た基底曲面１１０１は視線一価とは言えない。この場合、画素Ｘのマスク情報で点Ｐ及び点Ｑの表示状態を制御すると、表示において両者に矛盾を生ずる。よって、以下で述べるように基底曲面を分割すると共にマスクを用いた表示制御を行うことにより、トリム面１１０２上にある点Ｐを表示し、トリム面１１０２上にない点Ｑは表示抑制する。一方、表示対象全体が視線一価であれば、このような問題は生じない。ここでは、視線一価である領域を視線一価領域と呼ぶこととする。
【００１５】
次に、図３乃至図２６Ｂを用いて、図１に示した表示処理装置の処理内容について説明する。なお、３次元モデル格納部１０１にはトリム面の集まりとして表される３次元モデルデータが、表示条件格納部１０３には視点データや照明データ等が予め格納されているものとする。
【００１６】
図３は、本実施の形態における処理の流れ（前半）を示したものである。まず、三角形生成部１０５では、３次元モデル格納部１０１から３次元モデルとして表された物体の一部に係る基底曲面のデータを取得し、三角形分割の処理が行われる（図３：ステップＳ１）。本実施の形態では、図４に示した基底曲面及びトリム面を例にして説明する。本ステップでは、例えば図５に示すように分割される。生成される三角形は、ｕ，ｖパラメタ空間又は３次元空間における点で表現される。なお、図５では均等なパラメタを用いて三角形に分割した例を示しているが、均等な三角形でなくてもよいし、できるだけ正三角形に近いような三角形に分割しても問題ない。生成された三角形データは、データ格納部１０７に格納される。
【００１７】
より詳細には、まず、表示する３次元モデルの詳細度に基づいて基底曲面の分割数を決定する。詳細度は、例えば表示条件格納部１０３に格納されている視点データ及び近似許容差に基づいて動的に決定する。詳細度の決定は当業者によく知られた技術であり、例えばShawn P Austin et al., Comparison of Discretization Algorithms for NURBS Surfaces with Application to Numerically Controlled machining, CAD vol. 29 no.1 pp. 71-83や特許４４３７５０４号公報に記載されている。
【００１８】
分割数が決定されると、分割点のｕ，ｖパラメタが算出できる。そして、算出されたｕ，ｖパラメタから三角形の頂点の座標が算出できる。当該座標計算も当業者にはよく知られた幾何学計算であり、例えばGerald Farin; Curves and Surfaces for Computer Aided Geometric Design, 2nd Edition, Academic Press Inc.. CA, USA, 1990に記載されている。
【００１９】
以上の処理によって算出された頂点をｕ，ｖ方向に接続すると、基底曲面を格子状に分割する四辺形が得られる。そして、当該四辺形の対角を同じ向きに結ぶと、図５に示した格子対角三角形（lattice diagonal triangles）が生成される。格子対角三角形は、ｕ，ｖパラメタに対応付けられたテーブル状の点の集まりとして表現できる。すなわち、３次元空間又はパラメタ空間中の点を２次元配列で表現できる。格子対角三角形は頂点の特定が容易であり、また、行あるいは列の三角形ストリップを用いた分割三角形の走査が可能であるため、高速処理に有利である。以下、基底曲面を格子対角三角形に分割したものとして説明を行う。なお、三角形ストリップとは高々二つの辺が共有される三角形の連結体を意味するものとする。
【００２０】
次に、ループ多角形生成部１０９は、３次元モデル格納部１０１から基底曲面上のトリム面を形成する外ループ及び内ループのデータを取得し、当該外ループ及び内ループを表示するモデルの詳細度に応じて近似してループ多角形（Loop Polygon）を生成する（図３：ステップＳ３）。ここでは、図６に示すように外ループ多角形１２０１並びに内ループ多角形１２０２及び１２０３が生成される。なお、トリム面の形状によっては内ループが存在しない場合もある。ループ多角形は、多くの場合、３次元空間中の点列として表現されるが、曲線又は曲面のパラメタの列で表現することも可能である。生成されたループ多角形のデータは、データ格納部１０７に格納される。
【００２１】
本ステップでも、まず外ループ及び内ループを形成する幾何曲線の分割数を決定する。ステップＳ１と同様に、表示状態における視点と近似許容差に基づいて動的に決定するものであり、ステップＳ１において決定された詳細度を基準に分割数を決めるようにしてもよい。
【００２２】
分割数が計算されると、分割点の曲線パラメタ又は座標値が算出できる。これもステップＳ１と同様に、当業者にはよく知られた幾何学計算技術によって実現できる。ここでは、図６における各辺の接続点に相当する分割点も算出される。すなわち、ループ多角形は基底曲面の分割三角形とは独立に、表示するモデルの詳細度に応じてループを近似して生成される（図６白丸）。なお、従来技術では図４の黒丸で示されているようにループ上に分割三角形との交点が付加されるが、本技術では図４の黒丸は付加されない。
【００２３】
なお、一般的に、表示対象の３次元モデルは複数のトリム面によって形成される。すなわち、隣接するトリム面は外ループに係る一部の辺を共有する。共有される辺について既に分割点が計算済みであるならば、同一の分割点を採用するようにしてもよい。
【００２４】
その後、視線一価領域生成部１１１は、視線一価領域生成処理を実施する（図３：ステップＳ５）。この視線一価領域生成処理については、図７乃至図９を用いて説明する。なお、本実施の形態で処理対象とする図４に示した基底曲面は、おもて面辺連結体及び裏面辺連結体がそれぞれ視線一価となる。
【００２５】
図７は、本実施の形態における視線一価領域生成処理を示す処理フローである。まず、視線一価領域生成部１１１は、データ格納部１０７に格納されており且つステップＳ１（図３）で生成した三角形データ、及び表示条件格納部１０３に格納されている視点データを取得し、三角形データ毎に表裏判定を行う（図７：ステップＳ１１）。判定結果を示すデータについては、例えばデータ格納部１０７に一時的に保持しておく。ここでは、図８に示すように、視点から三角形へのベクトルＶと、向き付けられた三角形の法線ベクトルＮとの内積である表裏判定内積（side discriminative inner product）を算出し、当該内積が負の値であればおもて面であると判定する。
【００２６】
なお、本ステップは、処理対象をおもて面に限定するために実施するものではない。特別な処理対象の場合、例えばＷＯ００／００２１６５に記載された、閉じた曲面に限定される場合は裏面を処理対象から除外することが行われる。しかしながら、ＣＡＤという技術分野を主な対象とする場合、一般的に裏面も表示することが要求される。
【００２７】
そして、視線一価領域生成部１１１は、データ格納部１０７に格納された表裏判定の結果を示すデータを用いて、辺を共有するおもて面同士又は裏面同士を連結し、おもて面辺連結体及び裏面辺連結体を生成する（図７：ステップＳ１３）。また、視線一価領域生成部１１１は、例えばおもて面辺連結体及び裏面辺連結体の境界点列のデータをデータ格納部１０７に格納する。ここでは、図９に示すように、基底曲面を分割することにより得られる三角形を用いて、おもて面が視点を向いている領域（白色の領域）と裏面が視点を向いている領域（ハッチングが施された領域）とが生成される。
【００２８】
規則性を持たない一般的な分割三角形の場合には、１つの三角形からアドバンシングフロント法によっておもて面辺連結体及び裏面辺連結体を生成することができる。一方、基底曲面を格子対角三角形に分割した場合は、格子の列方向又は行方向の三角形ストリップを利用した走査によって高速に処理することができる。
【００２９】
その後、視線一価領域生成部１１１は、データ格納部１０７に格納されたおもて面辺連結体及び裏面辺連結体の各々を視線一価領域として特定する（ステップＳ１５）。図４に示した基底曲面の場合は、図９に示したおもて面辺連結体及び裏面辺連結体がそれぞれ視線一価領域と特定される。また、データ格納部１０７に格納されたおもて面辺連結体及び裏面辺連結体を表す境界点列に関連付けて、視線一価領域であることを示すデータを登録する。そして、視線一価領域生成処理を終了し、図３の処理に戻る。
【００３０】
図３（処理フロー前半図）の処理に戻り、マスク生成部１１３は、データ格納部１０７に格納されている未処理の視線一価領域を１つ取得する（ステップＳ７）。なお、基底曲面全体が視線一価領域の場合は、基底曲面全体が取得される。また、マスク生成部１１３は、データ格納部１０７からループ多角形のデータも取得しておく。そして、マスク生成部１１３は、マスクデータ生成処理を実施する（ステップＳ９）。このマスクデータ生成処理については、図１０乃至図２０を用いて説明する。
【００３１】
図１０のマスクデータ生成処理において、まず、マスク生成部１１３は、取得した視線一価領域及びループ多角形の座標をスクリーン座標に変換し、変換後の座標をデータ格納部１０７に格納する（図１０：ステップＳ３１）。本ステップでは、図９のおもて面辺連結体が処理対象の視線一価領域である場合、図１１のようにスクリーン座標に変換される。また、図９の裏面辺連結体が処理対象の視線一価領域である場合、図１２のようにスクリーン座標に変換される。
【００３２】
次に、マスク生成部１１３は、データ格納部１０７に格納されている視線一価領域及びループ多角形のデータを用いて、内ループ及び外ループとおもて面辺連結体又は裏面辺連結体との間の集合積であるループ集合積を生成し、データ格納部１０７に格納する（図１０：ステップＳ３３）。ここでは、視線一価領域並びにこれと交差する外ループ多角形及び内ループ多角形を入力として、外ループ集合積及び内ループ集合積を得る。ループ集合積は、例えば、視線一価領域の境界点列とループ多角形の境界点列との多角形集合演算（Polygon Clipping）により生成することができる。多角形集合演算の実現方法は周知の技術であり、例えばBala R. Vatti, A Generic Solution to Polygon Clipping, Communication of the ACM, July 1992 (vol. 35), pp.56-63に、走査線算法を用いて、和差積の種類に応じて交差による切断片を選択する例が記載されている。なお、ステップＳ３３等で行う集合演算は、パラメタ空間、実体空間、カメラ座標系及びスクリーン座標系のいずれでも行うことが可能である。本実施の形態では、スクリーン座標系を採用するものとする。
【００３３】
本ステップでは、処理対象の視線一価領域に対して、図１３に示すような外ループ集合積及び図１４に示すような内ループ集合積が得られる。図１３では、破線で外ループ集合積の外形が示されている。そして、視線一価領域１３０１（ハッチングあり）が処理対象の場合、外ループ集合積１３０２（ハッチングあり）が生成され、視線一価領域１３０３（ハッチングなし）が処理対象の場合、外ループ集合積１３０４（ハッチングなし）が生成される。また、図１４では、太い実線で内ループ集合積の外形が示されている。そして、視線一価領域１４０１（ハッチングあり）が処理対象の場合、内ループ集合積１４０２（ハッチングあり）が生成され、視線一価領域１４０３（ハッチングなし）が処理対象の場合、内ループ集合積１４０４（ハッチングなし）及び１４０５（ハッチングなし）が生成される。
【００３４】
そして、図１のマスク生成部１１３は、マスクデータ格納部１１５のマスクデータを、全ての画素についてＯＮに初期化する（図１０：ステップＳ３５）。なお、マスクデータは画素単位でＯＮ又はＯＦＦに設定され、ＯＮに設定された画素は描画処理が抑制され、ＯＦＦに設定された画素は描画処理が行われるものとする。
【００３５】
また、マスク生成部１１３は、データ格納部１０７に格納された外ループ集合積の境界データを用いて、外ループ集合積の内部に相当するマスクデータをＯＦＦに設定する（図１０：ステップＳ３７）。なお、ループ多角形の内部の画素を特定する方法として、ループ多角形の三角形分割による方法（投影多角形三角形分割法）や、ループ多角形の走査線による塗り潰しによる方法（画素走査線法）がよく知られているが、これらの詳細は後述する。本ステップでは、図１３の視線一価領域１３０１が処理対象の場合、図１５の外ループ集合積１５０１の内部に相当する領域のマスクデータがＯＦＦに設定される。また、図１３の視線一価領域１３０３が処理対象の場合、図１５の外ループ集合積１５０２の内部に相当する領域のマスクデータがＯＦＦに設定される。スクリーン座標上で表すと、図１５の外ループ集合積１５０１には、図１６に示すようにＯＦＦが設定され、図１５の外ループ集合積１５０２には、図１７に示すようにＯＦＦが設定される。
【００３６】
図１３乃至図１７に示されているように、ステップＳ３７の外ループ集合積の境界には、ループとおもて面辺連結体又は裏面辺連結体との間の交点以外付加されていない。これに対して従来法では、図４に示されているように、テッセレーションをそのまま用いる方法にせよ、特許文献２に記載されたマスクを用いる方法にせよ、ループと分割三角形との間の交点が多数付加される。本実施の形態では、交点を付加するための交点計算時間や、表示又はマスクデータ生成のための三角形分割等にかかる時間が大幅に削減される。ここに本実施の形態の一つの効果が現れる。
【００３７】
さらにその後、図１のマスク生成部１１３は、データ格納部１０７に格納された内ループ集合積のデータを用いて、内ループ集合積の内部に相当するマスクデータをＯＮに設定する（図１０：ステップＳ３９）。なお、上でも述べたとおり、トリム面の形状によっては内ループが存在しない場合もある。内ループが存在しない場合、本ステップの処理は省略する。また、内ループ集合積の内部の画素を特定する方法としては、ステップＳ３７と同様に投影多角形三角形分割法や画素走査線法を用いることができる。本ステップでは、図１４の視線一価領域１４０１が処理対象の場合、図１８の内ループ集合積１６０１の内部に相当する領域のマスクデータがＯＮに設定される。また、図１４の視線一価領域１４０３が処理対象の場合、図１８の内ループ集合積１６０２及び１６０３の内部に相当する領域のマスクデータがＯＮに設定される。スクリーン座標上で表すと、図１８の内ループ集合積１６０１には図１９に示すようにＯＮが設定され、図１８の内ループ集合積１６０２及び１６０３には図２０に示すようにＯＮが設定される。そして、マスク生成部１１３は、未処理の内ループ集合積が存在するか判断し（図１０：ステップＳ４１）、存在する場合にはステップＳ３９の処理に戻る。ここでは、内ループの数だけステップＳ３９が繰り返される。一方、未処理の内ループ集合積が存在しない場合、マスクデータ生成処理を終了して図３の処理に戻り、端子Ａを介して図２１の処理に移行する。
【００３８】
なお、マスクデータを生成する処理は、ループ集合積の排他和によっても実現することができる。排他和を用いる例には、例えば特開平４−２８９９８４号公報がある。排他和を用いる場合は、マスクデータがＯＮの画素を表示しＯＦＦの画素を表示抑制するものとして、外ループ多角形及び内ループ多角形の内部をそれぞれＯＮに設定したデータを用いることで、本実施の形態に適用することができる。以上で図３（処理フロー前半図）の処理を終わり、図２１に進む。
【００３９】
図２１に本実施の形態の処理フロー（後半）を示す。画像データ生成部１１７は、データ格納部１０７から、基底曲面を分割することにより生成された三角形データのうち視線一価領域に含まれる未処理の三角形データを１つ取得する（図２１：ステップＳ２１）。そして、画像データ生成部１１７は、当該三角形の画像データを生成し、データ格納部１０７に格納する（ステップＳ２３）。ここでは、基底曲面を分割することにより生成され、データ格納部１０７に格納されている三角形データ、並びに表示条件格納部１０３に格納されている視点データ及び照明データを用いて、画像データを生成する。詳細には、処理対象の三角形を座標変換し、スクリーン座標で表す。また、スクリーン座標系における各画素に対応する三角形上の点について視点からの距離を算出し、奥行き情報（Ｚ値）として保持しておき、Ｚバッファの値と比較することで隠面消去に利用する。そして、画素の色情報を、例えば図２２に示すフォン反射モデル（Phong reflection model）により算出する。なお、出力光強度は、次の式で計算される。ただし、ここでは環境光は省略されている。
【００４０】
Ｃ＝ＫdＬdcosθ＋ＫsＬs（cosα）k
なお、Ｃ＝出力光強度、Ｌd＝拡散反射（diffuse reflection）光強度、Ｋd＝拡散反射率（正、１未満）、Ｋs＝鏡面反射率（正、１未満）、θ＝法線方向と光源方向のなす角、α＝鏡面反射光と視点方向のなす角、ｋ＝光沢度（滑らかで鏡面反射に近いほど大きい）とする。
【００４１】
以上の処理により、画素の位置、Ｚ値及び色情報が算出される。その後、描画処理部１１９は、データ格納部１０７に格納された画像データとマスクデータ格納部１１５に格納されたマスクデータとを用いてフレームバッファへの描画処理を行う（図２１：ステップＳ２５）。ここでは、マスクデータがＯＦＦの画素に対して、当該画素について保持されているＺバッファの値とＺ値とを比較し、Ｚ値の方が視点側に近い場合、当該画素の色情報でフレームバッファを更新する。また、当該Ｚ値でＺバッファを更新する。一方、マスクデータがＯＮの画素については描画を行わない。
【００４２】
その後、画像データ生成部１１７は、視線一価領域内の三角形について未処理のものが存在するか判断し（図２１：ステップＳ２７）、未処理の三角形があれば、ステップＳ２１の処理に戻る。一方、未処理の三角形が存在しない場合、マスク生成部１１３は、未処理の視線一価領域が存在するか判断し（ステップＳ２９）、未処理の視線一価領域があれば、端子Ｂを介してステップＳ７の処理に戻る。一方、未処理の視線一価領域が存在しない場合、処理を終了する。
【００４３】
以上の処理により、１つのトリム面が描画される。表示対象の３次元モデル全体を描画するためには、３次元モデルを形成する複数のトリム面に対してこのような処理を行う。また、例えば視点の位置や角度の変更、表示対象の拡大縮小等に伴い、３次元モデル全体に対してステップＳ５（図３）以降の処理を再度実施する。なお、ステップＳ１又はステップＳ３で用いる詳細度が変化する場合は、ステップＳ１又はステップＳ３の処理も再度実施する。また、基底曲面を分割することにより生成された三角形やトリム面の境界を近似することにより生成されたループ多角形について詳細度に応じた点列のデータを保持しておき、再計算を省略できるようにしてもよい。
【００４４】
ここで、ステップＳ３７及びＳ３９（図１０）で行うマスクデータの生成について、より詳細に述べる。
【００４５】
（Ａ）投影多角形三角形分割法
本方法では、投影されたループ集合積の境界が形成する多角形を三角形分割し、各三角形の内部に相当する画素のマスクデータを、例えば外ループの場合はＯＦＦに内ループの場合はＯＮに設定する。投影面におけるループ集合積の境界を図２３に示すが、白丸はループの分割点若しくはループとおもて面辺連結体又は裏面辺連結体との間の交点である。すなわち、従来法とは異なりループと分割三角形との間の交点を求めないため、従来法に比べて高速な処理が可能になる。図２３に示すループ集合積が、例えば図２４のように分割される。多角形の三角形分割は、特にループ集合積が凸多角形であることが分かっている場合（例えばループが円であることをＣＡＤデータから知ることができた場合）、図２５に示すように、任意の頂点と他の頂点とを結ぶ扇形三角形に分割できるため高速に実現可能である。また、一般的な多角形の三角形分割の方法として、単調なｙ角形を用いるｎ角形に関する計算量オーダＯ（ｎlogｎ）の平面走査線算法（plane scan line algorithm）と、一つの頂点に隣接する二つの頂点を結んだ線分が他の辺と交差しない三角形チップを順次探索する計算量オーダＯ（ｎ2）の耳切法（ear clipping）とがよく知られている。なお、ｎ角形は（ｎ−２）個の三角形に分割される。例えば、前者に関しては、ドバークほか著  浅野哲夫訳コンピュータ・ジオメトリ  近代科学社に、また後者に関してはDavid Eberly, Triangulation by Ear Clipping, Geometric Tools, LLC, Last Modified: March 1, 2008 （http://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdfから２０１０年１１月取得可能）に詳細な記載がある。
【００４６】
代表的な上記の２つの三角形分割法では、平面走査線算法の方が高速である。平面走査線算法は、自己交差を有しない単純な多角形を単調なｙ角形に変換し、単調なｙ角形を三角形分割する。また、上記の平面走査線アルゴリズムは、内ループを有する場合にもそのまま適用することができる。すなわち、複数の閉じた点列から構成される多角形に対して同一の平面走査線算法を適用することができる。なお、内ループ及び外ループの辺の数の合計がｎ個、内ループの数がｍ個の場合、（ｎ−２＋２ｍ）個の三角形に分割される。
【００４７】
上記の走査線アルゴルズムを用いて、外ループ集合積及び内ループ集合積に関して同時にマスクデータを生成することができ、ステップＳ３７乃至ステップＳ４１の各々を同時に実行するようにしてもよい。その処理速度は、内外別々に実行する場合に比べて大きな違いはない。
【００４８】
（Ｂ）画素走査法
本方法では、まず外ループ集合積の場合（ステップＳ３７）は、外ループ集合積の境界に対応する画素のマスクデータを例えばＯＦＦに設定する。図２６Ａの例では、境界点列上の画素のマスクデータがＯＦＦになる。その後、スクリーン座標系における画素を左から走査する。また、走査すると共に、マスクデータがＯＦＦの点列との（１からの）交点番号を算出し、当該交点番号が奇数である区間のマスクデータをＯＦＦに設定する。なお、例えば図２６Ａの黒丸のような極大極小点では交点番号を二つ設定する。図２６Ａに見るように、多角形内部の画素がＯＦＦになる。一方、内ループ集合積の場合（ステップＳ３９）は、（Ａ）投影多角形三角形分割法の場合と同様に、マスクデータをＯＮに設定する点が異なるのみである。
【００４９】
画素走査法の場合も、図２６Ｂに示すように外ループ集合積および内ループ集合積と走査線との交点番号を算出し、当該交点番号が奇数である区間のマスクデータをＯＦＦに設定することによって、ステップＳ３７乃至ステップＳ４１の各々を同時に実行するようにしてもよい。
【００５０】
以上のような処理を行うことによって、視線一価領域ごとにマスクデータの生成処理及びトリム面の描画処理を行うことができる。なお、視線一価領域同士の重なりは、例えばＺバッファを用いた隠面消去により処理される。本実施の形態で例示した単純な物体であれば、上でも述べたとおり、おもて面が視点側を向いた領域と裏面が視点側を向いた領域とをそれぞれ視線一価領域であると判断する。そして、各視線一価領域に対し、トリム面上（外ループの内側且つ内ループの外側）か否かに基づいてマスクデータを生成する。マスクデータは、トリム面の近似点列（外ループ多角形及び内ループ多角形）と視線一価領域（おもて面辺連結体又は裏面辺連結体の境界点列）との集合演算により生成される。基底曲面を分割することにより得られた三角形毎にループ多角形との交点を求める場合と比較すると、本実施の形態ではループ多角形と三角形の各々との交差計算を行わないため、交差する三角形の数が多くなるほど処理負荷の軽減効果がある。
【００５１】
［実施の形態２］
実施の形態１の表示対象は、おもて面辺連結体及び裏面辺連結体がそれぞれ視線一価であったが、おもて面辺連結体又は裏面辺連結体が視線一価にならない場合もあり得る。図２７に示す「襞」が現れる例では、おもて面が視点側を向いた連続する面の一部に、図示された視点からは重なって見えない部分が存在する。なお、図２７において、黒丸は視点を表し、白丸は視線と基底曲面との交点を表している。また、ハッチングが施された領域は、裏面が視点側を向いており、裏面辺連結体となる。例えば、図示された視線を辿ると、まず手前のおもて面との交点が存在し、次に裏面との交点が存在し、最後に奥のおもて面との交点が存在する。すなわち、この基底曲面から生成されるおもて面辺連結体の投影面への写像は、全単射でない。
【００５２】
同様に、図２８に示す中央部に上方へ向かう突起がある例の場合も、図示された視点から見た場合におもて面同士の重なる部分がある。図２８では、一点鎖線でパラメタ一定線を示しており、図２８の基底曲面は中央が上に凸になった形状であることがわかる。なお、図２８においても、黒丸は視点を表し、白丸は視線と基底曲面の交点を表している。また、ハッチングが施された領域は裏面が視点側を向いており裏面辺連結体となる。図示された２つの視線はおもて面と裏面との境界及びおもて面を通るものであり、この基底曲面から生成されるおもて面辺連結体の投影面への写像も全単射でない。
【００５３】
本実施の形態では、視線一価でないおもて面辺連結体又は裏面辺連結体を視線一価領域に分割した上で、マスク生成処理及び描画処理を行う。
【００５４】
図２９に、本実施の形態に係る表示処理装置の機能ブロック図を示す。本実施の形態に係る表示処理装置は、ＣＡＤシステムにより生成された３次元モデルデータを格納している３次元モデル格納部１０１と、３次元空間内の視点データや照明データ等を格納している表示条件格納部１０３と、三角形生成部１０５と、処理途中のデータ等を格納するデータ格納部１０７と、ループ多角形生成部１０９と、簡易判定前処理部１２１と、視線一価領域生成部１２３と、マスク生成部１１３と、マスクデータ格納部１１５と、画像データ生成部１１７と、描画処理部１１９とを有する。また、簡易判定前処理部１２１を有しない場合もある。なお、実施の形態１と同様の処理を行う構成要素には、同じ符号を付してある。
【００５５】
三角形生成部１０５は、３次元モデル格納部１０１に格納されている基底曲面のデータ及び表示条件格納部１０３に格納されているデータから、基底曲面を分割して三角形データを生成し、データ格納部１０７に格納する。また、ループ多角形生成部１０９は、３次元モデル格納部１０１に格納されているトリム面のデータ及び表示条件格納部１０３に格納されているデータから、トリム面を近似したループ多角形のデータを生成し、データ格納部１０７に格納する。そして、簡易判定前処理部１２１は、３次元モデル格納部１０１に格納されている基底曲面のデータを用いて、当該基底曲面全体が視線一価となる視点であることが保証される座標の範囲を計算し、データ格納部１０７に格納しておく。また、視線一価領域生成部１２３は、データ格納部１０７に格納された三角形データ及び表示条件格納部１０３に格納されているデータを用いて、投影面への写像が全単射であるという条件を満たす視線一価領域のデータを生成し、データ格納部１０７に格納する。視線一価領域生成部１２３は、簡易判定前処理部１２１が計算したデータを用いて、基底曲面全体が視線一価となるか判断するようにしてもよい。さらに、マスク生成部１１３は、データ格納部１０７に格納された視線一価領域のデータ及びループ多角形のデータを用いてマスクデータを生成し、マスクデータ格納部１１５に格納する。また、画像データ生成部１１７は、データ格納部１０７に格納された三角形データ及び表示条件格納部１０３に格納されている視点や照明のデータを用いて画像データを生成し、データ格納部１０７に格納する。そして、描画処理部１１９は、データ格納部１０７に格納された画像データ及びマスクデータ格納部１１５に格納されたマスクデータを用いて描画処理を行う。
【００５６】
次に、図３０乃至図７４を用いて、図２９に示した表示処理装置の処理内容について説明する。本実施の形態でも、３次元モデル格納部１０１にはトリム面の集まりとして表される３次元モデルデータが、表示条件格納部１０３には視点データや照明データ等が予め格納されているものとする。また、本実施の形態では、図３０に示すような基底曲面を処理対象の例として説明する。なお、図示された黒丸は視点を表し、白丸は視線と基底曲面との交点を表している。視点から見た図３０の基底曲面は、全体がおもて面であるが、一部は交差して重なっている。
【００５７】
図３１は、本実施の形態における処理フロー（前半）である。まず、三角形生成部１０５は、３次元モデル格納部１０１から３次元モデルとして表された物体の一部に係る基底曲面のデータを取得し、三角形分割を行う（図３１：ステップＳ５１）。また、生成された三角形データは、データ格納部１０７に格納される。本ステップの処理は、実施の形態１のステップＳ１（図３）の処理と同様である。ここでは、図３０に示した基底曲面が三角形分割される。
【００５８】
次に、ループ多角形生成部１０９は、３次元モデル格納部１０１から基底曲面上のトリム面を形成する外ループ及び内ループのデータを取得し、当該外ループ及び内ループを近似してループ多角形を生成する（図３１：ステップＳ５３）。生成されたループ多角形のデータは、データ格納部１０７に格納される。本ステップの処理は、ステップＳ３と同様である。本実施の形態では、図３０に示した基底曲面全体がトリム面であるものとして説明する。
【００５９】
その後、視線一価領域生成部１２３は、視線一価領域生成処理を実施する（ステップＳ５５）。この視線一価領域生成処理については、図３２乃至図６５Ｂを用いて説明する。
【００６０】
まず、視線一価領域生成部１２３は、視線一価簡易判定処理（オプション）を実施する（図３２：ステップＳ６１）。本ステップでは、基底曲面全体が視線一価であるか簡易判定する。当該視線一価簡易判定処理の内容については、後で説明する。そして、視線一価領域生成部１２３は、基底曲面全体が視線一価領域であるか判断する（図３２：ステップＳ６３）。例えば、ステップＳ６１において簡易判定フラグを設定しておき、本ステップでは当該簡易判定フラグに基づいて処理を分岐させる。
【００６１】
基底曲面全体が視線一価領域であると判断された場合、視線一価領域生成部１２３は、基底曲面全体が視線一価領域であることを示すデータを設定する（図３２：ステップＳ６５）。ここでは、ステップＳ５１（図３１）で生成された三角形からおもて面辺連結体又は裏面辺連結体を生成し、当該おもて面辺連結体又は裏面辺連結体の境界点列を表すデータをデータ格納部１０７に格納すると共に、視線一価領域であることを示すデータを登録する。その後、端子Ｆを介して図３３の処理へ移行し、視線一価領域生成処理を終了して図３１の処理に戻る。
【００６２】
一方、基底曲面全体が視線一価領域でない場合、端子Ｅを介して図３３の視線一価領域生成処理（後半）へ移行する。なお、図３２において破線で示したステップＳ６１乃至ステップＳ６５の処理は必須でない。これらの処理を行わずに、端子Ｅを介して図３３の視線一価領域生成処理（後半）に移行してもよい。
【００６３】
図３３の視線一価領域生成処理（後半）に移行して、視線一価領域生成部１２３は、データ格納部１０７に格納されているステップＳ５１（図３１）で生成した三角形データ、及び表示条件格納部１０３に格納されている視点データを取得し、三角形データ毎に表裏判定を行う（図３３：ステップＳ７１）。本ステップの処理は、ステップＳ１１（図７）と同様である。ここでは、図３０に示した基底曲面全体がおもて面であると判定されたものとする。
【００６４】
そして、視線一価領域生成部１２３は、データ格納部１０７に格納された表裏判定の結果を示すデータを用いて、辺を共有するおもて面同士又は裏面同士を連結し、おもて面辺連結体及び裏面辺連結体を生成する（図３３：ステップＳ７３）。また、視線一価領域生成部１２３は、例えばおもて面辺連結体及び裏面辺連結体の境界点列のデータをデータ格納部１０７に格納する。本ステップの処理は、ステップＳ１３（図７）と同様である。ここでは、図３０に示した基底曲面全体から１つのおもて面辺連結体が生成されたものとする。
【００６５】
なお、図３４に示すような起伏のある形状では、１つの基底曲面から複数のおもて面辺連結体又は複数の裏面辺連結体が生成されることもある。図３４では、ハッチングが施された中央の領域は黒丸で示した視点に対して裏面を向いており、裏面辺連結体となる。そして、その両側の白色の２つの領域は視点に対しておもて面を向いており、おもて面辺連結体となる。
【００６６】
ここで、おもて面辺連結体及び裏面辺連結体の境界点列表現について具体例を挙げておく。図２８に示した中央部に上方へ向かう突起を有する基底曲面では、おもて面（おもて面が視点側を向いた領域）の内側に裏面（裏面が視点側を向いた領域）が存在する。このように、基底曲面に凹凸がある場合、おもて面に囲われた裏面や裏面に囲われたおもて面が現れることがある。このおもて面と裏面との境界を表裏境界と呼ぶこととし、図２８のように閉じた表裏境界を閉表裏境界と呼ぶこととする。また、例えば図２８の外周のように、基底曲面の境界に相当する、おもて面辺連結体又は裏面辺連結体の境界を曲面境界と呼ぶこととする。一方、図２７に示した基底曲面の表裏境界のように、曲面境界上の２点を結ぶ表裏境界を、開表裏境界と呼ぶこととする。
【００６７】
おもて面辺連結体及び裏面辺連結体の境界は、曲面境界、閉表裏境界及び開表裏境界により表すことができる。また、曲面境界、閉表裏境界及び開表裏境界は、基底曲面を分割することにより得られた三角形の頂点の集まり（点列，polyline）として表現することができる。
【００６８】
従って、おもて面辺連結体及び裏面辺連結体は、例えば図３５のように、文脈自由文法の構文を表現するバッカス・ナウア（Backus-Naur）記法を用いて表現することができる。ここで、境界点列は、例えばｕ，ｖパラメタ平面上で反時計回りになるような順序で表すものとする。ここで、図３５のφは空であることを表す記号である。なお、図２８のように、おもて面辺連結体又は裏面辺連結体が他の裏面辺連結体又はおもて面辺連結体を包含する場合、前者は後者を再帰的に用いて表現することができる。このような包含を表す関係情報の生成は、外側の境界点列から内側の各境界点列への並列型のポインティングでも実現できるし、外側の境界点列から内側の境界点列及び内側の境界点列間を関連付ける直列型のポインティングでも実現可能である。保持されるデータは、ソリッドモデリングにおける例えばウイングドエッジ構造等と同型であり、当業者には公知の技術である。なお、図３５に示したデータ構造は、重合（後述）を考慮しない状態に対応しており、実施の形態１においても採用することができる。また、後に重合を考慮した段階で、図３５に示したデータ構造は図４４に示すデータ構造に拡張される。
【００６９】
図２７及び図２８に示した基底曲面から生成されるおもて面辺連結体をパラメタ平面上に模式的に表すと、図３６及び図３７のようになる。図３６のおもて面辺連結体は、細線で表された曲面境界１７０２と曲面境界１７０２上の２点を結ぶ太線で表された開表裏境界１７０１とで形成され、境界点列として表される。なお、図示した黒丸は開表裏境界点であり、白丸は曲面境界点である。図３７のおもて面辺連結体は、細線で表された曲面境界１７０４と曲面境界１７０４の内部に存在する太線で表された閉表裏境界１７０３とで形成され、境界点列として表される。なお、図示した黒丸は閉表裏境界点であり、白丸は曲面境界点である。また、閉表裏境界１７０３は、おもて面辺連結体に囲われた裏面辺連結体の境界点列として表される。ステップＳ７３（図３３）では、おもて面辺連結体又は裏面辺連結体を表すデータとして、このような境界点列データを格納するものとする。
【００７０】
辺連結体などの表現方法の説明から処理の説明に戻り、視線一価領域生成部１２３は、データ格納部１０７から未処理のおもて面辺連結体又は裏面辺連結体を１つ取得する（図３３：ステップＳ７５）。ここでは、図３０に示した基底曲面全体から生成された１つのおもて面辺連結体が取得されたものとする。そして、視線一価領域生成部１２３は、射影重合多角形生成処理を実施する（ステップＳ７７）。この射影重合多角形生成処理については、図４５乃至図５６を用いて説明する。
【００７１】
射影重合多角形生成処理では、おもて面辺連結体又は裏面辺連結体の一部に視線一価でない部分がある場合、おもて面辺連結体又は裏面辺連結体を複数の視線一価領域に分割する。具体的には、曲面境界又は表裏境界に沿って走査しつつ、当該曲面境界又は表裏境界をおもて面辺連結体又は裏面辺連結体上に射影した線分の集まりである重合線（superposition polyline）を特定し、当該重合線でおもて面辺連結体又は裏面辺連結体を分割する。
【００７２】
例えば、図３０の基底曲面から生成されたおもて面辺連結体の場合は、図３８に示すように重合線１８０１乃至１８０４が特定される。そして、ハッチングが施された手前の面と奥の面とが異なる視線一価領域に属するように、おもて面辺連結体が分割される。なお、このように視点から見たときに重なる手前の面と奥の面とを重合面（superposition faces）と呼ぶこととする。また、図３８のおもて面辺連結体は、例えば投影面上では図３９のように表すことができ、パラメタ平面上では図４０のように表すことができる。図３９において、点ｖ1乃至ｖ4、辺ｅ1乃至ｅ4及び面ｆ1は手前に、点ｖ1＊乃至ｖ4＊、辺ｅ1＊乃至ｅ4＊及び面ｆ1＊は奥に存在するものとし、重なった点、辺及び面は、パラメタ平面上では図４０に示すように対応する。
【００７３】
なお、図２７の基底曲面の場合は、図４１に示すように重合線１９０１及び１９０２が特定される。図４１では、裏面辺連結体に対してハッチングが施されている。そして、黒丸を視点として、おもて面辺連結体上に表裏境界線を射影すると、重合線１９０１及び１９０２が特定される。
【００７４】
また、図２８の基底曲面の場合は、図４２に示すように重合線２００１が特定される。図４２でも、裏面辺連結体に対してハッチングが施されている。そして、黒丸を視点として、おもて面辺連結体上に表裏境界線を射影すると、重合線２００１が特定される。
【００７５】
さらに、図４３に基底曲面の中央が凹になり且つ凹部の先が黒丸で示した視点から見えるような形状の例を示す。図４３でも裏面辺連結体に対してハッチングが施されており、基底曲面内部に表裏境界線を有する。また、おもて面辺連結体上に表裏境界線を射影すると、曲面境界と接する重合線２１０１及び閉表裏境界に接する重合線２１０２が特定される。
【００７６】
図３５に示した境界点列データのデータ構造に対して重合線及び重合面を表すデータを追加したデータ構造の一例を、拡張バッカス・ナウア記法を用いて図４４に示す。この例では、おもて面辺連結体又は裏面辺連結体を視線一価となる面分に分割し、視点を基準とした前後関係を表す情報等も保持させるようになっている。
【００７７】
図４５に示す射影重合多角形生成処理に入り、視線一価領域生成部１２３は、処理対象のおもて面辺連結体又は裏面辺連結体を例えば投影面に射影し、射影境界点列のデータをデータ格納部１０７に格納する（図４５：ステップＳ９１）。ここでは、おもて面辺連結体又は裏面辺連結体の境界点列に対して射影行列（射影変換行列）を作用させ、投影面上の境界点列を算出する。上でも述べたとおり、図３９に示すような投影面上の境界点列が算出される。なお、投影面の代わりに、視点を含まない平面であれば異なる平面を用いることができる。
【００７８】
そして、視線一価領域生成部１２３は、重合点特定処理を実施する（図４５：ステップＳ９３）。この重合点特定処理については図４６乃至図５６を用いて説明する。
【００７９】
視線一価領域生成部１２３は、重合点を計算する。この計算は、セグメントの組の総当たり計算でも行うことができるが、例えば次のような工程を踏むと効率がよい。すなわち、ステップＳ９１（図４５）で求めた射影境界点列を例えば反時計回りに任意の点から走査し、ｘ座標の値が単調増加若しくは単調減少する区間、又はｙ座標の値が単調増加若しくは単調減少する区間に分割し、分割後の境界点列を表す情報をデータ格納部１０７に格納する（図４６：ステップＳ１０１）。例えば、図３９に示したおもて面辺連結体をｙ座標の値が単調増加する区間又は単調減少する区間で分割すると、図４７のようになる。図４７では、上下方向をｙ軸方向として、ｙ座標の値が単調増加する区間（すなわち減少しない区間）と、ｙ座標の値が単調減少する区間（すなわち増加しない区間）とに分割されている。なお、黒丸で示したｖa乃至ｖdは区間の端点であり、単調区間数は４である。
【００８０】
そして、以下のように重合点の有無の簡易判定を行うと処理効率がよい。すなわち、視線一価領域生成部１２３は、ステップＳ１０１で分割したｘ軸方向又はｙ軸方向の単調区間数が２以下であるか判断する（ステップ１０３）。単調区間数が２以下の場合、視線一価領域生成部１２３は、重合点特定処理を終了し、図４５の射影重合多角形生成処理に戻る。
【００８１】
ここで、図４８は、ｙ座標の値についての単調区間が２であり、且つ射影境界点列が交差する形状を示している。なお、黒丸は単調区間の境界を示している。図４８のように、もしも区間数が２であって投影面上で射影境界点列が交差するとすれば、そもそもその表示対象はおもて面辺連結体又は裏面辺連結体でない。すなわち、おもて面辺連結体又は裏面辺連結体の場合、単調区間数が２以下であれば、境界点列は投影面上で交差せず全体が視線一価であると判断できる。
【００８２】
一方、ｘ軸方向又はｙ軸方向の単調区間数が２より大きい場合、視線一価領域生成部１２３は、単調区間の未処理の組合せをデータ格納部１０７から取得する（ステップＳ１０５）。本ステップでは未処理の単調区間の組合せを１組取得し、後のステップにおいて処理対象の単調区間同士が投影面上で交差するか判断する。
【００８３】
次に、視線一価領域生成部１２３は、処理対象の組合せに係る単調区間が投影面上で交差するか判断する（図４６：ステップＳ１０７）。ここでは、各単調区間中の隣り合う射影境界点間の線分であるセグメント同士を順次突き合わせ処理する。なお、セグメントの端点で隣り合うセグメント同士は接続されるが、本ステップでは当該端点について交差しているとは判断しない。また、同一単調区間中のセグメント同士が交差することはない。
【００８４】
図４９の例では、例えば単調区間ｖaｖbと単調区間ｖcｖdとの組合せについて処理を行う場合、ｖa及びｖcを起点としてセグメント同士の突合せ処理を行う。例えば、ｙ座標の値でソートされたセグメントについてマッチング処理を行えば、例えばセグメントの全ての組合せについて交差判定を行うよりも処理効率がよい。具体的には、まずセグメントｖaｖa1とセグメントｖcｖc1との組合せについて交差判定し、交差しないと判断される。次に、セグメントｖa1ｖa2とセグメントｖcｖc1との組合せについて交差判定し、交差しないと判断される。そして、セグメントｖa1ｖa2及びセグメントｖc1ｖc2、セグメントｖa2ｖa3及びセグメントｖc1ｖc2・・・と順次交差判定し、セグメントｖa3ｖa4及びセグメントｖc1ｖc2が交差すると判断される。その後、セグメントｖa7ｖb及びセグメントｖc2ｖdの組合せまで交差判定を行い、単調区間の本組合せについてステップＳ１０７の処理が完了する。
【００８５】
単調区間が交差しない場合、処理はステップＳ１１７（図４６）に移行する。一方、単調区間が交差する場合、視線一価領域生成部１２３は、投影面上の交点座標を算出する（図４６：ステップＳ１０９）。ここでは、図５０に白丸で示す交点が特定されたものとする。このような投影面上の交点を、以下では自己交差点（self-intersection point）と呼ぶことにする。
【００８６】
そして、視線一価領域生成部１２３は、重合点を算出する。例えば、当該自己交差点座標を、セグメントのパラメタ座標に変換し、空間座標に変換することによって算出する（ステップＳ１１１）。ここでは、図５０に白丸で示した自己交差点の座標から、図５１に白丸で示すようなパラメタ平面上の２つの座標ｖ1及びｖ1＊が特定される。なお、このような自己交差点に対応する境界点列上の２点を重合点と呼ぶこととする。
【００８７】
具体的には、複比保存則を用いて投影面上の座標をセグメントのパラメタ座標に変換する。すなわち、図５２に示すように、セグメントの両端点を０及び１とするパラメタｔが定める直線上の４点の複比と、投影面に射影された４点の複比とが不変であるという性質を利用して、パラメタ座標ｔへの変換を行う。なお、複比の算出には４点を用いるため、通常一点不足するのでセグメントの端点や交点に加えて、例えばセグメントの中点などの補助の射影点も用いる。以上のような処理により、基底曲面を分割することにより得られた三角形上に、投影面上の点を射影することができる。このような基底曲面（基底曲面を分割することにより得られた三角形）への射影を、以下では曲面射影と呼ぶこととする。
【００８８】
その後、視線一価領域生成部１２３は、視点から交点座標に対応する２点への３次元空間内の距離を算出する（図４６：ステップＳ１１３）。ここでは、ステップＳ１１１で求めた重合点の座標を用いて、視点からｖ1及びｖ1＊への３次元空間での距離を算出する。そして、視線一価領域生成部１２３は、投影面上の交点に対応する２点を境界点列上に追加する。ここで、視点から見た重なりの前後を示す識別子を付与し（ステップＳ１１５）、後の重合面分取得順序設定に利用できるようにしてもよい。重合点及び識別子のデータは、例えば図４４に示した構造の境界点列データに追加され、データ格納部１０７に格納される。対応する重合点は、視点からの距離を基に境界点列データのリスト構造を辿ることで特定できる。図５１の例では、対応する２つの重合点のうち視点から遠い方の点に「＊」が付されており、図４４に示したデータ構造では、「視点側頂点」又は「反視点側頂点」といった順序情報として登録される。また、重合点等により分割された境界点列の一部又は重合線の点列の一部を、部分境界点列と呼ぶこととする。
【００８９】
そして、ステップＳ１０７（図４６）においてセグメントが交差しないと判断された場合、又はステップＳ１１５の後、視線一価領域生成部１２３は、セグメントの未処理の組合せが存在するか判断する（ステップＳ１１７）。未処理の組合せが存在しない場合、重合点特定処理（図４６）を終了して図４５の射影重合多角形生成処理に戻る。一方、未処理の組合せが存在する場合、ステップＳ１０５の処理に戻る。ステップＳ１０５乃至ステップＳ１１７の処理を繰り返すことにより、図５３に示す投影面上の交点が特定され、図５４に示す重合点ｖ1乃至ｖ4及びｖ1＊乃至ｖ4＊が追加される。
【００９０】
ここで、重合点特定処理と図４４に示した境界点列データのデータ構造との関係について述べておく。重合点特定処理を実施する前の境界点列データは、図４４に示したデータ項目のうち、ソリッドモデリングにおける頂点に対応する重合点等を表す情報、エッジに対応する部分境界点列を表す情報、フェースに対応する面分を表す情報等を有していない。これに対して、境界点列データにおいて重合点が付加されると、部分境界点列及び面分が追加される。図５５を用いてパラメタ平面上に示すと、重合点ｖ1が付加されると、破線で範囲を示した部分境界点列ｂ1及び実線で囲われた面分ｆ1が追加される。また、部分境界点列ｂ1には接続される面分ｆ1が１つ対応するため、位相情報として部分境界点列と面分との接続情報が保持される。そして、図５６に示すように、対応する重合点ｖ1＊が境界点列にさらに付加されると、部分境界点列ｂ1及びｂ2の２つに分割される。このとき、境界点列データにおいて、部分境界点列ｂ1と面分ｆ1との接続情報は変更されず、分割された部分境界点列ｂ2と面分ｆ1との接続情報が追加される。このような重合点追加の位相処理は、ソリッドモデリングにおけるエッジ分割処理に相当し、当業者には公知の技術である。
【００９１】
図４５の射影重合多角形生成処理に戻り、視線一価領域生成部１２３は、データ格納部１０７に格納されたおもて面辺連結体又は裏面辺連結体の境界点列データを基に、処理対象の辺連結体に重合点が存在するか判断する（図４５：ステップＳ９５）。なお、重合点が存在しなければ、処理対象のおもて面辺連結体又は裏面辺連結体は視線一価である。重合点が存在しない場合、射影重合多角形生成処理を終了し、図３３の視線一価領域生成処理（後半）に戻る。
【００９２】
一方、重合点が存在する場合、視線一価領域生成部１２３は、データ格納部１０７に格納されたおもて面辺連結体又は裏面辺連結体のデータから、表裏境界上の特異点を探索する（図４５：ステップＳ９７）。ここで、表裏境界線と重合線とが接する点を特異点（singularity point）と呼ぶこととする。すなわち、特異点とは、視点から重なって見える表裏境界線及び重合線のうち、手前に存在する線分と奥に存在する線分とが１点に縮退した点である。図５７に、図２７の基底曲面のうちおもて面辺連結体を投影面上に表した模式図を示す。なお、ハッチングが施された領域は重合面を示している。図５７の例では、ｖ13が特異点であり、ｖ11及びｖ11＊が重合点である。また、図５７は図５８のようにパラメタ平面上に表すことができ、境界点列ｖ11ｖ12ｖ13ｖ11＊と、重合線ｖ11＊ｖ12＊ｖ13ｖ11とが、ｖ13１点で接している。
【００９３】
次に、特異点を特定するための処理について説明する。まず、特異点では、表裏境界上の１頂点から当該１頂点に隣接する２つの頂点へ至るベクトルと視線ベクトルとが形成する２つの平面の各々が、当該表裏境界上の１頂点を含み隣接する２頂点を含まない三角形と交差する。ステップＳ９７では、表裏境界上の点列を走査し、このような条件を満たす点を探索する。
【００９４】
ここで、特異点に関する条件について図５９Ａ乃至図５９Ｃを用いて説明する。図５９Ａ乃至図５９Ｃにおいて、Ｐ1、Ｐ2、Ｐ3、Ｐ11、Ｐ12及びＰ13は、基底曲面を分割することにより生成された三角形の頂点を表している。また、Ｐ1、Ｐ2及びＰ3は表裏境界上の点であり、Ｐ11、Ｐ12及びＰ13は辺連結体内部の点である。また、ハッチングが施された三角形Ｘ1及びＸ2は、表裏境界上の１点Ｐ2を含み、Ｐ2に隣接する２点Ｐ1及びＰ3を含まない三角形である。なお、点Ｑは視点を表している。
【００９５】
ステップＳ９７（図４５）では、表裏境界上の点列を走査し特異点を探索する。図５９Ａでは、太線で示された表裏境界線上の点Ｐ1、Ｐ2及びＰ3が上で述べた条件を満たすか判断する。Ｐ2が処理対象であるとき、まず、図５９Ｂに示すように、視点Ｑから点Ｐ2へのベクトルとＰ2から隣接する点Ｐ1へのベクトルとが形成する第１の平面が、三角形Ｘ1又はＸ2と交差するか判断する。ここでは、交線１８０１で交差するものとする。また、図５９Ｃに示すように、視点Ｑから点Ｐ2へのベクトルと、Ｐ2から隣接する点Ｐ3へのベクトルとが形成する第２の平面が、三角形Ｘ1又はＸ2と交差するか判断する。ここでは、交線１８０２で交差するものとする。このように、２つの平面がそれぞれ条件を満たす場合、点Ｐ2は特異点であると判断される。なお、図５９Ａ乃至図５９Ｃは、例えば図５７及び図５８における点ｖ13周辺を拡大したものに相当し、図５９Ａ乃至図５９Ｃの点Ｐ2は図５７及び図５８の点ｖ13に相当する。
【００９６】
なお、おもて面辺連結体の内側に裏面辺連結体が存在する図２８に示したような場合も、図５９Ａ乃至図５９Ｃを用いて説明した条件に基づいて特異点を探索することができる。また、中心部に上方へ凸な形状を有する場合の図６０に示すように、特定された特異点は、表裏境界線と重合線（太い実線）との接点である。また、データ格納部１０７に格納された境界点列データに対し、特異点であることを示す識別子を付与する。そして、特異点により、部分境界点列はさらに２つの部分境界点列に分割されるものとする。なお、この特異点追加の位相処理はソリッドモデリングにおけるエッジ分割処理に相当し、当業者には公知の技術である。
【００９７】
その後、視線一価領域生成部１２３は、重合面分特定処理を実施する（図４５：ステップＳ９９）。この重合面分特定処理で図６１の処理フローに進む。その処理については、図６１乃至図６７を用いて説明する。
【００９８】
重合面分特定処理では、重合点又は特異点から境界点列を走査して、おもて面辺連結体又は裏面辺連結体の内部に射影される重合線を特定し、当該重合線により辺連結体を分割する。そして、分割された面分のうち投影面上で重なる重合面分に対し対応関係を登録する。
【００９９】
図６１に重合面分特定処理の処理フローを示す。まず、視線一価領域生成部１２３は、データ格納部１０７に格納された境界点列データから重合点又は特異点を端点とする未処理のセグメントを１つ取得する（図６１：ステップＳ１２１）。図６２に示す例では、重合点ｖ1を端点とするセグメントｖ1ｘが取得されたものとする。そして、視線一価領域生成部１２３は、取得したセグメントが例えば投影面上においておもて面辺連結体又は裏面辺連結体の内部に射影されるか判断する（ステップＳ１２３）。ここでは、セグメントの一端である重合点又は特異点とは反対側の端点が、投影面においておもて面辺連結体又は裏面辺連結体の内部に射影されるか判定する。具体的には、図６３に示すように、投影面に射影された表裏境界点ｖ1及びｖ2と、曲面境界点ｗ1及びｗ2と、自己交差点ｘと、おもて面辺連結体の法線ベクトルｎとを用いて、以下に示す式（１）の値が正であれば、ｖ2がおもて面辺連結体の内部に存在すると判断する。
【数１】
2012073363.tif 000099
【０１００】
辺連結体内部へ射影されない場合、処理はステップＳ１３５（図６１）へ移行する。一方、辺連結体内部へ射影される場合、視線一価領域生成部１２３は、処理対象のセグメントの曲面射影を行う（ステップＳ１２４）。図６２を用いてパラメタ平面上に表すと、ステップＳ１２４において、セグメントｖ1ｘは重合線ｖ1＊ｘ＊として辺連結体内部へ射影される。そして、視線一価領域生成部１２３は、射影された重合線が他の重合線と交差するか判断する（ステップＳ１２５）。図６２の例では、他の重合線とは交差しないと判断される。交差しない場合、ステップＳ１２９の処理に移行する。一方、交差する場合、視線一価領域生成部１２３は、データ格納部１０７に格納された境界点列データにおいて重合線の点列の交点に重合点を追加し、当該重合点で重合線を分割する（ステップＳ１２７）。
【０１０１】
ここで、例えば図６４に示すように、重合線同士が交差する場合がある。図６４の例では、既に重合線・・・ｐ25ｐ26ｐ27ｐ28・・・が射影されており、新たに重合線ｖ21ｐ21ｐ22ｐ23ｐ24が射影されたものとする。その後、重合線ｐ23ｐ24が射影され、ステップＳ１２５において交差判定が行われると、既に存在する重合線と交差したと判断される。そして、ステップＳ１２７（図６１）において、データ格納部１０７の境界点列データにおいて重合線の部分境界点列に交点ｑ21が追加されると共に、部分境界点列はさらに・・・ｐ25ｐ26ｑ21、ｑ21ｐ27ｐ28・・・及びｖ21ｐ21ｐ22ｐ23ｑ21に分割される。また、その後に射影されるｑ21ｐ24ｐ25ｖ22も部分境界点列としてデータ格納部１０７の境界点列データに登録される。なお、ｆ1乃至ｆ4は、部分境界点列によって分割された面分を表しており、このような面分のデータも後の処理で登録される。
【０１０２】
ステップＳ１２５（図６１）で他の重合線と交差しないと判断された場合、又はステップＳ１２７の後、視線一価領域生成部１２３は、処理対象のセグメントが他の重合点又は特異点に到達したか判断する（ステップＳ１２９）。ここでは、ステップＳ１２１で取得されたセグメントの重合点又は特異点を起点として、ここまでの処理で基底曲面へ射影されたセグメントの他端が重合点又は特異点であるか判断する。具体的には、データ格納部１０７に格納されている境界点列データを参照し、セグメントの他端を表す点に重合点及び特異点を表す識別子が登録されているか判断する。
【０１０３】
重合点又は特異点に到達していない場合、視線一価領域生成部１２３は、ステップＳ１２１（図６１）で取得されたセグメントの重合点又は特異点を起点として、ここまでの処理で射影されたセグメントの他端に隣接するセグメントの曲面射影を行う（ステップＳ１３１）。その後、処理はステップＳ１２４へ戻る。図６２の例では、ステップＳ１２９において、初めに取得されたセグメントｖ1ｘの端点ｘは重合点又は特異点でないと判断され、ステップＳ１３１において隣接するセグメントｘｖ2が取得された後、ステップＳ１２４において重合線ｘ＊ｖ2＊が射影される。
【０１０４】
一方、重合点又は特異点に到達した場合、視線一価領域生成部１２３は、重合線及び重合面分を表すデータを、おもて面辺連結体又は裏面辺連結体を形成する面分としてデータ格納部１０７に登録する（図６１：ステップＳ１３３）。図６２の例では、セグメントｘｖ2が射影された後、ステップＳ１２９において重合点ｖ2に到達したと判断され、ステップＳ１３３において重合線を表す部分境界点列及び部分境界点列により表される面分のデータが登録される。
【０１０５】
なお、生成された重合線は辺連結体を形成する面分を分割し、２つの面分への接続情報を有する。また、部分境界点列は向きが同調するように保持され、面分を形成する。重合線を追加する位相処理は、ソリッドモデリングにおけるフェース分割処理に相当し、当業者には公知の技術である。
【０１０６】
その後、視線一価領域生成部１２３は、重合点又は特異点を端点とする未処理のセグメントが存在するか判断する（図６１：ステップＳ１３５）。存在する場合、ステップＳ１２１の処理に戻る。一方、未処理のセグメントが存在しない場合、視線一価領域生成部１２３は、データ格納部１０７に格納された境界点列データを基に対応する重合面分を特定し、境界点列データに面分間の対応を表すデータを登録する（ステップＳ１３７）。上でも述べたように、重合点には、対応する重合点及び視点から見たときの前後関係を表す順序情報が登録されている。具体的には、図４４に示したように、ｖ1には反視点側頂点としてｖ1＊が登録されており、ｖ1＊には視点側頂点としてｖ1が登録されている。同様に、ｖ2及びｖ2＊、ｖ3及びｖ3＊、ｖ4及びｖ4＊、ｘ及びｘ＊等の対応関係も登録されている。重合点の対応関係がわかれば、対応する重合点を含む部分境界点列同士が対応すると判断でき、対応する部分境界点列によって囲われた面分同士も対応すると判断できる。ステップＳ１３７では、部分境界点列間及び面分間の対応関係が特定され、部分境界点列の順序情報及び面分の順序情報としてデータ格納部１０７に登録される。
【０１０７】
図６２の例に対しステップＳ１２１乃至ステップＳ１３５（図６１）の処理を繰り返すことで、最終的には図６５Ａに示すような重合線が追加され、処理対象のおもて面辺連結体は面分ｆ1乃至ｆ5に分割される。また、ステップＳ１３７では、部分境界点列ｂ1及び重合線ｖ1＊ｖ2＊、部分境界点列ｂ4及び重合線ｖ2ｖ3、部分境界点列ｂ5及び重合線ｖ3＊ｖ4＊、並びに部分境界点列ｂ8及び重合線ｖ4ｖ1を形成する点の順序情報から、図６５Ａにおいて一点鎖線の矢印で示した点列の対応関係がわかるため、これらの点列で囲われた面分ｆ2及び面分ｆ5が対応する重合面分であると特定される。以上の処理により、面分の位相情報及び重合面分の対応関係が登録される。なお、重合線で分割された面分はそれぞれが視線一価である。図６５Ａのおもて面辺連結体を投影面上に表した例を図６５Ｂに示す。
【０１０８】
ここで、重合線と重合線とが交差する場合について補足する。例えば、図６６に示すおもて面辺連結体には、対応する３つの重合面分が存在している。このような辺連結体であっても、上で述べた重合点特定処理及び重合面分特定処理により面分を分割することができる。また、このような面分についても、視点側及び反視点側の面分が登録され、リスト構造を辿ることで重合面分を特定できる。
【０１０９】
なお、重合面分の数は、射影境界点列で表された面分上の点に対する射影境界点列の回転数（rotation number）を用いて計算することができる。回転数とは、閉曲線Ｃ（ｔ）をパラメタに沿って１周するとき、ある点ｐの周囲を正方向に回転する数をいうものとする。ここで、回転数は対応する面分の数を表している。すなわち、図６６において回転数が１の面分は、他に重合面分が存在しないことを意味し、回転数が２の面分は、他に１つの重合面分が存在することを意味している。図６７では、反時計回りを正方向とすると、点ｐ1、ｐ2及びｐ3の周りの回転数はそれぞれ＋１、−１及び０である。なお、投影面上の自己交差点の周囲に存在し且つ回転数の符号が異なる射影境界点列は、おもて面辺連結体又は裏面辺連結体の境界ではないと判断することができる。
【０１１０】
ステップＳ１３７（図６１）の後、重合面分特定処理を終了して図４５の射影重合多角形生成処理に戻り、さらに射影重合多角形生成処理を終了して図３３の視線一価領域生成処理（後半）に戻る。そして、視線一価領域生成部１２３は、視線一価領域確定処理を実施する（図３３：ステップＳ７９）。ここで図６８Ａに進むが、この視線一価領域確定処理については、図６８Ａ乃至図７０を用いて説明する。
【０１１１】
視線一価領域確定処理は、実際に表示する視線一価領域を確定する処理である。最も単純な視線一価領域確定法は、特定した面分を視線一価領域とする方法である。単純な視線一価領域確定処理の手順を図６８Ｂに示す。
【０１１２】
図６８Ｂの視線一価領域確定処理では、視線一価領域生成部１２３は、データ格納部１０７から未処理の面分を１つ抽出し、当該面分に対して視線一価領域であることを表すデータを登録する（図６８Ｂ：ステップＳ１９１）。そして、視線一価領域生成部１２３は、データ格納部１０７に未処理の面分が存在するか判断し（ステップＳ１９３）、存在する場合、ステップＳ１９１の処理に戻る。一方、存在しない場合、視線一価領域確定処理を終了して図３３の視線一価領域生成処理（後半）に戻る。このように、各面分を視線一価領域として確定させても問題ない。
【０１１３】
しかしながら、例えば図６５Ｂを観察すると面分ｆ１、ｆ２、ｆ３を１つの視線一価領域としても問題ないことが分かる。位相演算は高速処理が可能であるから、分割された面分を結合して処理の効率化を図ってもよい。視線一価領域生成処理では、重合面分特定処理において分割された面分を基に、接続しても全体が視線一価となる隣接した面分同士を接続する。すなわち、１つの視線一価領域がより広くなるように、分割された面分を接続し直す。以下この処理を行う方法を説明する。
【０１１４】
まず、視線一価領域生成部１２３は、データ格納部１０７に格納された境界点列データを取得し、おもて面辺連結体又は裏面辺連結体が重合面分を含んでいるか判断する（図６８Ａ：ステップＳ１４１）。具体的には、境界点列データにおいて、対応する視点側面分又は反視点側面分の登録があるか否かにより判断できる。例えば図６５Ａのおもて面辺連続体は、対応する面分ｆ2及び面分ｆ5を含むものと判断される。重合面分が存在しない場合、視線一価領域生成部１２３は、例えばおもて面辺連結体又は裏面辺連結体が視線一価領域であることを表すデータをデータ格納部１０７に格納する（ステップＳ１５７）。例えば、境界点列データにおいて辺連結体のデータに対して視線一価であることが確定したことを示すフラグを立ててもよいし、後の処理において辺連結体のデータが面分に分割されていない場合は全体が視線一価であるものと扱うようにしてここでは特別なデータを登録しなくてもよい。その後、視線一価領域確定処理を終了し、図３３の視線一価領域生成処理（後半）に戻る。
【０１１５】
一方、ステップＳ１４１（図６８Ａ）において重合面分が存在すると判断された場合、視線一価領域生成部１２３は、各面分を初期的に仮の視線一価領域としてデータ格納部１０７に登録する（ステップＳ１４３）。例えば、境界点列データの辺連結体に含まれる面分のデータに対して視線一価であることを示すフラグを立ててもよいし、後の処理において各面分が視線一価であるものと扱うようにしてここでは特別なデータを登録しなくてもよい。図６５Ａに示した例では、例えば、面分ｆ1乃至ｆ5に対してそれぞれ視線一価領域であることを表すデータが登録される。そして、視線一価領域生成部１２３は、データ格納部１０７の境界点列データから未処理の重合面分を１つ取得する（ステップＳ１４５）。ここでは、例えば、対応する面分が順序情報に登録されている重合面分であって、当該重合面分及び対応する面分（対応する面分が複数存在する場合は、対応する面分のうち少なくとも１つ）がいずれも未処理であるという条件を満たす重合面分を１つ取得する。なお、取得された重合面分に対応する面分を、便宜上カウンタパートと呼ぶこととする。ここでは、図６５Ａのおもて面辺連結体から、面分ｆ5が取得され、取得された面分の順序情報から面分ｆ2がカウンタパートとして特定されるものとする。
【０１１６】
その後、視線一価領域生成部１２３は、処理対象の面分Ｘに隣接する未処理の面分を１つ取得する（図６８Ａ：ステップＳ１４７）。具体的には、処理対象の面分Ｘと辺（部分境界点列）を共有する未処理の面分が取得される。ここでは、図６５Ａの面分ｆ4が取得されたものとする。そして、視線一価領域生成部１２３は、当該面分Ｘに隣接する面分と面分Ｘのカウンタパートとが隣接するか判断する（ステップＳ１４９）。ここでは、隣接する面分とカウンタパートとが辺を共有するか判断する。隣接する面分とカウンタパートとが隣接する場合、処理はステップＳ１５３に移行する。なお、図６５Ａの例では、面分ｆ5に隣接する面分ｆ4と面分ｆ5のカウンタパートｆ2とは辺を共有しておらず、隣接しないと判断される。隣接する面分とカウンタパートとが隣接しない場合、視線一価領域生成部１２３は、隣接する面分を処理対象の面分に結合する（ステップＳ１５１）。ここでは、図６９に示すように、面分ｆ4及び面分ｆ5を１つの面分に結合する。なお、この後の処理では、結合された面分ｆ4及び面分ｆ5を処理対象の面分であるものとして扱う。
【０１１７】
ステップＳ１４９（図６８Ａ）において隣接する面分とカウンタパートとが隣接しないと判断された場合、又はステップＳ１５１の後、視線一価領域生成部１２３は、データ格納部１０７の境界点列データにおいて、処理対象の面分に隣接する未処理の面分が存在するか判断する（ステップＳ１５３）。未処理の面分が存在する場合、処理はステップＳ１４７に戻る。図６９の例では、面分ｆ1が未処理の隣接する面分である。面分ｆ1は、ステップＳ１４７において取得され、その後のステップＳ１４９では面分ｆ5のカウンタパートｆ2に隣接すると判断され、再びステップＳ１５３に移行する。
【０１１８】
一方、ステップＳ１５３（図６８Ａ）において隣接する未処理の面分が存在しないと判断された場合、視線一価領域生成部１２３は、データ格納部１０７の境界点列データにおいて、未処理の重合面分が存在するか判断する（ステップＳ１５５）。なお、処理対象であった面分は処理済みとし、当該面分を１つの視線一価領域として確定させる。ステップＳ１５５では、ステップＳ１４５と同様に、未処理の重合面分であって、カウンタパートのうち少なくとも１つが未処理であるという条件を満たすものが存在するか判断する。未処理の重合面分が存在する場合、処理はステップＳ１４５に戻る。
【０１１９】
一方、未処理の重合面分が存在しない場合、視線一価領域生成部１２３は、未処理の面分のうち隣接する面分を結合する（ステップＳ１５６）。例えば、図７０に示すように、残った仮の視線一価領域である面分ｆ1、ｆ2及びｆ3を１つの視線一価領域として結合する。その後、視線一価領域確定処理を終了して図３３の処理に戻る。
【０１２０】
視線一価領域確定処理では、対応する複数の重合面分が１つの視線一価領域に含まれないように結合されればよい。よって、ステップＳ１４９において隣接する面分自体がカウンタパートでなければ、ステップＳ１５１において処理対象の面分に結合するようにしてもよい。また、重合面分特定処理において分割された面分はそれぞれが視線一価であるため、視線一価領域確定処理を実施せずに各面分を視線一価領域として扱うようにしてもよい。なお、ステップＳ１４５において重合面分を取得する順番は任意であるが、例えば視点に近い順に取得してもよい。また、これらの内部的な処理は、ソリッドモデリングにおいて頻繁に行われるものであり、当業者には公知である。
【０１２１】
図３３の視線一価領域生成処理（後半）に戻り、視線一価領域生成部１２３は、データ格納部１０７において未処理のおもて面辺連結体又は裏面辺連結体が存在するか判断する（ステップＳ８１）。未処理のおもて面辺連結体又は裏面辺連結体が存在する場合、処理はステップＳ７５に戻る。一方、未処理のおもて面辺連結体又は裏面辺連結体が存在しない場合、視線一価領域生成処理を終了して図３１の処理に戻る。
【０１２２】
図３１の処理に戻り、マスク生成部１１３は、データ格納部１０７に格納されている未処理の視線一価領域を１つ取得する（ステップＳ５７）。本ステップの処理は、ステップＳ７と同様である。なお、基底曲面全体が視線一価領域の場合は、基底曲面全体が取得される。また、マスク生成部１１３は、データ格納部１０７からループ多角形のデータも取得しておく。ここでは、視線一価領域として図７０の面分ｆ4及びｆ5が取得されたものとする。また、上でも述べたとおり、図３０に示した基底曲面は全体がトリム面であるため、基底曲面の外形を近似した外ループ多角形のデータが取得される。なお、本実施の形態の説明に用いた例では内ループ多角形は存在しない。そして、マスク生成部１１３は、マスクデータ生成処理を実施する（ステップＳ５９）。このマスクデータ生成処理については、図７１及び図７２を用いて説明する。
【０１２３】
図７１にマスクデータ生成処理の処理フローを示す。まず、マスク生成部１１３は、取得した視線一価領域及びループ多角形の座標をスクリーン座標に変換し、変換後の座標をデータ格納部１０７に格納する（図７１：ステップＳ１６１）。本ステップの処理は、ステップＳ３１（図１０）と同様である。本実施の形態でもスクリーン座標系を用いるものとして説明する。本ステップでは、図７０の面分ｆ4及びｆ5が処理対象の視線一価領域である場合、図７２のようにスクリーン座標上に変換される。図７２では、破線で面分ｆ1乃至ｆ3も示している。
【０１２４】
次に、マスク生成部１１３は、データ格納部１０７に格納されている視線一価領域及びループ多角形のデータを用いて、ループ集合積を生成し、データ格納部１０７に格納する（ステップＳ１６３）。本ステップの処理は、ステップＳ３３（図１０）と同様である。本ステップでは、処理対象の視線一価領域に対して、図７２に示したものと同様の形状の外ループ集合積が得られる。
【０１２５】
なお、視線一価領域及びループ多角形の境界点列データを利用し、先に説明した和差積の種類に応じて交差による切断片を選択する多角形集合演算（Polygon Clipping）より高速な集合演算が可能となる。例えば、ループ多角形と視線一価領域の境界とが交差しない場合であって、ループ多角形が視線一価領域に内包されているときは、ループ多角形がループ集合積であり、内包されていないときは、ループ集合積は存在しない。そして、ループ多角形と視線一価領域の境界とが交差する場合、ループ多角形は曲面境界では視線一価領域境界と交差することはなく、表裏境界線上又は重合線上で交差する。このようなときも、視線一価領域の境界点列の向きと、ループ多角形の境界点列の向きとを矛盾なく選択する（同調させる）ことによって、上記の多角形集合演算（Polygon Clipping）より高速にループ集合積を計算することができる。
【０１２６】
そして、マスク生成部１１３は、マスクデータ格納部１１５のマスクデータを初期化する（図７１：ステップＳ１６５）。本ステップの処理は、ステップＳ３５と同様であり、マスクデータ全体をＯＮに初期化しておく。また、マスク生成部１１３は、データ格納部１０７に格納された外ループ集合積のデータを用いて、外ループ集合積の内部に相当するマスクデータをＯＦＦに設定する（ステップＳ１６７）。ただし、ステップＳ６５（図３２）で基底曲面全体を視線一価領域に設定し、且つトリム面と基底曲面の境界が一致しており、例えば簡易判定処理で視線一価であるとの結果を得た場合には、画面全体のマスクデータをＯＦＦに設定してもよく、マスクを用いずに画面全体を表示するようにしてもよい。本ステップの処理は、ステップＳ３７（図１０）と同様であり、図７２の外ループ集合積の内部に相当する領域のマスクデータがＯＦＦに設定される。
【０１２７】
その後、マスク生成部１１３は、データ格納部１０７に格納された内ループ集合積のデータを用いて、内ループ集合積の内部に相当するマスクデータをＯＮに設定する（図７１：ステップＳ１６９）。本ステップの処理は、ステップＳ３９（図１０）と同様である。本実施例では内ループが存在しないため、本ステップでＯＮに設定される領域は存在しない。そして、マスク生成部１１３は、未処理の内ループ集合積が存在するか判断し（ステップＳ１７１）、存在する場合にはステップＳ１６９の処理に戻る。内ループが存在する場合は、内ループの数だけステップＳ１６９が繰り返される。一方、未処理の内ループ集合積が存在しない場合、マスクデータ生成処理を終了して図３１の処理に戻り、端子Ｃを介して図７３の処理に移行する。
【０１２８】
その後、画像データ生成部１１７は、データ格納部１０７から、基底曲面を分割することにより生成された三角形データのうち視線一価領域に含まれる未処理のデータを１つ取得する（図７３：ステップＳ１８１）。本ステップの処理は、ステップＳ２１（図２１）と同様である。そして、画像データ生成部１１７は、当該三角形の画像データを生成し、データ格納部１０７に格納する（ステップＳ１８３）。ここでは、基底曲面を分割することにより生成され、データ格納部１０７に格納されている三角形データ、並びに表示条件格納部１０３に格納されている視点データ及び照明データを用いて、画像データを生成する。本ステップの処理は、ステップＳ２３（図２１）と同様である。
【０１２９】
その後、描画処理部１１９は、データ格納部１０７に格納された画像データとマスクデータ格納部１１５に格納されたマスクデータとを用いてフレームバッファへの描画処理を行う（図７３：ステップＳ１８５）。ここでは、マスクデータがＯＦＦの画素に対して、当該画素について保持されているＺバッファの値とＺ値とを比較し、Ｚ値の方が視点側に近い場合、当該画素の色情報でフレームバッファを更新する。また、当該Ｚ値でＺバッファを更新する。一方、マスクデータがＯＮの画素については描画を行わない。本ステップの処理は、ステップＳ２５（図２１）と同様である。
【０１３０】
その後、画像データ生成部１１７は、視線一価領域内の三角形について未処理のものが存在するか判断し（図７３：ステップＳ１８７）、未処理の三角形があれば、ステップＳ１８１の処理に戻る。一方、未処理の三角形が存在しない場合、マスク生成部１１３は、未処理の視線一価領域が存在するか判断し（ステップＳ１８９）、未処理の視線一価領域があれば、端子Ｄを介してステップＳ５７（図３１）の処理に戻る。一方、未処理の視線一価領域が存在しない場合、処理を終了する。
【０１３１】
以上の処理により、１つのトリム面が描画される。本実施の形態では、図７２の視線一価領域に対して描画処理を行った後、端子Ｄを介してステップＳ５７の処理に戻る。そして、図７０の面分ｆ1、ｆ2及びｆ3を結合した視線一価領域について、図７４に示すように描画処理を行う。なお、例えばＺバッファを用いた隠面消去により、最終的には面分ｆ5が表示され、面分ｆ2は表示されない。
【０１３２】
また、本実施の形態では、対応する重合面が異なる視線一価領域に属するように面分を分割するため、それぞれを適切に描画できる。本実施の形態では基底曲面全体がトリム面であるものとしたが、例えばトリム面のうち面分ｆ5に相当する部分に外ループ又は内ループが存在する場合であっても、面分ｆ5と面分ｆ2とが異なる視線一価領域に属しそれぞれに対してマスクが生成されるため、外ループの外側又は内ループの内側には奥の面分ｆ2が描画されるようになる。
【０１３３】
また、視線一価領域確定処理においてより大きな視線一価領域を生成するため、従来のように基底曲面を分割することにより得られた三角形毎にループ多角形との交点を求める場合よりも交差計算の量が少なくなり、処理負荷が軽減される。
【０１３４】
［視線一価簡易判定処理］
実施の形態２において説明を先送りした視線一価簡易判定処理（図３２：ステップＳ６１）について、図７５乃至図８７を用いてここで説明する。視線一価簡易判定処理では、基底曲面全体が視線一価が保証される領域を基底曲面毎に予め計算しておく。そして、当該領域に視点の位置が属するか否かにより、基底曲面全体が視線一価であるか否かを判断する。なお、上記の基底曲面全体が視線一価であることが保証される視点の座標の集まりである立体を、以下では視線一価確定ボリューム（sight-line single-valuedness definite volume）と呼ぶこととする。
【０１３５】
例えば工業的に利用されるトリム面を表すための基底曲面には、視線一価確定ボリュームが存在することが多く、一般的に視点が視線一価確定ボリュームに含まれることも多い。従って、視線一価簡易判定処理は表示速度を向上させるために有効である。なお、例えば図７５に示す基底曲面のように、視線一価確定ボリュームが存在しない基底曲面もある。
【０１３６】
視線一価簡易判定処理の処理内容について、図７６を用いて説明する。まず、視線一価領域生成部１２３は、処理対象の基底曲面について今回が初回の処理であるか判断する（図７６：ステップＳ２０１）。ここでは、例えば、処理対象の基底曲面に対応付けられた視線一価確定ボリュームがデータ格納部１０７に格納されているか判断する。初回の処理でない場合、処理はステップＳ２０５へ移行する。一方、初回の処理である場合、簡易判定前処理部１２１は、確定ボリューム生成処理を実施する（ステップＳ２０３）。確定ボリューム生成処理については、図７７乃至図８６を用いて説明する。なお、本実施の形態では初回判定方式を採用しているが、たとえばＣＡＤシステムなどの別工程で確定ボリューム生成処理を行ってもよい。
【０１３７】
図７７に確定ボリューム生成処理の処理フローを示す。まず、簡易判定前処理部１２１は、データ格納部１０７に格納されている処理対象の基底曲面のデータを三角形分割し、格子点のデータをデータ格納部１０７に一時的に保持させておく（図７７：ステップＳ２１１）。ここでは、例えば所定の詳細度に基づいて格子対角三角形に分割する。なお、三角形分割はステップＳ１（図３）及びステップＳ５１（図３１）と同様の処理である。また、本実施例では三角形分割方式を採用しているが、曲面式から直接計算する方式を採用してもよい。
【０１３８】
次に、簡易判定前処理部１２１は、データ格納部１０７に保持されている格子点のデータを用いて、基底曲面が平面であるか判断する（図７７：ステップＳ２１３）。ここでは、例えば格子の四隅のうちの３点から決まる平面上に他の１点が存在するかを判断する。なお、四隅の点以外を用いてもよく、５点以上を用いて判断するようにしてもよい。基底曲面が平面であると判断された場合、簡易判定前処理部１２１は、当該基底曲面が含まれる平面のデータを特定し、フラグ「平面」と平面を定義するデータとを、処理対象の基底曲面に関連付けてデータ格納部１０７に格納する（ステップＳ２１５）。平面を定義するデータとしては、例えば３つの格子点の座標を格納する。
【０１３９】
基底曲面が平面の場合は当該基底曲面を含む平面上以外が視線一価確定ボリュームとなる。例えば、図７８において平面とその法線が表されているものとすると、平面の矢印側の空間からはおもて面が見え、反対側の空間からは裏面が見える。また、データ格納部１０７に格納されるデータの例を図７９に示す。基底曲面が平面である場合には、例えば１行目のデータのようにフラグ「平面」と平面の幾何データとが登録される。ここでオプションとして、トリム面と基底曲面の境界が合致するかどうか検査して、結果を付帯情報として記録してもよい。その後、確定ボリューム生成処理を終了し、図７６の処理に戻る。
【０１４０】
一方、基底曲面は平面でない場合、簡易判定前処理部１２１は、データ格納部１０７に格納されている処理対象の基底曲面が円弧掃引体であるか判断する（図７７：ステップＳ２１７）。ここでは、一方のパラメタ値を固定しつつ他方のパラメタ値を変化させて得られるパラメタ一定線について、いずれかのパラメタ一定線が直線であり、且つ他方のパラメタ一定線の曲率中心が一直線上であれば、基底曲面は円弧掃引体と判断する。例えば、図８０において実線で表された基底曲面では、一方のパラメタ一定線が直線となり、且つ他方のパラメタ一定線の曲率中心が一直線（太い破線）となり、基底曲面は円弧掃引体であると判断される。図８０は円柱状の基底曲面を示しているが、同様の条件により円錐状の基底曲面についても円弧掃引体であると判断できる。
【０１４１】
基底曲面が円弧掃引体であると判断された場合、簡易判定前処理部１２１は、フラグ「円弧掃引体」と、視線一価確定ボリュームを特定するための付帯情報とを、処理対象の基底曲面に関連付けてデータ格納部１０７に格納する（図７７：ステップＳ２１９）。ここで、図８１に、視線一価確定ボリュームを円錐の軸に対し垂直な平面で切断した断面図を示す。図８１のうち、ハッチングが施された領域が視線一価確定ボリュームである。すなわち、実線で示された円錐とその定義境界線と接し且つ破線で示された接平面とで区切られた領域のうち円錐の軸が含まれる領域と、２つの接平面により区切られた領域のうち接平面交線を挟んで円錐の存在する領域と反対側の領域とが、視線一価確定ボリュームとなる。
【０１４２】
視線一価確定ボリュームを特定するための付帯情報としては、例えば、図７９の２行目に示すように、円弧掃引体を表す幾何データ、円弧掃引体の定義境界線と接する２つの接平面の幾何データ及び当該接平面交線の幾何データが登録される。ここでオプションとして、トリム面と基底曲面の境界が合致するかどうか検査して、結果を付帯情報として記録してもよい。その後、確定ボリューム生成処理を終了し、図７６の処理に戻る。
【０１４３】
一方、基底曲面が円弧掃引体でない場合、簡易判定前処理部１２１は、データ格納部１０７に格納されている処理対象の基底曲面が球面であるか判断する（図７７：ステップＳ２２１）。ここでは、ｕパラメタ一定線及びｖパラメタ一定線の曲率中心を求め、曲率中心が一点に定まれば、基底曲面は球面であると判断する。例えば、図８２において実線で表された基底曲面では、ｕ及びｖパラメタ一定線の曲率中心が１点に定まっており、基底曲面は球面であると判断される。
【０１４４】
基底曲面が球面であると判断された場合、簡易判定前処理部１２１は、フラグ「球面」と、視線一価確定ボリュームを特定するための付帯情報とを、処理対象の基底曲面に関連付けてデータ格納部１０７に格納する（ステップＳ２２３）。図８３の例では、球面状の基底曲面の境界が太線で示され、当該基底曲面の視線一価確定ボリュームがハッチングが施された領域として示されている。図８３のように、視線一価確定ボリュームは円錐及び球面により表され、基底曲面のパラメタ中央値の座標と、基底曲面の曲率中心とを結ぶ直線が軸となる。また、当該軸と基底曲面の境界上における接平面との交点のうち、曲率中心から最も遠い点が円錐の頂点となる。そして、円錐の側面と球面とで区切られた領域のうち曲率中心の含まれる領域と、円錐の頂点を挟んで逆側の円錐内部の領域とが、視線一価確定ボリュームとなる。
【０１４５】
視線一価確定ボリュームを特定するための付帯情報としては、例えば、図７９の３行目に示すように、球面を表す幾何データ、円錐の軸、頂点及び半頂角といった円錐の幾何データが登録される。ここでオプションとして、トリム面と基底曲面の境界が合致するかどうか検査して、結果を付帯情報として記録してもよい。その後、確定ボリューム生成処理を終了し、図７６の処理に戻る。
【０１４６】
一方、基底曲面が球面でない場合、簡易判定前処理部１２１は、自由曲面の確定ボリューム生成処理を実施する（図７７：ステップＳ２２５）。この自由曲面の確定ボリューム生成処理については、図８４乃至図８６を用いて説明する。
【０１４７】
図８４に自由曲面の視線一価確定ボリューム生成処理の処理フローを示す。まず、簡易判定前処理部１２１は、データ格納部１０７に格納されている基底曲面のデータを基に参照軸を特定し、参照軸を表す幾何データをデータ格納部１０７に一時的に保持させておく（図８４：ステップＳ２３１）。ここでは、図８５に示すような基底曲面のパラメタ中央値の座標を通る接平面の単位法線ベクトルＶを求め、Ｖが通る直線を参照軸とする。次に、簡易判定前処理部１２１は、参照軸上の円錐頂点を特定し、例えば座標のデータをデータ格納部１０７に一時的に保持させておく（ステップＳ２３３）。ここでは、基底曲面を分割した各格子点における接平面と参照軸との交点を求め、最も基底曲面から遠い点を円錐頂点とする。
【０１４８】
その後、簡易判定前処理部１２１は、円錐の半頂角を算出する（ステップＳ２３５）。ここでは、図８６に示すように、参照軸と基底曲面の接平面とのなす角αを求め、最小値αminを半頂角とする。なお、基底曲面の接平面の単位法線ベクトルをＮとおくと、ｃｏｓα＝Ｖ・Ｎである。そして、簡易判定前処理部１２１は、ｃｏｓαminが負の値であるか判断する（ステップＳ２３７）。図７５に示したような基底曲面の場合、参照軸と基底曲面の接平面とは図８６において基底曲面よりも下の部分で交わるため、αは鈍角になる。結果として、最小値ｃｏｓαminは負になる。そして、ｃｏｓαminが負の場合には、視線一価確定ボリュームは存在しないと判断する。ｃｏｓαminが負の値である場合、簡易判定前処理部１２１は、フラグ「不在」をデータ格納部１０７に格納し（ステップＳ２３９）、確定ボリューム生成処理を終了して図７６の処理に戻る。例えば、図７９の５行目に示すように、フラグ「不在」が登録される。
【０１４９】
一方、ｃｏｓαminが負の値ではない場合、簡易判定前処理部１２１は、フラグ「自由曲面」と、視線一価確定ボリュームを特定するための付帯情報とを、処理対象の基底曲面に関連付けてデータ格納部１０７に格納する（ステップ２４１）。図８６においてハッチングが施された領域が視線一価確定ボリュームである。すなわち、参照軸上の円錐頂点Ｑを中心として両側に、半頂角がαminの側面を有する円錐が定義され、当該円錐を自由曲面で分割した領域のうち円錐頂点とは反対側の領域と、円錐頂点を挟んで反対側の円錐内部の領域とが、視線一価確定ボリュームとなる。なお、自由曲面の視線一価確定ボリュームについては、円錐でなく一般の錘体として求めることも可能である。しかし、一般の錐体を用いた場合は判定処理が複雑になるため、判定処理が容易であるという点で円錐を用いた視線一価確定ボリューム生成処理は有利である。
【０１５０】
視線一価確定ボリュームを特定するための付帯情報としては、例えば、図７９の４行目に示すように、自由曲面を表す幾何データ、円錐の軸、頂点及び半頂角といった円錐の幾何データが登録される。ここでオプションとして、トリム面と基底曲面の境界とが合致するかどうか検査して、結果を付帯情報として記録してもよい。その後、確定ボリューム生成処理を終了し、図７６の処理に戻る。
【０１５１】
なお、基底曲面が、例えば機械系ＣＡＤにおいて多く用いられる円弧掃引体又は球の場合、おもて面辺連結体又は裏面辺連結体が視線一価となる。すなわち、視点から見た円弧掃引体側面又は球面の稜線がおもて面と裏面との境界となり、おもて面辺連結体又は裏面辺連結体がそれぞれ視線一価となる。よって、おもて面と裏面との境界を算出するための情報を予めデータ格納部１０７に保持させておき、視線一価領域を生成する際に用いることにより、基底曲面全体が視線一価と判断されない場合でも処理効率を上げることができる。
【０１５２】
例えば円錐は、一般的に円周方向及び母線方向のパラメタによって表現される。また、円錐の母線上の法線ベクトルは一定であり、視点から見た円錐の稜線である母線がおもて面と裏面との境界となる。よって、円錐の軸及び円周方向のパラメタを保持しておき、視点との関係に基づいて視線一価領域を計算することができる。なお、円柱や球面の場合も同様である。確定ボリューム生成処理においてこのような情報を用意するようにしてもよい。
【０１５３】
図７６の視線一価簡易判定処理に戻り、ステップＳ２０３の後、又はステップＳ２０１において初回の処理ではないと判断された場合、視線一価領域生成部１２３は、簡易判定処理を実施する（ステップＳ２０５）。この簡易判定処理については、図８７を用いて説明する。
まず、視線一価領域生成部１２３は、処理対象の基底曲面に関連付けられた簡易判定フラグをＯＦＦに初期化し、データ格納部１０７に保持させる（図８７：ステップＳ２５１）。そして、視線一価領域生成部１２３は、データ格納部１０７から処理対象の基底曲面に関連付けられたフラグを取得する（ステップ２５３）。ここでは、図７９に示したデータから、処理対象の基底曲面の項目「フラグ」に格納されたデータを取得する。
【０１５４】
次に、視線一価領域生成部１２３は、フラグが「不在」であるか判断する（図８７：ステップＳ２５５）。フラグが「不在」の場合は視点の位置に関係なく基底曲面は視線一価でないため、簡易判定フラグをＯＦＦに設定したまま簡易判定処理を終了して図７６の視線一価簡易判定処理に戻り、その後図３２の視線一価領域生成処理に戻る。
【０１５５】
一方、フラグが「不在」でない場合、視線一価領域生成部１２３は、表示条件格納部１０３から視点データを、データ格納部１０７から付帯データを取得する（ステップＳ２５７）。なお、本ステップの処理は、例えばステップＳ２５３（図８７）と同時に行うようにしてもよい。そして、視線一価領域生成部１２３は、フラグが「平面」であるか判断する（ステップＳ２５９）。フラグが「平面」の場合、平面上以外の空間が視線一価確定ボリュームである。従って、視線一価領域生成部１２３は、取得した視点データが表す視点の座標が付帯データとして登録されている平面上に存在するか判断し、平面上に存在しなければデータ格納部１０７の簡易判定フラグをＯＮに設定する（ステップＳ２６１）。その後、簡易判定処理を終了して図７６の処理に戻り、さらに図３２の視線一価領域生成処理に戻る。
【０１５６】
一方、フラグが「平面」でない場合、視線一価領域生成部１２３は、フラグが「円弧掃引体」であるか判断する（図８７：ステップＳ２６３）。フラグが「円弧掃引体」の場合、図８１においてハッチングが施された領域が視線一価確定ボリュームである。従って、基底曲面の定義境界線で接する接平面及び当該基底曲面によって区切られた領域のうち円錐の軸を含む領域、又は接平面により区切られた領域のうち接平面交線を挟んで基底曲面が存在する領域とは逆側の領域に視点データが表す視点の座標が含まれるか判断し、含まれる場合はデータ格納部１０７の簡易判定フラグをＯＮに設定する（ステップＳ２６５）。その後、簡易判定処理を終了して図７６の処理に戻り、さらに図３２の視線一価領域生成処理に戻る。
【０１５７】
一方、フラグが「円弧掃引体」でない場合、視線一価領域生成部１２３は、フラグが「球面」であるか判断する（図８７：ステップＳ２６７）。フラグが「球面」の場合、図８３においてハッチングが施された領域が視線一価確定ボリュームである。従って、円錐の側面と球面とで区切られた領域のうち曲率中心の含まれる領域、又は円錐の頂点を挟んで逆側の円錐内部の領域に視点データが表す視点の座標が含まれるか判断し、含まれる場合はデータ格納部１０７の簡易判定フラグをＯＮに設定する（ステップＳ２６９）。その後、簡易判定処理を終了して図７６の処理に戻り、さらに図３２の視線一価領域生成処理に戻る。
【０１５８】
一方、フラグが「球面」でない場合、フラグは「自由曲面」であると判断できる。フラグが「自由曲面」の場合、図８６においてハッチングが施された領域が視線一価確定ボリュームである。従って、円錐を自由曲面で分割した領域のうち円錐頂点とは逆側の領域、又は円錐頂点を挟んで逆側の円錐内部の領域に視点の座標が含まれるか判断し、含まれる場合はデータ格納部１０７の簡易判定フラグをＯＮに設定する（ステップＳ２７１）。その後、簡易判定処理を終了して図７６の処理に戻り、さらに図３２の視線一価領域生成処理に戻る。
【０１５９】
なお、円弧掃引体又は球面の基底曲面について、確定ボリューム生成処理においておもて面と裏面との境界を算出するための情報を用意している場合、視点が視線一価確定ボリュームに存在しないときであっても容易に視線一価領域に分割することができる。すなわち、予めデータ格納部１０７に保持されたパラメタ等を用いて、視点から見た円弧掃引体側面又は球面の稜線でおもて面辺連結体と裏面辺連結体とを生成することができる。例えば簡易判定処理において当該ケースを示すフラグを立てておき、後の処理において容易に視線一価領域を生成できるようにしてもよい。
【０１６０】
以上のような処理を行うことにより、基底曲面全体が視線一価であるか容易に判断することができ、基底曲面全体が視線一価であれば描画処理においてループ多角形の形状に基づいてマスクを生成することができる。従って、従来のように基底曲面を分割することにより得られた三角形毎にループ多角形との交点を求める場合よりも交差計算の量は少なくなり、処理負荷が軽減される。また、上でも述べたとおり、視線一価確定ボリュームを有する基底曲面が用いられることは多く、視点が視線一価確定ボリュームに含まれることも多いため、当該処理は表示速度を向上させるために有効である。
【０１６１】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、機能ブロック図は一例であって、必ずしも実際のプログラムモジュール構成と一致しない場合もある。また、処理フローについても、処理結果が変わらない限り、ステップの順番を入れ替えたり、並列実施するようにしてもよい。さらに、図７９に示したテーブルも一例であり、登録されるデータが異なる場合もある。
【０１６２】
なお、上で述べた表示処理装置は、コンピュータ装置であって、図８８に示すように、メモリ２５０１とＣＰＵ２５０３とハードディスク・ドライブ（ＨＤＤ）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【０１６３】
本実施の形態におけるフレームバッファは、メモリ２５０１又は表示制御部２５０７が有するメモリ等により実現される。そして、フレームバッファに格納された画像データは、表示制御部２５０７によって読み出され、表示装置２５０９に表示される。
【０１６４】
以上述べた本実施の形態をまとめると、以下のようになる。
【０１６５】
本実施の形態に係る表示処理方法は、基底曲面に基づいて生成されるトリム面を含む物体の形状を表示する表示処理方法であって、（Ａ）基底曲面を三角形分割して、生成された三角形のデータをデータ格納部に格納するステップと、（Ｂ）トリム面の外形を定義するための外ループと物体の形状に応じて外ループ内に設けられる内ループとを含むループについて、ループ多角形を生成し、生成されたループ多角形のデータをデータ格納部に格納するステップと、（Ｃ）視点と基底曲面との位置関係に基づき、投影面への写像が全単射であるという条件を満たし且つ三角形を複数含む、基底曲面上の領域である視線一価領域を特定し、当該視線一価領域のデータをデータ格納部に格納する視線一価領域特定ステップと、（Ｄ）視線一価領域毎に、表示すべきか否かを制御する画素毎のデータであるマスクデータを、当該視線一価領域とデータ格納部に格納されているループ多角形とから生成し、マスクデータ格納部に格納するマスクデータ生成ステップと、（Ｅ）データ格納部に格納されている三角形の各々について、投影面上の画像データを生成し、データ格納部に格納する画像データ生成ステップと、（Ｆ）マスクデータ格納部に格納されているマスクデータとデータ格納部に格納されている画像データとから描画処理を実施するステップとを含む。
【０１６６】
上で述べたような視線一価領域を特定して、当該視線一価領域を単位にマスクデータを生成することで、基底曲面を三角形分割して生成される三角形毎に処理するよりも効率良く且つ高速に描画を行うことができるようになる。
【０１６７】
なお、上で述べた視線一価領域特定ステップが、（Ｃ１）基底曲面内の各三角形について、視点に対しておもて面か裏面かを判定し、データ格納部に格納するステップと、（Ｃ２）おもて面と判定され且つ連結している複数の三角形を含むおもて面辺連結体と、裏面と判定され且つ連結している複数の三角形を含む裏面辺連結体とを特定するステップとをさらに含むようにしてもよい。
【０１６８】
単純な形状の場合には、このような処理によって特定されたおもて面辺連結体及び裏面辺連結体を視線一価領域として処理することも可能である。これによって上記ループとの交差判定を効率的に実施できるようになる。
【０１６９】
また、上で述べた視線一価領域特定ステップが、（Ｃ３）おもて面辺連結体及び裏面辺連結体のいずれかである辺連結体の境界と視点とを通る直線により、辺連結体を分割して面分を生成するステップをさらに含むようにしてもよい。より複雑な形状の場合には、このような処理を実施することで確実に視線一価領域を特定することができるようになる。なお、このような面分をそのまま視線一価領域として処理するようにしてもよい。
【０１７０】
さらに、視線一価領域特定ステップが、（Ｃ４）生成された面分を、視点から見て重ならず且つ隣接する面分の集まりに分けて連結するステップをさらに含むようにしてもよい。このようにすれば、より広い視線一価領域を生成することができるため、上記面分単位で処理するよりも効率が良くなる。
【０１７１】
また、上で述べた視線一価領域特定ステップが、（Ｃ１１）おもて面辺連結体及び裏面辺連結体のいずれかである辺連結体の境界をある平面に投影して、当該ある平面上の境界を単調区間に分割するステップと、（Ｃ１２）単調区間が２以下であるか判断するステップとを含むようにしてもよい。このような処理によっておもて面辺連結体又は裏面辺連結体を分割するか否かを高速に判断することができるようになる。
【０１７２】
さらに、上で述べた視線一価領域特定ステップが、（Ｃ１３）単調区間が３以上である場合には、単調区間同士の交点に対応する、辺連結体の境界上の点である第１の点（例えば実施の形態における重合点）を特定するステップと、（Ｃ１４）第１の点を含む、辺連結体の境界上のセグメントを視点を通る直線で辺連結体上に投影する（例えば実施の形態における曲面射影）ことで、辺連結体を分割して面分を生成する面分生成ステップとをさらに含むようにしてもよい。このような処理を例えばパラメタ空間において実施してもよい。また、これによって得られる面分をそのまま視線一価領域として処理するようにしても良い。
【０１７３】
さらに、上で述べた視線一価領域特定ステップが、（Ｃ１５）辺連結体が表裏境界を有する場合には、当該表裏境界と、第１の点を含む、辺連結体の境界上のセグメントを、視点を通る直線で辺連結体上に投影することで得られる線分とが接する第２の点（例えば実施の形態における特異点）を特定するステップをさらに含むようにしてもよい。その際、面分生成ステップにおいて、第２の点も第１の点のように辺連結体の分割に用いるものとする。第２の点が存在する場合には、第２の点も面分生成ステップで用いることで、適切に視線一価領域となる面分を生成できるようになる。
【０１７４】
さらに、上で述べた視線一価領域特定ステップが、（Ｃ１６）生成された面分から、第１の点を含む境界上の点に基づき、視点から見て重なる面分の組を特定するステップと、（Ｃ１７）面分の組に含まれる各面分が異なるグループに属するように、生成された面分を隣接関係に基づき分類し結合するステップとをさらに含むようにしてもよい。このようにすれば、より広い視線一価領域を得ることができるようになり、処理効率が向上する。
【０１７５】
なお、上で述べたマスクデータ生成ステップが、（Ｄ１）データ格納部に格納されているループ多角形のうち外ループについてのループ多角形である外ループ多角形と視線一価領域との集合積である外ループ集合積を生成し、データ格納部に格納するステップと、（Ｄ２）データ格納部に格納されているループ多角形のうち内ループについてのループ多角形である内ループ多角形と視線一価領域との集合積である内ループ集合積を生成し、データ格納部に格納するステップと、（Ｄ３）データ格納部に格納されている外ループ集合積内部の各点に相当する、投影面上の画素のマスクデータを、当該画素を表示すべきことを表すように設定するステップと、（Ｄ４）データ格納部に格納されている内ループ集合積内部の各点に相当する、投影面上の画素のマスクデータを、当該画素を表示すべきでないことを表すように設定するステップとを含むようにしてもよい。このようにすれば、適切なマスクデータが生成される。なお、外ループ集合積及び内ループ集合積を生成する処理は、各三角形について実施するよりも効率化されている。
【０１７６】
また、本表示処理方法は、（Ｇ）基底曲面全体が視線一価領域であることが保証される、空間内のボリュームを決定し、当該ボリュームのデータをデータ格納部に格納するステップを更に含むようにしてもよい。そして、上で述べた視線一価領域特定ステップが、（Ｃ２１）視点がボリューム内に含まれるか判断するステップと、（Ｃ２２）視点がボリューム内に含まれると判断された場合には、基底曲面に含まれる全ての三角形を連結した領域を視線一価領域として特定するステップとを含むようにしてもよい。このようにすれば、処理が簡略化され、視点が移動する際にも高速に視線一価領域を特定できる可能性が出てくる。
【０１７７】
また、本表示処理方法は、（Ｈ）マスクデータ生成ステップの前に、外ループと基底曲面の外周とが一致するか判断するステップと、（Ｉ）外ループと基底曲面の外周とが一致し、且つ基底曲面全体が視線一価領域である場合、データ格納部に格納されている三角形の各々について、投影面上の画像データを生成し、当該画像データにより描画処理を実施するステップとを含むようにしてもよい。これによって外ループと基底曲面の外周が一致するという特別な場合は、外ループ集合積計算ステップが省略されるので、処理の高速化が実現される。なお、全ての画素について表示すべきことを表すようにマスクを設定してもよいし、マスクを用いずに画像データを描画するようにしてもよい。
【０１７８】
なお、上記方法による処理をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
基底曲面に基づいて生成されるトリム面を含む物体の形状を表示する表示処理方法であって、
前記基底曲面を三角形分割して、生成された三角形のデータをデータ格納部に格納するステップと、
前記トリム面の外形を定義するための外ループと前記物体の形状に応じて前記外ループ内に設けられる内ループとを含むループについて、ループ多角形を生成し、生成されたループ多角形のデータを前記データ格納部に格納するステップと、
視点と前記基底曲面との位置関係に基づき、投影面への写像が全単射であるという条件を満たし且つ前記三角形を複数含む、前記基底曲面上の領域である視線一価領域を特定し、当該視線一価領域のデータを前記データ格納部に格納する視線一価領域特定ステップと、
前記視線一価領域毎に、表示すべきか否かを制御する画素毎のデータであるマスクデータを、当該視線一価領域と前記データ格納部に格納されている前記ループ多角形とから生成し、マスクデータ格納部に格納するマスクデータ生成ステップと、
前記データ格納部に格納されている前記三角形の各々について、前記投影面上の画像データを生成し、前記データ格納部に格納する画像データ生成ステップと、
前記マスクデータ格納部に格納されている前記マスクデータと前記データ格納部に格納されている画像データとから描画処理を実施するステップと、
を含み、コンピュータにより実行される表示処理方法。
【請求項２】
前記視線一価領域特定ステップが、
前記基底曲面内の各三角形について、前記視点に対しておもて面か裏面かを判定し、前記データ格納部に格納するステップと、
おもて面と判定され且つ連結している複数の三角形を含むおもて面辺連結体と、裏面と判定され且つ連結している複数の三角形を含む裏面辺連結体とを特定するステップと、
をさらに含む請求項１記載の表示処理方法。
【請求項３】
前記視線一価領域特定ステップが、
前記おもて面辺連結体及び前記裏面辺連結体のいずれかである辺連結体の境界と前記視点とを通る直線により、前記辺連結体を分割して面分を生成するステップ
をさらに含む請求項２記載の表示処理方法。
【請求項４】
前記視線一価領域特定ステップが、
生成された前記面分を、前記視点から見て重ならず且つ隣接する面分の集まりに分けて連結するステップ、
をさらに含む請求項３記載の表示処理方法。
【請求項５】
前記視線一価領域特定ステップが、
前記おもて面辺連結体及び前記裏面辺連結体のいずれかである辺連結体の境界をある平面に投影して、当該ある平面上の境界を単調区間に分割するステップと、
前記単調区間が２以下であるか判断するステップと、
を含む請求項１記載の表示処理方法。
【請求項６】
前記視線一価領域特定ステップが、
前記単調区間が３以上である場合には、前記単調区間同士の交点に対応する、前記辺連結体の境界上の点である第１の点を特定するステップと、
前記第１の点を含む、前記辺連結体の境界上のセグメントを、前記視点を通る直線で前記辺連結体上に投影することで、前記辺連結体を分割して面分を生成する面分生成ステップと、
をさらに含む請求項５記載の表示処理方法。
【請求項７】
前記視線一価領域特定ステップが、
前記辺連結体が表裏境界を有する場合には、当該表裏境界と、前記第１の点を含む、前記辺連結体の境界上のセグメントを、前記視点を通る直線で前記辺連結体上に投影することで得られる線分とが接する第２の点を特定するステップ
をさらに含み、
前記面分生成ステップにおいて、前記第２の点も前記第１の点のように前記辺連結体の分割に用いる
請求項６記載の表示処理方法。
【請求項８】
前記視線一価領域特定ステップが、
生成された前記面分から、前記第１の点を含む境界上の点に基づき、前記視点から見て重なる面分の組を特定するステップと、
前記面分の組に含まれる各面分が異なるグループに属するように、生成された前記面分を隣接関係に基づき分類し結合するステップと、
をさらに含む請求項６又は７記載の表示処理方法。
【請求項９】
前記マスクデータ生成ステップが、
前記データ格納部に格納されている前記ループ多角形のうち外ループについてのループ多角形である外ループ多角形と前記視線一価領域との集合積である外ループ集合積を生成し、前記データ格納部に格納するステップと、
前記データ格納部に格納されている前記ループ多角形のうち内ループについてのループ多角形である内ループ多角形と前記視線一価領域との集合積である内ループ集合積を生成し、前記データ格納部に格納するステップと、
前記データ格納部に格納されている前記外ループ集合積内部の各点に相当する、前記投影面上の画素のマスクデータを、当該画素を表示すべきことを表すように設定する表示設定ステップと、
前記データ格納部に格納されている前記内ループ集合積内部の各点に相当する、前記投影面上の画素のマスクデータを、当該画素を表示すべきでないことを表すように設定するステップと、
を含む請求項１乃至８のいずれか１つ記載の表示処理方法。
【請求項１０】
前記基底曲面全体が前記視線一価領域であることが保証される、空間内のボリュームを決定し、当該ボリュームのデータを前記データ格納部に格納するステップ
をさらに含み、
前記視線一価領域特定ステップが、
前記視点が前記ボリューム内に含まれるか判断するステップと、
前記視点が前記ボリューム内に含まれると判断された場合には、前記基底曲面に含まれる全ての前記三角形を連結した領域を前記視線一価領域として特定するステップと、
を含む請求項１記載の表示処理方法。
【請求項１１】
前記マスクデータ生成ステップの前に、前記外ループと前記基底曲面の外周とが一致するか判断するステップと、
前記外ループと前記基底曲面の外周とが一致し、且つ前記基底曲面全体が前記視線一価領域である場合、前記データ格納部に格納されている前記三角形の各々について、前記投影面上の画像データを生成し、当該画像データにより描画処理を実施するステップと、
をさらに含む請求項１乃至１０のいずれか１つ記載の表示処理方法。
【請求項１２】
請求項１乃至１１のいずれか１つ記載の表示処理方法をコンピュータに実行させるためのプログラム。
【請求項１３】
基底曲面に基づいて生成されるトリム面を含む物体の形状を表示する表示処理装置であって、
前記基底曲面を三角形分割して、生成された三角形のデータをデータ格納部に格納する三角形分割部と、
前記トリム面の外形を定義するための外ループと前記物体の形状に応じて前記外ループ内に設けられる内ループとを含むループについて、ループ多角形を生成し、生成されたループ多角形のデータを前記データ格納部に格納するループ多角形生成部と、
視点と前記基底曲面との位置関係に基づき、投影面への写像が全単射であるという条件を満たす前記三角形を複数含む、前記基底曲面上の領域である視線一価領域を特定し、当該視線一価領域のデータを前記データ格納部に格納する視線一価領域処理部と、
前記視線一価領域毎に、表示すべきか否かを制御する画素毎のデータであるマスクデータを、当該視線一価領域と前記データ格納部に格納されている前記ループ多角形とから生成し、マスクデータ格納部に格納するマスクデータ生成部と、
前記データ格納部に格納されている前記三角形の各々について、前記投影面上の画像データを生成し、前記データ格納部に格納する画像データ生成部と、
前記マスクデータ格納部に格納されている前記マスクデータと前記データ格納部に格納されている画像データとから描画処理を実施する描画処理部と、
を有する表示処理装置。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】図６８Ａ
【補正方法】変更
【補正の内容】
【図６８Ａ】
2012073363.tif 000100
【手続補正４】
【補正対象書類名】図面
【補正対象項目名】図８０
【補正方法】変更
【補正の内容】
【図８０】
2012073363.tif 000101
【手続補正５】
【補正対象書類名】図面
【補正対象項目名】図８２
【補正方法】変更
【補正の内容】
【図８２】
2012073363.tif 000102
【国際調査報告】
2012073363.tif 000103
2012073363.tif 000104