(57)【要約】【課題】ベクタグラフィックス、あるいは２次元コンピュータグラフィックスを処理する画像処理において、重なりあう図形を描画する処理を効率化する。【解決手段】画像処理装置は、図形の境界線と画像の走査線方向の画素の並びとの交点の位置、および図形と他の図形との階層関係を示すレイヤ情報を含む交点情報を生成する交点生成部と、階層関係における上位レイヤの図形の存在範囲を除外して、画像の走査線に交差する図形の一方の境界線と走査線との交点（始点）から、図形の他方の境界線と走査線との交点（終点）までの間に含まれる画素の集合であるスパンを生成するスパン生成部と、を備える。【選択図】図１５
2014179031.tif 000002
【特許請求の範囲】
【請求項１】
図形の境界線と画像の走査線方向の画素の並びとの交点の位置、および前記図形と他の図形との階層関係を示すレイヤ情報を含む交点情報を生成する交点生成部と、
前記階層関係における上位レイヤの図形の存在範囲を除外して、画像の走査線に交差する図形の一方の境界線と前記走査線との交点（始点）から、前記図形の他方の境界線と走査線との交点（終点）までの間に含まれる画素の集合であるスパンを生成するスパン生成部と、を備える画像処理装置。
【請求項２】
前記交点生成部は、交点位置のピクセルを複数のサブピクセルに分割してサブピクセルごとに、図形の境界線がカバーする範囲を示すカバー情報を設定し、
前記スパン生成部は、サブピクセルのカバー情報を基に、前記ピクセルにおいて境界線が通過する部分の前記ピクセルに対する比率を示すカバー値を算出し、前記カバー値にしたがって、前記上位レイヤの図形の存在範囲および前記それぞれの交点を判定する請求項１に記載の画像処理装置。
【請求項３】
コンピュータが、図形の境界線と走査線方向の画素の並びとの交点の位置、および前記図形と他の図形との階層関係を示すレイヤ情報を含む交点情報を生成する交点生成ステップと、
前記階層関係における上位レイヤの図形の存在範囲を除外して、画像の走査線に交差する図形の一方の境界線と前記走査線との交点（始点）から、前記図形の他方の境界線と走査線との交点（終点）までの間に含まれる画素の集合であるスパンを生成するスパン生成ステップと、を実行する画像処理方法。
【請求項４】
前記交点生成ステップは、交点位置のピクセルを複数のサブピクセルに分割してサブピクセルごとに、図形の境界線がカバーする範囲を示すカバー情報を設定するステップを有し、
前記スパン生成ステップは、サブピクセルのカバー情報を基に、前記ピクセルにおいて境界線が通過する部分の前記ピクセルに対する比率を示すカバー値を算出し、前記カバー値にしたがって、前記上位レイヤの図形の存在範囲および前記それぞれの交点を判定するステップを有する請求項３に記載の画像処理方法。
【請求項５】
コンピュータに、図形の境界線と走査線方向の画素の並びとの交点の位置、および前記図形と他の図形との階層関係を示すレイヤ情報を含む交点情報を生成する交点生成ステップと、
前記階層関係における上位レイヤの図形の存在範囲を除外して、画像の走査線に交差する図形の一方の境界線と前記走査線との交点（始点）から、前記図形の他方の境界線と走査線との交点（終点）までの間に含まれる画素の集合であるスパンを生成するスパン生成ステップと、を実行させるためのコンピュータ実行可能なプログラム。
【請求項６】
前記交点生成ステップは、交点位置のピクセルを複数のサブピクセルに分割してサブピクセルごとに、図形の境界線がカバーする範囲を示すカバー情報を設定するステップを有し、
前記スパン生成ステップは、サブピクセルのカバー情報を基に、前記ピクセルにおいて境界線が通過する部分の前記ピクセルに対する比率を示すカバー値を算出し、前記カバー値にしたがって、前記上位レイヤの図形の存在範囲および前記それぞれの交点を判定するステップを有する請求項５に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ベクタグラフィックス処理に関する。
【背景技術】
【０００２】
ベクタグラフィックス、あるいは２次元コンピュータグラフィックスを処理する画像処理では、画像処理装置が重なりあう図形を描画する場合、重なりの一番下の図形から上の図形にむかって順番に描画する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−２２１４１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来の技術では、この手法で下の図形を描画する時点ではどの部分が上の図形により隠蔽されるかが不明であるため、画像処理装置は、隠蔽される図形のピクセル（画素）に対しても描画のための処理を実行する。本発明の課題は、ベクタグラフィックス、あるいは２次元コンピュータグラフィックスを処理する画像処理において、重なりあう図形を描画する処理を効率化することにある。
【課題を解決するための手段】
【０００５】
本発明の実施形態の１つの側面は、画像処理装置によって例示される。本画像処理装置は、図形の境界線と画像の走査線方向の画素の並びとの交点の位置、および図形と他の図形との階層関係を示すレイヤ情報を含む交点情報を生成する交点生成部と、階層関係における上位レイヤの図形の存在範囲を除外して、画像の走査線に交差する図形の一方の境界線と走査線との交点（始点）から、図形の他方の境界線と走査線との交点（終点）までの間に含まれる画素の集合であるスパンを生成するスパン生成部と、を備える。
【発明の効果】
【０００６】
本画像処理装置によれば、ベクタグラフィックス、あるいは２次元コンピュータグラフィックスを処理する画像処理において、重なりあう図形を描画する処理を効率化することができる。
【図面の簡単な説明】
【０００７】
【図１】比較例の画像処理装置の処理例である。
【図２】比較例に係る画像処理装置を含む情報処理装置の構成を例示する図である。
【図３】エッジ情報の構成を例示する図である。
【図４】スパン情報の構成を例示する図である。
【図５】画像処理装置による処理対象を例示する図である。
【図６】比較例に係る交点バッファのフォーマット例である。
【図７】１つのピクセルを４×４のサブピクセルに分割した場合のカバー値を例示する図である。
【図８】交点バッファの構成を例示する図である。
【図９】カバー値情報を加算する処理を例示する図である。
【図１０】交点Ｘの右側に隣接する座標（Ｘ＋１）のピクセルのカバー値情報の算出を例示する図である。
【図１１】カバー値情報を減算する処理を例示する図である。
【図１２】カバー値情報の例である。
【図１３】スパン生成処理を例示する図である。
【図１４】レイヤ付き交点情報の交点バッファ上のフォーマットを例示する図である。
【図１５】実施例に係る画像処理装置を含む情報処理装置の構成を例示する図である。
【図１６】実施例に係るスパン生成処理のフローチャートを例示する図である。
【図１７】交点処理の詳細を例示する図である。
【図１８】スパン計算の詳細を例示する図である。
【図１９】変形例に係るスパン計算の詳細を例示する図である。
【発明を実施するための形態】
【０００８】
以下、図面を参照して、一実施形態に係る画像処理装置について説明する。以下の実施形態の構成は例示であり、本装置は実施形態の構成には限定されない。
【０００９】
［比較例］
図１から図１３を参照して、比較例に係る画像処理装置を説明する。図１は、比較例の画像処理装置１０１の処理例である。図１（Ａ）は、画像処理装置１０１を含むコンピュータの表示装置に表示される図形の例である。図１（Ａ）では、上層の図形と、下層の図形が一部重なりあって表示されている。
【００１０】
図１（Ｂ）は、画像処理装置１０１によるピクセル（画素）の生成例である。画像処理装置１０１は、図１（Ａ）の画像を表示装置に表示するため、それぞれの図形のピクセルを生成する。下層の図形のピクセル生成の際、画像処理装置１０１は、上層の図形と、下層の図形が一部重なりあっていることを認識しないで、下層の図形から順番に図形のピクセルを生成する。このため、画像処理装置１０１は、下層の図形において、上層の図形によって隠された隠面に対しても、ピクセルを生成する。
【００１１】
図２は、画像処理装置１０１を含む情報処理装置の構成を例示する図である。情報処理装置は、画像処理装置１０１の他に、例えば、ＣＰＵ１０２を含む。ＣＰＵ１０２は、例えば、画像処理プログラムを実行し、図形情報を画像処理装置１０１に引き渡す。図形情報は、例えば、多角形、幅情報を含む線等である。
【００１２】
画像処理装置１０１は、エッジ生成部１１２、シーケンサ１１３、交点生成部１１４、ソータ１１５、スパン生成部１１６、交点バッファ１１７、ラスタライザ１１８、およびピクセル処理部１１９を含む。
【００１３】
エッジ生成部１１２は、ＣＰＵ１０２から図形情報を受け取り、エッジ情報を生成する。エッジ生成部１１２は、生成したエッジ情報を図示しないバッファに出力する。なお、バッファは、シーケンサ１１３によって制御されるため、図２では便宜的に、エッジ生成部１１２からシーケンサ１１３にエッジ情報が引き渡されている。エッジ生成部１１２は、例えば、プログラムを実行するＤＳＰであってもよいし、専用のハードウェア回路であってもよい。
【００１４】
シーケンサ１１３は、交点生成部１１４、ソータ１１５、およびスパン生成部１１６を制御する。シーケンサ１１３は、例えば、プログラムを実行するＤＳＰであってもよいし、専用のハードウェア回路であってもよい。エッジ情報が引き渡されると、シーケンサ１１３は、交点生成部１１４を起動する。ただし、エッジ生成部１１２と交点生成部１１４とは、例えば、エッジ情報を格納するバッファを通じて、エッジ情報を授受できればよい。したがって、１つの図形、例えば、多角形中の１つのエッジ情報を生成する度に、エッ
ジ情報が交点生成部１１４に引き渡されるようにしてもよい。つまり、１つの図形の処理において、エッジ生成部１１２と交点生成部１１４とは、並列に処理を実行してもよい。
【００１５】
交点生成部１１４は、エッジ生成部１１２が出力したエッジ情報を基に、交点情報を生成する。ここで、交点情報とは、エッジ生成部１１２が出力したエッジ情報と、画像の水平線との交点である。画像の水平線は、画像中のピクセルの水平方向の並びであり、走査線ともいう。
【００１６】
つまり、交点情報とは、ＣＰＵ１０２が出力した図形の境界線と走査線との交点の情報である。交点生成部１１４は、生成した交点情報を交点バッファ１１７に出力する。交点生成部１１４が例えば、１まとまりの図形に対する交点情報を交点バッファ１１７に出力すると、シーケンサ１１３は、ソータ１１５を起動する。
【００１７】
ソータ１１５は、交点バッファ上の交点情報を走査線（例えば、表示される図形のＹ座標）、Ｘ座標をキーに並べ替える。ソータ１１５は、例えば、プログラムを実行するＤＳＰであってもよいし、専用のハードウェア回路であってもよい。ソータ１１５による並べ替えが完了すると、シーケンサ１１３は、スパン生成部１１６を起動する。
【００１８】
スパン生成部１１６は、並べ替えが完了した交点バッファ１１７の交点情報から、スパン情報を生成する。スパン生成部１１６は、生成したスパン情報をラスタライザ１１８に引き渡す。スパン生成部１１６は、例えば、プログラムを実行するＤＳＰであってもよいし、専用のハードウェア回路であってもよい。
【００１９】
ラスタライザ１１８は、スパン情報からピクセル情報を生成する。ラスタライザ１１８は、生成したピクセル情報をピクセル処理部１１９に引き渡す。ラスタライザ１１８は、プログラムを実行するＤＳＰであってもよいし、専用のハードウェア回路であってもよい。ピクセル処理部１１９は、ピクセル情報から図示しない表示装置を制御する表示装置の制御情報を生成し、表示装置に出力する。
【００２０】
なお、図２の説明では、シーケンサ１１３が、交点生成部１１４の処理終了後ソータ１１５を起動し、ソータ１１５の処理終了後スパン生成部１１６を起動するものとして説明した。しかし、交点生成部１１４が交点生成部１１４の処理終了後ソータ１１５を起動し、ソータ１１５がソータ１１５の処理終了後スパン生成部１１６を起動してもよい。
【００２１】
（エッジ情報とスパン情報）
図３に、エッジ情報の構成を例示する。図３のように、エッジ情報は、例えば、エッジ上端のＹ座標（YTOP）、エッジ下端のＹ座標（YBottom）、エッジ上端のX座標（XTOP）、Ｙ座標が1行変化したときのＸ座標の増（減）分（DeltaX)、エッジの向き（Dir）を有す
る。ここで、エッジの向き（Dir）は、エッジが上向きか下向きかを示す。ただし、図形
の内部は、エッジの向きにエッジに沿って移動したときの進行方向の右側（または左側）に定義される。したがって、エッジの向きが図形の内部がエッジの右側に存在するか、右側に存在するかを定義している、ということもできる。
【００２２】
図４にスパン情報の構成を例示する。スパンとは、例えば、画像の走査線、例えば、水平方向のピクセルの並びのうち、走査線が１つの図形と交差する部分に相当する。スパン情報は、スパン両端を定義する。図４のように、スパン情報は、スパンのＹ座標（Y）、
スパンの左端のＸ座標(XLeft)、スパンの右端のＸ座標(XRight)、およびスパンのカバー
値(Cover)を含む。カバー値とは、エッジが通過するピクセルにおいて、エッジが通過す
る部分の当該ピクセルに対する比率をいう。例えば、カバー値０は、エッジがピクセルを通過しないことを意味する。一方、カバー値１は、エッジがそのピクセルの全体を被覆し
て通過することをいう。一方、カバー値が０から１の間の値のとき、エッジがそのピクセルの一部を被覆して通過することをいう。スパン情報は、例えば、カバー値ごとに出力される。
【００２３】
（交点生成部１１４の処理）
図５から図８により、交点生成部１１４の処理を例示する。図５は、画像処理装置１０１による処理対象を例示する。図５には、円形環状パターンが例示されている。また、円形環状パターンと交差する水平線が例示されている。円形環状パターンの境界線と水平線との間に、４つの交点が形成される。
【００２４】
図２に例示したように、ＣＰＵ１０２上のアプリケーションプログラムは、例えば、図５のような図形をエッジ生成部１１２に引き渡す。エッジ生成部１１２は、円形環状パターンで例示される図形境界線を直線近似した微小直線（エッジ）を生成し、交点生成部１１４に引き渡す。交点生成部１１４は、エッジと水平線が交差する交点情報を交点バッファ１１７に保存する。なお、図５のような外形が曲線の図形ではなく、外形が直線の辺を含む多角形の図形については、直線の辺がそのままエッジとなる。
【００２５】
交点生成部１１４は、図形のエッジが水平線と交差する箇所について、交差したピクセルのＸ座標、エッジがピクセルをどれだけカバーしたかを示す情報（カバー値情報）、およびエッジの向き（Dir）を１つの交点情報として保存する。
【００２６】
図６は、１つのピクセルを４×４のサブピクセルに分割した場合の１交点当たりの交点情報を格納する交点バッファのフォーマット例である。図６では、交点情報は、カバー値情報（Mark1[0:3]、Mark2[0:3]、Mark3[0:3]、Mark4[0:3]）、向き（Dir）、予備（Reserved）、およびＸ座標を含む。
【００２７】
図７は、ピクセルとエッジとの交点で交点情報を取り出すとき、１つのピクセルを４×４のサブピクセルに分割した場合のカバー値情報の例である。Mark1[0:3]、Mark2[0:3]、Mark3[0:3]、Mark4[0:3]は、それぞれ４ビットを有し、エッジによって各サブピクセルがカバーされるか否か、つまり、各サブピクセルが図形の内部に含まれるか否かを示す。交点生成部１１４は、各交点において、エッジに対して図形外側のサブピクセルに対応するカバー値情報のビットに０を設定し、エッジに対して図形内側のサブピクセルに対応するカバー値情報のビットに１を設定する。
【００２８】
スパン生成部１１６は、スパン生成時、カバー値情報を基に、ピクセル全体のカバー値を算出する。カバー値１は、ピクセルが完全にエッジの内側にカバーされることを示す。つまり、カバー値１のピクセルは、図形内部に完全包含されるピクセルを示す。図７の例では、エッジが上向きであるので、エッジの右側に存在するサブピクセルに対応する各ビットに１が設定されている。さらに、同一図形内で重なりがある場合には、エッジの重なりが発生する。スパン生成部１１６は、同一座標においてエッジの重なりが重なる場合のカバー値情報を算出するためのカウンタを有している。例えば、スパン生成部１１６が１６ビット長のカウンタをサブピクセル数用いると、同一座標における各サブピクセルにおいて、６５５３５個のエッジの重なりの度合いを算出できる。
【００２９】
また、図６において、交点バッファ上の向き（Dir）は、エッジが交点を上向きに通過
するか、下向きに通過するかを示す。本実施形態では、例えば、エッジが交点を上向きに通過するとき、交点の右側に図形の内部が存在するものと定義される。ただし、ＣＰＵ１０２、図形処理装置１０１を含む情報処理装置内で統一されている限り、向きの定義は逆であっても構わない。つまり、エッジが交点を上向きに通過するとき、交点の左側に図形の内部が存在するものと定義してもよい。さらに、図６において、Ｘ座標は、水平線上の
位置を示す情報である。Ｘ座標は、例えば、左から右に並ぶピクセルの通し番号で例示できる。
【００３０】
図８は、交点バッファの構成を例示する図である。本実施形態では、各水平線に対して、用意される交点情報の配列である。図８の各矩形内に、図６の交点バッファのフォーマット形式で、交点情報が格納される。
【００３１】
図８の縦方向の並び（０〜Ｈ−１）は、水平線、つまり走査線の番号を示す。一方、横方向の並び（０〜ｋ−１）は、各水平線ごとの交点バッファの集合を例示する。図８の例では、各水平線ごとに、ｋ個の交点バッファの配列のエントリが用意される。交点生成部１１４は、図６のような水平線とエッジが交差する箇所を特定する度に、各水平線の交点配列の空きエントリに、配列の左から順に交点情報を図６のフォーマットで追加する。
【００３２】
なお、図２に例示したソータ１１５は、図６、図８で例示される交点バッファ上の交点情報の配列を各水平線（１〜Ｈ−１）において、Ｘ座標により並べ替えて再度交点バッファ１１７に保存する。
【００３３】
以下、図９から図１３により、スパン生成部１１６の処理を例示する。
（スパン生成部１１６によるカバー値情報の計算）
図９から図１１は、スパン生成部１１６によるカバー値情報の計算手順を例示する図である。スパン生成部１１６はソート後の各水平線上の交点情報の配列の先頭より交点情報を取り出す。そして、スパン生成部１１６は現在のカバー値情報と取り出した交点情報のカバー値情報とを加算または減算して交点のカバー値を求める。スパン生成部１１６は加算するか減算するかはエッジの向き（Dir）により決定する。本実施形態では、上向きが加
算、下向きが減算とする。本実施形態では、エッジが上向きの場合に、図形の内部がエッジの右側に存在すると定義されているからである。図９にカバー値情報を加算する処理を例示する。カバー値は、ピクセル内のサブピクセルに対応する各ワードのエントリ（Marki[j],i=1,4,j=0,3）ごとに加算される。
【００３４】
図１０に、交点Ｘの右側に隣接する座標（Ｘ＋１）のピクセルのカバー値情報の算出を例示する。図１０の例では、交点の次の座標X＋１のピクセルのカバー値情報は交点のサ
ブピクセルのうち、座標X＋１のピクセルの左側に隣接する縦方向の１列（４サブピクセ
ル）をそのまま右側に４列コピーしたものである。なお、交点Ｘの次の座標X＋１に、さ
らに交点がある場合（交点が連続した場合）には、スパン生成部１１６は、上記の手順で交点Ｘのカバー値情報から算出された値に、さらにX＋１座標の交点から算出されるカバ
ー値情報を加算する。
【００３５】
図１１に、カバー値情報を減算する処理を例示する。カバー値は、ピクセル内のサブピクセルに対応する各ビットのエントリ（Marki[j],i=1,4,j=0,3）ごとに減算される。
【００３６】
スパン生成部１１６は、図９から図１１の処理によって得られるカバー値情報を基に、所定のルールにしたがって、スパンのカバー値を算出する。例えば、図１２のカバー値情報を例に、カバー値の算出結果を例示する。算出方法として、カバー値情報に含まれるサブピクセルのうち、ゼロでないサブピクセル数を数える方法（Non-zeroルール）が例示できる。Non-zeroルールによれば、図１２の例では、カバー値は１３／１６＝０．８１２５となる。また、例えば、サブピクセルのカバー値情報が奇数の数を数える方法（ODDルー
ル）では、図１２のカバー値情報の場合、カバー値は６／１６＝０．３７５となる。  
【００３７】
（スパンの生成）
図１３に、スパン生成部１１６によるスパン生成処理を例示する。スパン生成部１１６
は、カバー値が0.0 でないピクセルのＸ座標をスパンの始点とする。そして、スパン生成部１１６は、次に現れるカバー値が0.0 となるピクセルのＸ座標-1（左隣）のピクセルを終点とする。スパン生成部１１６は、始点と終点を含むスパン情報を生成し、生成したスパン情報をラスタライザ１１８に出力する。
【００３８】
例えば、図１３では、交点Ａでカバー値１、交点Ｂ＋１でカバー値０の場合、スパン生成部１１６は、交点Ａを始点として、交点Ｂを終点とするスパン情報を生成する。交点Ａから交点Ｂまでが、カバー値１のスパンとなる。
【００３９】
（問題点）
図６に例示した通り、交点バッファ１１７上の交点情報には、奥行き情報がない。例えば、図１３のようなスパンが複数生成された場合、スパンとスパンとの間の上下関係が不明である。このような場合には、重なりあう複数の図形を描画する場合には、画像処理装置１０１は、一番下の図形から順に描画することを要求される。したがって、画像処理装置１０１は、後の段階で、上層に描画される図形によって隠れた下層の図形部分についても、スパン、さらにはピクセルを生成することになり、無駄な処理を実行することになる。
【実施例】
【００４０】
図１４から図１８を参照して、実施例に係る画像処理装置１について説明する。上記比較例の問題点を解決するため、実施例の画像処理装置１は、交点情報にレイヤ番号を付加して保存する。レイヤ番号は、例えば、図形ごとに与えられる０から始まる整数である。実施例では、レイヤ番号が大きいほど図形の重ねあわせ、つまり図形間の階層関係で上位の図形とする。レイヤ番号は、例えば、ＣＰＵ上のソフトウェアの処理で与えるものとしてもよい。
【００４１】
図１４にレイヤ付き交点情報の交点バッファ上のフォーマットを例示する。図１４のように、実施例の交点情報は、比較例の図１６において、予備エリア（Reserved）が、レイヤ番号（Layer[3:0]）となっている。図１４の例では、レイヤ番号は４ワードで設定される。
【００４２】
図１５に、実施例に係る画像処理装置１と、ＣＰＵ１０２とを含む情報処理装置の構成を例示する。画像処理装置１は、エッジ生成部１２、シーケンサ１３、交点生成部１４、ソータ１５、スパン生成部１６、交点バッファ１７、ラスタライザ１８、およびピクセル処理部１９を含む。エッジ生成部１２、シーケンサ１３、交点生成部１４、ソータ１５、スパン生成部１６、交点バッファ１７、ラスタライザ１８、およびピクセル処理部１９等は、例えば、コンピュータプログラムを実行するＤＳＰであってもよい。また、例えば、ハードウェア記述言語によって画像処理装置１に含まれる各構成部分の処理を記述し、ハードウェア回路によって、各構成部分の処理を実行してもよい。また、画像処理装置１に含まれる各構成部分の処理うち、一部をＤＳＰがコンピュータプログラムによって実行し、一部をハードウェア回路によって実行してもよい。
【００４３】
実施例では、ＣＰＵ１０２は、例えば、画像処理プログラムを実行し、図形情報とともに、レイヤ番号を含む情報を画像処理装置１に引き渡す。一方、シーケンサ１３は、レジスタを有しており、現在処理中の図形のレイヤ番号を保持する。シーケンサ１３は、例えば、図形情報の切り替わりごとに、レイヤ番号を交点生成部１４に引き渡せばよい。交点生成部１４は、生成した交点情報に、シーケンサ１３から引き渡されたレイヤ番号を付与する。レイヤ番号を付与された交点情報は、交点バッファ１７に保持される。スパン生成部１６は、交点情報に付されたレイヤ番号によって、スパンの上下関係を判断しつつ、スパンを生成する。
【００４４】
一方、実施例のエッジ生成部１２、ソータ１５、ラスタライザ１８、およびピクセル処理部１９の処理は、それぞれ比較例のエッジ生成部１１２、ソータ１１５、ラスタライザ１１８、およびピクセル処理部１１９の処理と同様である。
【００４５】
図１６から図１８によりスパン生成部１６の処理を例示する。図１６に、スパン生成部１６が実行するスパン生成処理のフローチャートを例示する。図１６の処理では、まず、スパン生成部１６は、注目レイヤ番号を初期値設定する（Ｓ１）。注目レイヤ番号は、現在処理中のレイヤ番号を意味する。注目レイヤ番号の初期値は、例えば、最下層のレイヤを示す０である。
【００４６】
次に、スパン生成部１６は、水平線位置を初期値設定する（Ｓ２）。水平線位置とは、例えば、画像中のラスタの番号であり、図８の交点バッファ１１７の縦方向の番号（０〜Ｈ−１）で例示される。なお、実施例においても、交点バッファの構成は、比較例の図８と同様である。また、Ｓ２の処理とともに、スパン生成部１６は、各レイヤのカバー値情報を０クリアする。すなわち、各レイヤには、エッジと重なりのない状態を示す初期値が設定される。
【００４７】
次に、スパン生成部１６は、現在処理中の水平線で交点バッファ読み出し初期位置を設定する（Ｓ３）。交点バッファ読み出し位置は、例えば、図８の交点バッファ１１７の横方向の番号（０〜ｋ−１）で例示される。交点バッファ読み出し初期位置は、例えば、０である。
【００４８】
そして、スパン生成部１６は、交点処理を実行する（Ｓ４）。交点処理は、水平線と図形エッジの交点座標において、エッジとピクセルとの関係を示すカバー値を算出するとともに、図形の水平線上の存在範囲を示すスパンを上位レイヤ優先で算出する処理である。Ｓ４の詳細は、図１７、図１８にしたがって、後述する。
【００４９】
Ｓ４において１つの交点座標における処理を実行後、スパン生成部１６は、現在の水平線に次の交点があるか否かを判定する（Ｓ５）。現在の水平線に次の交点がある場合、スパン生成部１６は、制御をＳ４に戻す。一方、現在の水平線に次の交点がない場合、スパン生成部１６は、水平線を更新するとともに、各レイヤのカバー値情報を０クリアする（Ｓ６）。そして、スパン生成部１６は、全水平線の処理が終了したか否かを判定する（Ｓ７）。全水平線の処理が終了していない場合、スパン生成部１６は、制御をＳ３に戻す。すなわち、スパン生成部１６は、次の水平線で、交点バッファ読み出し初期位置から処理を実行する。
【００５０】
一方、Ｓ７の判定で、全水平線の処理が終了した場合、スパン生成部１６は、注目レイヤ番号を更新する（Ｓ８）。そして、スパン生成部１６は、全レイヤ番号の処理が終了したか否かを判定する（Ｓ９）。なお、レイヤ番号の最大値は、例えば、ＣＰＵ１０２からシーケンサ１３を通じて、スパン生成部１６に引き渡される。現在の水平線で全レイヤ番号の処理が終了していない場合、スパン生成部１６は、制御をＳ２に戻す。つまり、新たな注目レイヤ番号において、水平線の初期位置から処理を実行する。
【００５１】
一方、全レイヤの処理が終了した場合、スパン生成部１６は、スパン生成処理を終了する。なお、図１６の処理では、外側のループで注目レイヤ番号を更新し、内側のループで水平線を更新した。しかし、スパン生成部１６の処理が、図１６に限定される訳ではない。例えば、スパン生成部１６は、外側のループで水平線を更新し、内側のループの注目レイヤ番号を更新してもよい。
【００５２】
図１７に、交点処理（図１６のＳ４）の詳細を例示する。図１７の処理では、スパン生成部１６は、水平線上の１つの交点座標において、カバー値の算出と、スパンの算出を実行する。
【００５３】
図１７の例では、まず、スパン生成部１６は、交点バッファから交点情報を読む（Ｓ４０）。そして、スパン生成部１６は、読み出した交点情報のレイヤ番号が注目レイヤ番号より下層か否かを判定する（Ｓ４１）。読み出した交点情報のレイヤ番号が注目レイヤ番号以上の場合、スパン生成部１６は、読み出した交点情報のカバー値情報を基に、レイヤごとにスパンのカバー値情報を算出する（Ｓ４２）。
【００５４】
Ｓ４２の処理では、スパン生成部１６は、まず、比較例の図９および図１１に示した処理と同様の処理を実行する。すなわち、スパン生成部１６は、交点上でエッジが上向きか下向きかを判定する。そして、スパン生成部１６は、交点情報が上向きエッジを示す場合には、交点情報が示すレイヤにおいて、スパンの現在のカバー値情報の各ワードに、Ｓ４１で読み出した交点のカバー値情報の各ワードを加算する。一方、スパン生成部１６は、交点情報が下向きエッジを示す場合には、交点情報が示すレイヤにおいて、スパンの現在のカバー値情報の各ワードから、Ｓ４１で読み出した交点のカバー値情報の各ワードを減算する。
【００５５】
そして、スパン生成部１６は、各交点座標において、サブピクセルのカバー値情報を基に、各スパンにおける交点のカバー値を算出する。サブピクセルのカバー値情報を基に、各スパンにおける交点のカバー値を算出する処理は、比較例において図１２にしたがって例示した処理と同様である。すなわち、スパン生成部１６は、０以外のサブピクセル数と、ピクセルに含まれる全サブピクセル数の比率を求めてもよい。また、スパン生成部１６は、サブピクセルのカバー値情報（Mark1[0:3]、Mark2[0:3]、Mark3[0:3]、Mark4[0:3]）各ビットごとの加算値）が奇数のサブピクセル数と、ピクセルに含まれる全サブピクセル数の比率を求めてもよい。なお、読み出した交点情報のレイヤ番号が注目レイヤ番号より下層の場合、スパン生成部１６は、Ｓ４２の処理を実行しないで、そのままＳ４３に処理を進める。そして、スパン生成部１６は、交点バッファ上の次の交点情報の交点の座標が、現在処理中の交点情報の交点の座標と同一か否かを判定する（Ｓ４３）。ここで、交点の座標が同一とは、２つの交点が重なっていることを意味する。次の交点の座標が、現在処理中の交点の座標と同一の場合、スパン生成部１６は、制御をＳ４０に戻す。すなわち、スパン生成部１６は、重複した交点座標を有するすべての交点情報に対して、図１７の交点処理を実行する。
【００５６】
一方、次の交点の座標が、現在処理中の交点の座標と異なる場合、スパン生成部１６は、スパン生成部１６は、次の交点情報を一時的にレジスタ等に保持する（Ｓ４４）。以下、一時的にレジスタに保持した交点情報の交点座標をＸ２とする。なお、Ｓ４０で読み出した現在の交点情報の交点座標を以下の処理ではＸ１とする。
【００５７】
そして、スパン生成部１６は、スパン計算を実行する（Ｓ４５）。スパン計算では、交点座標が同一の複数の交点情報、または単一の交点情報を基に、スパンの開始、スパンの終了、またはスパンの継続が判断される。
【００５８】
図１８に、スパン計算（図１７のＳ４５）の詳細を例示する。すなわち、上位レイヤの交点座標Ｘ１でのカバー値が０．０より大きく、上位レイヤのスパン未継続のとき、スパン生成部１６は、交点座標Ｘ１のピクセルを上位レイヤのスパンの始点に設定する。ここで、スパン未継続とは、スパンの始点が設定されていない状態をいう。さらに、スパン生成部１６は、始点の右隣のピクセルのカバー値を計算し、次の交点までのカバー値に設定する（Ｓ４５１）。
【００５９】
また、上位レイヤの次の交点Ｘ２のカバー値が０．０で、上位レイヤのスパン継続中のとき、スパン生成部１６は、次の交点Ｘ２の左隣の座標Ｘ２−１のピクセルを上位レイヤのスパンの終点に設定する（Ｓ４５２）。次に、スパン生成部１６は、交点座標Ｘ１に、カバー値１の上位レイヤがあるか否かを判定する（Ｓ４５３）。交点座標Ｘ１に、カバー値１の上位レイヤがあるときで、注目レイヤのスパン継続中のとき、スパン生成部１６は、交点座標Ｘ１の左側の座標Ｘ１−１のピクセルを注目レイヤのスパンの終点に設定する（Ｓ４５４）。さらに、本実施例においては、スパン生成部１６は、注目レイヤの現在の交点座標Ｘ１でのカバー値および座標Ｘ１＋１のカバー値を算出する。そして、スパン生成部１６は、座標Ｘ１＋１のカバー値を次の交点までのカバー値とする。すなわち、本実施例においては、カバー値１の上位レイヤがある場合でも、注目レイヤのカバー値が０になるまでは、注目レイヤのカバー値を算出しておく。
【００６０】
さらに、Ｓ４５４では、注目レイヤが継続中でなく、注目レイヤカバー値が０より大きくなった場合には、スパン生成部１６は、現在の交点座標Ｘ１を注目レイヤのスパンの始点に設定する。さらに、スパン生成部１６は、注目レイヤの現在の交点座標Ｘ１でのカバー値および座標Ｘ１＋１のカバー値を算出する。そして、スパン生成部１６は、座標Ｘ１＋１のカバー値を次の交点までのカバー値とする。上述のように、現在交点座標Ｘ１において、注目レイヤのスパンが継続していて、上位レイヤの交点が１未満に変化した場合は、現在の交点座標Ｘ１に注目レイヤの交点がなくても注目レイヤのスパンの始点とする必要がある。そのため、カバー値１の上位レイヤが存在する場合でも、注目レイヤについて、始点の設定と、カバー値の計算とを実行しておくのである。
【００６１】
その後、スパン生成部１６は、スパン計算１の処理を終了する。一方、交点座標Ｘに、カバー値１の上位レイヤがないときには、スパン生成部１６は、Ｓ４５５からＳ４５７の処理を実行する。すなわち、注目レイヤの交点座標Ｘ１でのカバー値が０．０より大きく、注目レイヤのスパン未継続のとき、スパン生成部１６は、交点座標Ｘ１のピクセルを注目レイヤのスパンの始点に設定する。また、スパン生成部１６は、始点の右隣のピクセルのカバー値を計算し、次の交点までのカバー値に設定する。注目レイヤの次の交点座標Ｘ２までのカバー値を現在のカバー値と呼ぶ。さらに、スパン生成部１６は、交点座標Ｘ１から次の交点座標Ｘ２−１までのスパン情報をラスタライザ１８に送出する（Ｓ４５５）。したがって、本実施例の処理では、次の交点Ｘ２のカバー値が０でなくても一旦スパンは終了する。ただし、Ｓ４５５の処理に代えて、スパン生成部１６が次の交点Ｘ２のカバー値が０になるまで、スパンを継続し、次の交点Ｘ２のカバー値が０になったときに、スパン情報をラスタライザ１８に送出するようにしてもよい。
【００６２】
さらに、スパン生成部１６は、現在の交点Ｘ１に注目レイヤがなく、注目レイヤの現在のカバー値が０．０より大きく、かつ、上位レイヤのカバー値が現在の交点Ｘ１で１．０未満に変化した場合、現在の交点Ｘ１をスパンの始点に設定する（Ｓ４５６）。Ｓ４５６の処理は、上位レイヤに隠されていた、スパン継続中の注目レイヤが表れたことに対応する。この場合には、上位レイヤに隠されていた注目レイヤのスパンが開始する。
【００６３】
さらにまた、注目レイヤの次の交点Ｘ２のカバー値が０．０で、注目レイヤのスパン継続中のとき、スパン生成部１６は、次の交点Ｘ２座標の左隣の座標Ｘ２−１のピクセルを注目レイヤのスパンの終点に設定する（Ｓ４５７）。
【００６４】
図１８の手順を交点座標ごとに繰り返すにより、上位レイヤが存在しない場合には、Ｓ４５５の処理で、注目レイヤのスパンの始点が設定される。一方、交点座標に、カバー値１の上位レイヤが存在する場合でも、Ｓ４５４の説明で述べたように、注目レイヤのスパンの始点と次の交点までの現在のカバー値が設定される。すなわち、本実施例では、上位
レイヤのカバー値が１以上の場合も、注目レイヤの始点とカバー値は一応算出される。
【００６５】
しかしながら、上位レイヤのカバー値が１の場合、Ｓ４５３の判定がＹＥＳとなり、Ｓ４５５からＳ４５７の処理が省略される。その結果、交点にカバー値１の上位レイヤが存在する場合には、注目レイヤに対するスパン情報の出力が省略される。したがって、上位レイヤの図形によって隠される範囲では、当該スパンのピクセルは生成されず、図形処理装置１は、ベクタグラフィックスにおいて、効率的にピクセルを作成できる。
【００６６】
さらに、複数の交点座標に対するスパン計算１の処理（図１８）の繰り返しにおいて、水平線上で上位レイヤの交点に到達した場合にＳ４５２の処理によって、注目レイヤのスパンの終点が設定される。また、水平線上で、注目レイヤの図形の右側エッジに達した場合には、Ｓ４５７の処理によって、注目レイヤのスパンの終点が設定される。
【００６７】
（変形例）
図１７、図１８では、交点のカバー値をサブピクセルのカバー値情報から得られる０〜１の間の値として、算出した。しかし、このような手順に代えて、交点のカバー値を０か１かに限定してもよい。例えば、図形処理装置１は、図１４の交点情報において、Mark1[3:0]からMark4[3:0]に代えて、交点の有無を示す１ビットのフラグによって、交点の有無を記憶すればよい。その場合には、図１７のＳ４３の交点のカバー値計算としては、スパン生成部１６は、単に、交点情報から、交点の有無を示す１ビットのフラグを読み出せばよい。
【００６８】
図１９に、カバー値を０か１に限定する場合のスパン計算（図１７のＳ４５）の詳細を例示する。すなわち、上位レイヤの交点座標Ｘ１でのカバー値が１であり、かつ、上位レイヤのスパン未継続のとき、スパン生成部１６は、交点座標Ｘ１のピクセルを上位レイヤのスパンの始点に設定する（Ｔ４５１）。
【００６９】
また、上位レイヤの次の交点座標Ｘ２のカバー値が０で、上位レイヤのスパン継続中のとき、スパン生成部１６は、次の交点座標Ｘ２の左隣の座標Ｘ２−１のピクセルを上位レイヤのスパンの終点に設定する（Ｔ４５２）。
【００７０】
次に、スパン生成部１６は、交点座標Ｘ１に、カバー値１の上位レイヤがあるか否かを判定する（Ｔ４５３）。交点座標Ｘ１に、カバー値１の上位レイヤがあるときで、注目レイヤのスパン継続中のとき、スパン生成部１６は、交点座標Ｘ１の左隣の座標Ｘ１−１のピクセルを注目レイヤのスパンの終点に設定する（Ｔ４５４）。さらに、Ｔ４５４において、注目レイヤが継続中でなく、注目レイヤカバー値が１となった場合には、スパン生成部１６は、現在の交点座標Ｘ１を注目レイヤのスパンの始点に設定する。さらに、注目レイヤの現在の交点座標Ｘ１でのカバー値および座標Ｘ１＋１のカバー値を算出する。そして、スパン生成部１６は、座標Ｘ１＋１のカバー値を次の交点までのカバー値とする。この処理は、Ｓ４５４と同様である。
【００７１】
一方、交点座標Ｘ１に、カバー値１の上位レイヤがないときには、スパン生成部１６は、Ｔ４５５からＴ４５７の処理を実行する。すなわち、注目レイヤの交点座標Ｘ１でのカバー値が１であり、かつ、注目レイヤのスパン未継続のとき、スパン生成部１６は、交点座標Ｘ１のピクセルを注目レイヤのスパンの始点に設定する。また、現在の交点座標Ｘ１の右隣から次の交点座標Ｘ２までのカバー値を１に設定する。そして、スパン生成部１６は、現在の交点座標Ｘ１から次の交点Ｘ２−１までのスパン情報をラスタライザ１に送出する（Ｔ４５５）。
【００７２】
さらに、スパン生成部１６は、現在の交点Ｘ１に注目レイヤがなく、注目レイヤの現在
のカバー値が１であり、かつ、上位レイヤのカバー値が現在の交点Ｘ１で０に変化した場合、現在の交点Ｘ１をスパンの始点に設定する（Ｔ４５６）。Ｔ４５６の処理は、Ｓ４５６と同様である。さらにまた、注目レイヤの次の交点座標Ｘ２のカバー値が０で、注目レイヤのスパン継続中のとき、スパン生成部１６は、次の交点座標Ｘ２の左隣の座標Ｘ２−１のピクセルを注目レイヤのスパンの終点に設定する（Ｔ４５７）。
【００７３】
以上述べたように、カバー値を０か１に限定し、サブピクセルによってカバー値を算出しない場合でも、図１６−図１８と同様に、図形の上位レイヤと下位レイヤの関係から、効率的なピクセルの生成が可能である。
【００７４】
すなわち、上位レイヤのカバー値が１の場合、Ｔ４５３の判定がＹＥＳとなり、Ｔ４５５からＴ４５７の処理が省略される。その結果、交点にカバー値１の上位レイヤが存在する場合には、注目レイヤに対するスパン情報の出力が省略される。したがって、上位レイヤの図形によって隠される範囲では、当該スパンのピクセルは生成されず、図形処理装置１は、ベクタグラフィックスにおいて、効率的にピクセルを作成できる。
【００７５】
さらに、複数の交点座標に対するスパン計算２の処理（図１９）の繰り返しにおいて、水平線上で上位レイヤの交点に到達した場合にＴ４５２の処理によって、注目レイヤのスパンの終点が設定される。また、水平線上で、注目レイヤの図形の右側エッジに達した場合には、Ｔ４５６の処理によって、注目レイヤのスパンの終点が設定される。
【００７６】
なお、図１９の処理を図１８と比較した場合、図１８では、交点のカバー値が０から１の範囲の値を取り得るため、上位レイヤの図形が半透明となって下位レイヤの図形を表示する場合があり、スパン生成部１６は、始点から次の交点までのカバー値を維持する（図１８のＳ４５５）。一方、図１９では、カバー値は、０または１のいずれかであるので、始点から終点まではカバー値が確定しており、スパン生成部１６は、始点から次の交点までのカバー値を維持する必要がない（図１９のＴ４５５）。
【００７７】
（その他）
以下、本実施形態で説明したベクタグラフィックスにおけるピクセルの処理と、３次元グラフィックスでのＺバッファ法との違いを説明する。３次元グラフィックスにおける隠面処理に用いられるＺバッファ法では、図形処理装置は、ピクセル単位で奥行き情報（Ｚ値）を持ちピクセル単位でＺ値比較する。これに対して、本実施形態の図形処理装置１は、ピクセルの集合であるスパン単位で処理するため、より効率よく隠面処理を実行できる。
【００７８】
《コンピュータが読み取り可能な記録媒体》
コンピュータその他の機械、装置（以下、コンピュータ等）に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【００７９】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスクやＲＯＭ（リードオンリーメモリ）等がある。
【符号の説明】
【００８０】
１  図形処理装置
１２  エッジ生成部
１３  シーケンサ
１４  交点生成部
１５  ソータ
１６  スパン生成部
１７  交点バッファ
１８  ラスタライザ
１９  ピクセル処理部
【図１】
2014179031.tif 000003
【図２】
2014179031.tif 000004
【図３】
2014179031.tif 000005
【図４】
2014179031.tif 000006
【図５】
2014179031.tif 000007
【図６】
2014179031.tif 000008
【図７】
2014179031.tif 000009
【図８】
2014179031.tif 000010
【図９】
2014179031.tif 000011
【図１０】
2014179031.tif 000012
【図１１】
2014179031.tif 000013
【図１２】
2014179031.tif 000014
【図１３】
2014179031.tif 000015
【図１４】
2014179031.tif 000016
【図１５】
2014179031.tif 000017
【図１６】
2014179031.tif 000018
【図１７】
2014179031.tif 000019
【図１８】
2014179031.tif 000020
【図１９】
2014179031.tif 000021