(57)【要約】【課題】  フレームメモリのアクセス効率を悪化させず、かつ、少ない処理量で描画処理を実行することができる画像処理装置を提供する。【解決手段】  ラスタライザ２は、描画対象であるプリミティブの各頂点の座標をジオメトリ処理部１から取得する。そして、ラスタライザ２は、プリミティブに属するピクセルを内包するブロックを当該ブロックより小さなサイズのブロックに分割しつつ、分割した各ブロックからプリミティブに属するピクセルを内包するブロックを探索する描画範囲探索処理をブロックサイズが描画可能なブロックサイズになるまで階層的に繰り返し、この階層的な描画範囲探索処理により得られたブロックが内包するプリミティブのピクセルの描画処理を行う。【選択図】図１
2015210730.tif 000002
【特許請求の範囲】
【請求項１】
描画対象であるプリミティブの各頂点の座標を取得し、前記プリミティブに属するピクセルの描画を行う画像処理装置において、
前記プリミティブに属するピクセルを内包するブロックを当該ブロックより小さなサイズのブロックに分割しつつ、分割した各ブロックから前記プリミティブに属するピクセルを内包するブロックを探索する描画範囲探索処理をブロックサイズが描画可能なブロックサイズになるまで階層的に探索範囲を狭めながら繰り返す描画範囲探索手段と、
前記描画範囲探索手段により得られた描画可能なブロックが内包する前記プリミティブのピクセルの描画処理を行う描画処理手段と
を具備することを特徴とする画像処理装置。
【請求項２】
前記描画範囲探索手段は、上位階層の描画範囲探索処理において分割されたブロックを処理対象とする下位階層の描画範囲探索処理では、上位階層でのブロックの分割方向と直交する方向に下位階層でのブロックの分割を行うことを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記プリミティブの頂点に接する矩形領域の短辺方向を、前記描画処理におけるピクセルの描画方向としたことを特徴とする請求項１または２に記載の画像処理装置。
【請求項４】
前記描画範囲探索手段は、下位階層のブロックの描画処理を終え、次の上位階層のブロックを分割し、当該分割されたブロックを下位階層のブロックに分割するに際し、前記描画処理を終えたブロックに隣接したブロックから分割を開始することを特徴とする請求項１〜３のいずれか１の請求項に記載の画像処理装置。
【請求項５】
前記描画範囲探索手段は、ブロックを分割した分割線と、前記プリミティブの各辺または各辺の延長線との交点座標に基づいて、前記探索範囲を求めることを特徴とする請求項１〜４のいずれか１の請求項に記載の画像処理装置。
【請求項６】
前記描画範囲探索手段は、前記プリミティブの外周を外側に拡張する手段を具備することを特徴とする請求項１〜５のいずれか１の請求項に記載の画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、いわゆるラスタライザを備えた画像処理装置に関する。
【背景技術】
【０００２】
３次元コンピュータグラフィックスでは、３次元空間内のオブジェクトの表面を複数のプリミティブ（例えば、三角形や四角形などのポリゴン）の集合とみなし、各プリミティブの描画処理を行う。図１３はこのプリミティブの描画処理の一般的な例を示すものである。この例では、ラスタライザが、プリミティブをｘ軸方向に長い４ピクセル幅の矩形領域に分割し、各矩形領域のピクセルの描画処理を行っている。
【０００３】
さて、画像処理装置では、表示対象であるフレームを記憶するためのフレームメモリとして、ＳＤＲＡＭ等のページ単位でのアクセスに適したメモリが用いられることが多い。しかし、このような画像処理装置において、ラスタライザが上記のような描画処理を行うと、次の問題が生じる。すなわち、プリミティブ内の矩形領域が長いと、矩形領域のピクセルのカラーデータをフレームメモリに順次書き込んでゆく際、書き込み先がフレームメモリのページ境界を飛び越えることによりフレームメモリのアクセス時間が長くなり、描画処理の効率が低下するのである。
【０００４】
また、画像処理装置の中には、フレームメモリのアクセス効率を高めるため、ＳＤＲＡＭ等とともにキャッシュメモリを使用したものも多い。この種の画像処理装置では、例えばバイリニアフィルタ処理等のフィルタ処理を行いつつ、矩形領域内のピクセルのカラーデータをフレームメモリに書き込むような場合に次の問題が生じる。すなわち、矩形領域が長くなると、フィルタ処理を実行するために書き込み対象のピクセルとその周囲のピクセルのカラーデータが必要な場合に、該当するピクセルのカラーデータがキャッシュメモリに残っておらず、キャッシュミスとなる可能性が高くなり、フレームメモリのアクセス効率が低下するのである。
【０００５】
このような問題の解決に有効な手段として、タイリングアーキテクチャと呼ばれる方法が知られている。このタイリングアーキテクチャによると、画像処理装置は、フレームを所定のサイズ（例えば、８×８ピクセル）に分割したタイル毎に、タイル内にピクセルを有するプリミティブについて描画処理を行う。従って、描画処理の対象となるピクセル列が過度に長くなるのを防止し、フレームメモリのアクセス効率が低下する問題を解決することができる。なお、このタイリングアーキテクチャによる描画処理は、例えば特許文献１に開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１３−２５３７６号公報
【非特許文献】
【０００７】
【非特許文献１】線のラスタ化ルール（アンチエイリアス、マルチサンプリングなし）、［平成２６年４月８日検索］、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｍｓｄｎ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ／ｊａ−ｊｐ／ｌｉｂｒａｒｙ／ｃｃ６２７０９２（ｖ＝ｖｓ．８５）．ａｓｐｘ＞
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、上述した特許文献１の技術では、タイル毎に、そのタイル内にピクセルを有するプリミティブがあるか否かを判定し、そのプリミティブのタイル内のピクセル列を描画する必要がある。このように従来の技術では、プリミティブのピクセルを含まないタイルについても処理対象とするため、描画処理の処理量が大きいという問題があった。
【０００９】
この発明は、以上説明した事情に鑑みてなされたものであり、フレームメモリのアクセス効率を悪化させず、かつ、少ない処理量で描画処理を実行することができる画像処理装置を提供することを目的としている。
【課題を解決するための手段】
【００１０】
この発明は、描画対象であるプリミティブの各頂点の座標を取得し、前記プリミティブに属するピクセルの描画を行う画像処理装置において、前記プリミティブに属するピクセルを内包するブロックを当該ブロックより小さなサイズのブロックに分割しつつ、分割した各ブロックから前記プリミティブに属するピクセルを内包するブロックを探索する描画範囲探索処理をブロックサイズが描画可能なブロックサイズになるまで階層的に探索範囲を狭めながら繰り返す描画範囲探索手段と、前記描画範囲探索手段により得られた描画可能なブロックが内包する前記プリミティブのピクセルの描画処理を行う描画処理手段とを具備することを特徴とする画像処理装置を提供する。
【００１１】
この発明によれば、描画範囲探索手段は、プリミティブに属するピクセルを内包するブロックを当該ブロックより小さなサイズのブロックに分割しつつ、分割した各ブロックから前記プリミティブに属するピクセルを内包するブロックを探索する描画範囲探索処理をブロックサイズが描画可能なブロックサイズになるまで階層的に探索範囲を狭めながら繰り返す。そして、描画手段は、描画範囲探索手段により得られた描画可能なブロックが内包するプリミティブのピクセルの描画処理を行う。従って、この発明によれば、プリミティブのピクセルを含むブロックを、描画可能なブロックサイズになるまで分割し、少ない処理量で、プリミティブに属するピクセルを内包する最適なサイズのブロックを得ることができる。従って、フレームメモリのアクセス効率を悪化させず、かつ、少ない処理量で描画処理を実行することができる。
【図面の簡単な説明】
【００１２】
【図１】この発明の第１実施形態である画像処理装置の構成を示すブロック図である。
【図２】同画像処理装置のラスタライザの処理内容を示すフローチャートである。
【図３】同ラスタライザの処理対象であるプリミティブを例示する図である。
【図４】同ラスタライザが実行する階層的な描画範囲探索処理の処理内容を例示する図である。
【図５】同描画範囲探索処理において探索開始位置および探索終了位置を求める処理の処理内容を示すフローチャートである。
【図６】同実施形態において実行されるジグザグスキャンの例を示す図である。
【図７】同実施形態において実行されるジグザグスキャンの例を示す図である。
【図８】同実施形態において求められた各階層の描画探索範囲の例を示す図である。
【図９】同実施形態において求められた各階層の描画探索範囲の例を示す図である。
【図１０】この発明の第２実施形態である画像処理装置において実行されるアンチエイリアスフィルタ処理を説明する図である。
【図１１】同アンチエイリアスフィルタ処理に用いられるカバレッジ計算用エリアを説明する図である。
【図１２】同実施形態における描画範囲探索処理の実行例を示す図である。
【図１３】従来の画像処理装置において行われる描画処理を説明する図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照し、この発明の実施の形態を説明する。
【００１４】
＜第１実施形態＞
［１．画像処理装置の構成の概略］
図１は、この発明の第１実施形態である画像処理装置１００の構成を示すブロック図である。この画像処理装置１００は、３次元のオブジェクトを任意の視点から見た２次元画像の画像データを生成し、ディスプレイ２００に表示させる装置である。
【００１５】
図１に示すように、画像処理装置１００は、ジオメトリ処理部１と、ラスタライザ２と、ピクセル処理部３と、表示制御部４と、メモリ部５１と、メモリコントローラ５２と、キャッシュメモリ５３とを有する。ジオメトリ処理部１は、ディスプレイ２００の表示画面に表示させる３次元のオブジェクトの表面を三角形や四角形等のプリミティブの集合により近似し、表示画面内に表示させる２次元の各プリミティブの各頂点の属性値を発生する手段である。ここで、プリミティブの各頂点の属性値には、表示画面内におけるプリミティブの各頂点の座標、各頂点のカラー、各頂点に適用するテクスチャ座標、３次元のオブジェクトの表面における各頂点の法線ベクトル等が含まれる。ジオメトリ処理部１は、オブジェクトを構成する各プリミティブの各頂点の属性値を各プリミティブの描画順にラスタライザ２に供給する。
【００１６】
ラスタライザ２は、ジオメトリ処理部１から供給される各プリミティブの各頂点の属性値に基づいて各プリミティブの描画処理を行う手段である。この描画処理において、ラスタライザ２は、表示画面上においてプリミティブの占める領域を求め、当該領域内に属するピクセル列の属性値を当該プリミティブの各頂点の属性値に基づいて生成し、ピクセル処理部３に供給する。なお、ラスタライザ２が実行する描画処理の詳細については後述する。
【００１７】
メモリ部５１は、フレームメモリ、テクスチャメモリ等の各種のメモリを含む。フレームメモリは、ディスプレイ２００に表示させるフレーム上の各ピクセルのカラーデータを記憶するメモリである。テクスチャメモリは、表示対象である各プリミティブの表面に貼り付けるテクスチャの画像データ（カラーデータを含む）を記憶したメモリである。メモリコントローラ５２は、メモリ部５１の各メモリに対するアクセスを制御する装置である。キャッシュメモリ５３は、メモリ部５１のフレームメモリ、テクスチャメモリ等の大容量メモリから読み出したデータを一時記憶するためのメモリである。なお、メモリ部５１を構成する各メモリのうち大容量のメモリは、画像処理装置１００の外付けのメモリとしてもよい。
【００１８】
ピクセル処理部３は、ラスタライザ２から供給されるプリミティブ内のピクセル列の属性値に基づいて、各ピクセルのカラーデータを生成し、キャッシュメモリ５３およびメモリコントローラ５２を介してメモリ部５１のフレームメモリに書き込む。その際、ピクセル処理部３は、ラスタライザ２から供給される属性値に基づいて、プリミティブに貼り付けるべきテクスチャを求め、そのテクスチャのカラーデータをテクスチャメモリから読み出して、プリミティブのピクセル列のカラーデータの演算に用いる。また、バイリニアフィルタ等のフィルタ処理が必要な場合、ピクセル処理部３は、カラーデータの書き込みを行うピクセルとその周辺のピクセルのカラーデータをフレームメモリから読み出してフィルタ処理に使用する。なお、キャッシュメモリ５３に該当するピクセルのカラーデータが記憶されている場合は、キャッシュメモリ５３からカラーデータを取得する。
【００１９】
表示制御部４は、ディスプレイ２００へ垂直同期信号、水平同期信号を出力し、これらの同期信号に同期して、メモリ部５１のフレームメモリからメモリコントローラ５２を介してカラーデータを順次読み出し、ディスプレイ２００の表示画面に表示させる。
以上が本実施形態による画像処理装置１００の構成の概略である。
【００２０】
［２．ラスタライザ２の特徴］
この画像処理装置１００において、メモリ部５１のフレームメモリは、例えばＳＤＲＡＭにより構成されている。このフレームメモリについては、アクセス効率を高くするため、ページ単位で、連続したアドレスにアクセスを行うことが求められる。従って、フレームメモリにピクセル列のカラーデータを書き込む場合、ピクセル列は、あまり長くならないようにすることが好ましい。ピクセル列が長くなると、各ピクセルのカラーデータの書き込み先アドレスが複数のページに跨ることとなり、アクセス効率を低下させるからである。
【００２１】
また、この画像処理装置１００では、テクスチャマッピングを伴う描画処理を実行する場合がある。その際、メモリ部５１のテクスチャメモリに記憶されたテクスチャデータの中からプリミティブに貼り付けるテクスチャのテクスチャデータを読み出してキャッシュメモリ５３に一時記憶させ、テクスチャマッピングに使用する。この場合、キャッシュメモリ５３には、必要なテクスチャデータを含む小領域のテクスチャデータが記憶される。従って、キャッシュメモリ５３を利用したテクスチャマッピングにおいてキャッシュミスを発生させないためにも、連続的に描画するピクセル列の長さはあまり長くない方が好ましい。何故ならば、例えば長いピクセル列をプリミティブが含む場合、次のような問題が起こり得るからである。まず、テクスチャメモリから必要なテクスチャデータを含む小領域のテクスチャデータを読み出してキャッシュメモリ５３に記憶させ、このキャッシュメモリ５３のテクスチャデータを使用して、あるスキャンライン上のプリミティブへのテクスチャマッピングを行ったとする。このスキャンラインの次のスキャンラインも同じプリミティブを横切っている。従って、次のスキャンライン上のプリミティブへのテクスチャマッピングのためのテクスチャデータがキャッシュメモリ５３に残っていれば、そのテクスチャデータをテクスチャマッピングに使用可能である。しかし、プリミティブに含まれるピクセル列が長い状況では、キャッシュメモリ５３におけるテクスチャデータの入れ替えが頻繁に行われる。このため、スキャンライン上のプリミティブへのテクスチャマッピングを行おうとする際に、必要なテクスチャデータがキャッシュメモリ５３から既に追い出されており、キャッシュミスになる、という問題が起こり得るのである。
【００２２】
また、画像処理装置１００は、描画処理の際にバイリニアフィルタ等のフィルタ処理を実行する場合がある。従って、このフィルタ処理を効率的に実行するためにも、連続的に描画するピクセル列は、あまり長くならないことが好ましい。連続的に描画するピクセル列を短くすることにより、複数ページに跨るアクセスが減るからである。
【００２３】
そこで、本実施形態におけるラスタライザ２は、フレームから表示対象であるプリミティブを含む所定の大きさのブロックを取り出し、その後、このブロックをより小さなブロックに分割しつつ、分割したブロックの中からプリミティブに属するピクセルを内包しないブロックを除外し、プリミティブに属するピクセルを内包するブロックを探索する、という描画範囲探索処理を階層的に繰り返す。そして、ラスタライザ２は、この階層的な描画範囲探索処理により得られた各ブロックから、プリミティブに属するピクセル列を求め、そのピクセル列の属性値を生成してピクセル処理部３に供給するのである。
【００２４】
［３．ラスタライザ２の処理内容］
【００２５】
［３−１．ラスタライザ２の処理内容の概略］
図２はラスタライザ２の処理内容を示すフローチャートである。また、図３はフレームに描画するプリミティブを例示する図である。本実施形態では、描画範囲探索処理を階層的に繰り返すことにより、フレーム内においてプリミティブの所在する領域を絞り込み、プリミティブの所在する領域内のピクセルの描画を行う。図２において、ステップＳ１〜Ｓ３の各処理は、この階層的な描画範囲探索処理を実行するための初期設定に相当する。
【００２６】
図４（ａ）〜（ｄ）は、本実施形態における階層的な描画範囲探索処理の処理内容を例示する図である。最上位階層（第１階層）の描画範囲探索処理Ｓ１０では、図４（ａ）に示すように、表示対象のプリミティブを含む所定サイズのブロックを例えばｘ軸方向のスキャンラインＳＬ＿ｉａ、ＳＬ＿ｉａ＋１、…により所定ピクセル幅のブロックに分割する。図４（ａ）に示す例では、このブロックのピクセル幅を６４にしている。そして、分割した各ブロックのうちプリミティブのピクセルを含むブロックＹ６４ＢＬＫＳＴＡＲＴ〜Ｙ６４ＢＬＫＥＮＤの各々について、プリミティブに属するピクセルを含むｘ軸方向の範囲を探索する（具体的な探索方法は後述する）。このプリミティブのピクセルを含むｘ軸方向の範囲が第２階層の描画範囲探索処理Ｓ１０＿ｉの探索範囲となる。
【００２７】
第２階層の描画範囲探索処理Ｓ１０＿ｉでは、図４（ｂ）に示すように、第１階層の描画範囲探索処理Ｓ１０において得られたプリミティブのピクセルを含むブロックＹ６４ＢＬＫＳＴＡＲＴ〜Ｙ６４ＢＬＫＥＮＤの各々を例えばｙ軸方向のスキャンラインＳＬ＿ｊａ、ＳＬ＿ｊａ＋１、…により所定ピクセル幅のブロックに分割する。図４（ｂ）に示す例では、このブロックのピクセル幅を６４にしている。そして、分割した各ブロックのうちプリミティブのピクセルを含むブロックＸ６４ＢＬＫＳＴＡＲＴ〜Ｘ６４ＢＬＫＥＮＤの各々について、プリミティブのピクセルを含むｙ軸方向の範囲を探索する（具体的な探索方法は後述する）。このプリミティブのピクセルを含むｙ軸方向の範囲が第３階層の描画範囲探索処理Ｓ１０＿ｉ＿ｊの探索範囲となる。
【００２８】
第３階層の描画範囲探索処理Ｓ１０＿ｉ＿ｊでは、図４（ｃ）に示すように、第２階層の描画範囲探索処理Ｓ１０＿ｉにおいて得られたプリミティブのピクセルを含むブロックＸ６４ＢＬＫＳＴＡＲＴ〜Ｘ６４ＢＬＫＥＮＤの各々を例えばｘ軸方向のスキャンラインＳＬ＿ｋａ、ＳＬ＿ｋａ＋１、…により所定ピクセル幅のブロックに分割する。図４（ｃ）に示す例では、このブロックのピクセル幅を４にしている。そして、分割した各ブロックのうちプリミティブのピクセルを含むブロックの各々について、プリミティブのピクセルを含むｘ軸方向の範囲を求める。このプリミティブのピクセルを含むｘ軸方向の範囲が描画範囲となる。図４（ｄ）にこのようにして得られた描画範囲を例示する。第３階層の描画範囲探索処理Ｓ１０＿ｉ＿ｊでは、このようにして求めた描画範囲内の各ピクセルの描画を行う。
以上がラスタライザ２により実行される階層的な描画範囲探索処理の概略である。
【００２９】
［３−２．階層的な描画範囲探索処理を実行するための初期設定］
次に図２のステップＳ１〜Ｓ３の各処理について説明する。プリミティブの各頂点の属性値が与えられると、ラスタライザ２は、まず、スキャンラインとプリミティブの各辺（より正確には各辺またはその延長線）との交点の座標を求めるための関数を発生する（ステップＳ１）。本実施形態における描画範囲探索処理Ｓ１０、Ｓ１０＿ｉ、Ｓ１０＿ｉ＿ｊでは、この関数を利用して描画範囲の探索を行う。
【００３０】
次に図３を参照し、このステップＳ１の処理内容について説明する。図３に示す例において、プリミティブは四角形であり、４個の頂点Ｖ０、Ｖ１、Ｖ２およびＶ３を有する。そして、ｘｙ座標平面において、頂点Ｖ０の座標は（ｘ０、ｙ０）、頂点Ｖ１の座標は（ｘ１、ｙ１）、頂点Ｖ２の座標は（ｘ２、ｙ２）、頂点Ｖ３の座標は（ｘ３、ｙ３）となっている。
【００３１】
このｘｙ座標平面上において、頂点Ｖ０およびＶ１間を結ぶ辺およびその延長線上の各点の座標（ｘ、ｙ）は、次式を満たす。
ｘ＝（（ｘ０−ｘ１）／（ｙ０−ｙ１））ｙ＋（ｘ１ｙ０−ｘ０ｙ１）／（ｙ０−ｙ１）
……（１Ｘ）
ｙ＝（（ｙ０−ｙ１）／（ｘ０−ｘ１））ｘ−（ｘ１ｙ０−ｘ０ｙ１）／（ｘ０−ｘ１）
……（１Ｙ）
【００３２】
また、頂点Ｖ１およびＶ２間を結ぶ辺およびその延長線上の各点の座標（ｘ、ｙ）は、次式を満たす。
ｘ＝（（ｘ１−ｘ２）／（ｙ１−ｙ２））ｙ＋（ｘ２ｙ１−ｘ１ｙ２）／（ｙ１−ｙ２）
……（２Ｘ）
ｙ＝（（ｙ１−ｙ２）／（ｘ１−ｘ２））ｘ−（ｘ２ｙ１−ｘ１ｙ２）／（ｘ１−ｘ２）
……（２Ｙ）
【００３３】
また、頂点Ｖ２およびＶ３間を結ぶ辺およびその延長線上の各点の座標（ｘ、ｙ）は、次式を満たす。
ｘ＝（（ｘ２−ｘ３）／（ｙ２−ｙ３））ｙ＋（ｘ３ｙ２−ｘ２ｙ３）／（ｙ２−ｙ３）
……（３Ｘ）
ｙ＝（（ｙ２−ｙ３）／（ｘ２−ｘ３））ｘ−（ｘ３ｙ２−ｘ２ｙ３）／（ｘ２−ｘ３）
……（３Ｙ）
【００３４】
また、頂点Ｖ３およびＶ０間を結ぶ辺およびその延長線上の各点の座標（ｘ、ｙ）は、次式を満たす。
ｘ＝（（ｘ３−ｘ０）／（ｙ３−ｙ０））ｙ＋（ｘ０ｙ３−ｘ３ｙ０）／（ｙ３−ｙ０）
……（４Ｘ）
ｙ＝（（ｙ３−ｙ０）／（ｘ３−ｘ０））ｘ−（ｘ０ｙ３−ｘ３ｙ０）／（ｘ３−ｘ０）
……（４Ｙ）
【００３５】
ステップＳ１において、ラスタライザ２は、プリミティブの各頂点Ｖ０、Ｖ１、Ｖ２およびＶ３の座標に基づいて、以上の各式（１Ｘ）〜（４Ｙ）に示す各関数を生成する。そして、本実施形態では、任意のｙ座標を有するｘ軸方向のスキャンラインとプリミティブの各辺またはその延長線との交点のｘ座標を求めるために式（１Ｘ）、（２Ｘ）、（３Ｘ）および（４Ｘ）に示す各関数を使用する。また、任意のｘ座標を有するｙ軸方向のスキャンラインとプリミティブの各辺またはその延長線との交点のｙ座標を求めるために式（１Ｙ）、（２Ｙ）、（３Ｙ）および（４Ｙ）に示す各関数を使用する。
【００３６】
ステップＳ１の処理が終了すると、ラスタライザ２は、描画矩形範囲を設定する（ステップＳ２）。さらに詳述すると、ラスタライザ２は、図３に示すように、プリミティブの各頂点Ｖ０、Ｖ１、Ｖ２およびＶ３のＸ座標の最大値ＶＸＭＡＸおよび最小値ＶＸＭＩＮと、Ｙ座標の最大値ＶＹＭＡＸおよび最小値ＶＹＭＩＮとを求める。そして、ラスタライザ２は、ｘｙ座標平面において、直線ｙ＝ＶＹＭＡＸおよび直線ｙ＝ＶＹＭＩＮに挟まれ、かつ、直線ｘ＝ＶＸＭＡＸおよび直線ｘ＝ＶＸＭＩＮに挟まれた領域を描画矩形範囲とする。
【００３７】
次にラスタライザ２は、スキャン方向の初期設定を行う（ステップＳ３）。具体的には、描画矩形範囲のｘ軸方向の長さＶＸＭＡＸ−ＶＸＭＩＮと、ｙ軸方向の長さＶＹＭＡＸ−ＶＹＭＩＮとを比較し、ｘ軸方向の長さがｙ軸方向の長さよりも短ければスキャン方向をｘ軸方向とし、そうでなければスキャン方向をｙ軸方向とする。図３に示す例では、スキャン方向はｘ軸方向となる。そして、このようにして決定したスキャン方向を第１階層の描画範囲探索処理（ステップＳ１０）のスキャン方向として初期設定する。このようにスキャン方向の初期設定をする理由は次の通りである。
【００３８】
本実施形態のように第１階層〜第３階層の描画範囲探索処理を実行すると、第３階層の描画範囲探索処理における描画方向（描画範囲の開始位置から終了位置までの方向）は、第１階層の描画範囲探索処理のスキャン方向と同じになる。ここで、描画方向に沿ったピクセル列の長さは短くなった方がよい。そこで、本実施形態では、描画矩形範囲のｘ軸方向の辺とｙ軸方向の辺のうち短い方の辺を選択し、この辺の延在方向を第１階層の描画範囲探索処理Ｓ１０のスキャン方向とするのである。
【００３９】
［３−３．第１階層の描画範囲探索処理］
スキャン方向の初期設定が完了すると、ラスタライザ２は、第１階層の描画範囲探索処理（ステップＳ１０）を開始する。上述したように、第１階層の描画範囲探索処理（ステップＳ１０）では、最初に表示対象であるプリミティブを含む所定の大きさのブロックをスキャン方向のスキャンラインにより所定ピクセル幅のブロックに分割する（ステップＳ１１）。図４（ａ）に示す例では、ｘ軸方向のスキャンラインＳＬ＿ｉａ、ＳＬ＿ｉａ＋１、…により上記ブロックを６４ピクセル幅のブロックに分割している。
【００４０】
そして、ラスタライザ２は、プリミティブにおいてｙ座標が最小値ＶＹＭＩＮである頂点Ｖ０を含むブロックを探索開始ブロックＹ６４ＢＬＫＳＴＡＲＴとし、ｙ座標が最大値ＶＹＭＡＸである頂点Ｖ２を含むブロックを探索終了ブロックＹ６４ＢＬＫＥＮＤとする。
【００４１】
次にラスタライザ２は、探索開始ブロックＹ６４ＢＬＫＳＴＡＲＴから探索終了ブロックＹ６４ＢＬＫＥＮＤまでの各ブロックを順次選択し（ステップＳ１２）、ステップＳ１３〜Ｓ１７の処理を繰り返す。
【００４２】
まず、ラスタライザ２は、ステップＳ１２において選択したブロックについて、当該ブロックをｙ軸方向両側から挟むスキャンラインＳＬＴおよびＳＬＢのｙ座標を各々求め、これらのｙ座標を前掲式（１Ｘ）、（２Ｘ）、（３Ｘ）および（４Ｘ）の各関数に代入する（ステップＳ１３）。これによりスキャンラインＳＬＴおよびＳＬＢとプリミティブの各辺またはその延長線との交点のｘ座標が得られる。ここで、プリミティブが４本の辺を有する場合、このステップＳ１３では、スキャンラインＳＬＴおよびＳＬＢの各々について、４個の交点のｘ座標が得られる。
【００４３】
次にラスタライザ２は、ステップＳ１３において求めたスキャンラインＳＬＴおよびＳＬＢの各４個の交点の中から下位階層の描画範囲探索処理（この場合、第２階層の描画範囲探索処理Ｓ１０＿ｉ）の探索開始位置候補および探索終了位置候補を求める（ステップＳ１４）。
【００４４】
ここで、図４（ａ）を参照し、ステップＳ１４の処理の詳細について説明する。例えば探索開始ブロックＹ６４ＢＬＫＳＴＡＲＴを挟むスキャンラインＳＬＴ＝ＳＬ＿ｉａおよびＳＬＢ＝ＳＬ＿ｉａ＋１上の各交点がステップＳ１４の処理対象になっているものとする。
【００４５】
この場合、スキャンラインＳＬＴ＝ＳＬ＿ｉａ上には、プリミティブの辺Ｖ２−Ｖ３の延長線との交点（ｘ座標＝ｃｘ（２））と、辺Ｖ０−Ｖ１の延長線との交点（ｘ座標＝ｃｘ（０））と、辺Ｖ３−Ｖ０の延長線との交点（ｘ座標＝ｃｘ（３））と、辺Ｖ１−Ｖ２の延長線との交点（ｘ座標＝ｃｘ（１））とが左から順に並ぶ。そして、各交点のｘ座標の間には、ｃｘ（２）＜ｃｘ（０）＜ｃｘ（３）＜ｃｘ（１）の関係がある。そこで、ラスタライザ２は、これら４個のｘ座標から両端の２個を除き、残った２個のうち小さい方のｘ座標ｃｘ（０）を下位階層の描画範囲探索処理の探索開始位置候補ＳＬＴ＿ｍｉｎとし、大きい方のｘ座標ｃｘ（３）を下位階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ）の探索終了位置候補ＳＬＴ＿ｍａｘとする。
【００４６】
一方、スキャンラインＳＬＢ＝ＳＬ＿ｉａ＋１上には、プリミティブの辺Ｖ２−Ｖ３の延長線との交点（ｘ座標＝ｃｘ（２））と、辺Ｖ３−Ｖ０との交点（ｘ座標＝ｃｘ（３））と、辺Ｖ０−Ｖ１との交点（ｘ座標＝ｃｘ（０））と、辺Ｖ１−Ｖ２の延長線との交点（ｘ座標＝ｃｘ（１））とが左から順に並ぶ。そして、各交点のｘ座標の間には、ｃｘ（２）＜ｃｘ（３）＜ｃｘ（０）＜ｃｘ（１）の関係がある。そこで、ラスタライザ２は、これら４個のｘ座標から両端の２個を除き、残った２個のうち小さい方のｘ座標ｃｘ（３）を下位階層での探索開始位置候補ＳＬＢ＿ｍｉｎとし、大きい方のｘ座標ｃｘ（０）を下位階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ）の探索終了位置候補ＳＬＢ＿ｍａｘとする。
【００４７】
以上、ブロックＹ６４ＢＬＫＳＴＡＲＴを挟んだスキャンラインＳＬＴ＝ＳＬ＿ｉａおよびＳＬＢ＝ＳＬ＿ｉａ＋１を例に探索開始位置候補および探索終了位置候補の決定方法を説明したが、他のブロックを挟むスキャンラインＳＬＴおよびＳＬＢについても同様である。
【００４８】
次にラスタライザ２は、ステップＳ１４において求めた探索開始位置候補ＳＬＴ＿ｍｉｎおよびＳＬＢ＿ｍｉｎ、探索終了位置候補ＳＬＴ＿ｍａｘおよびＳＬＢ＿ｍａｘに基づいて、下位階層の描画範囲探索処理の探索開始位置と探索終了位置を決定する（ステップＳ１５）。
【００４９】
図５はこのステップＳ１５の処理の詳細を示すフローチャートである。まず、ステップＳ２１において、ラスタライザ２は、プリミティブを囲む辺がブロックを分割する分割線であるスキャンラインＳＬＴとスキャンラインＳＬＢに各々交差しているか否かを判断する。このような判断は、各辺とスキャンラインとの交点のｘ座標ｃｘ（０）〜ｃｘ（３）の大小関係に基づいて実行することが可能である。後述するステップＳ２２およびＳ２３についても同様である。
【００５０】
図４（ａ）に示す例では、例えばスキャンラインＳＬ＿ｉａ＋１がスキャンラインＳＬＴ、スキャンラインＳＬ＿ｉａ＋２がスキャンラインＳＬＢであるときに、このステップＳ２１の判断結果が「ＹＥＳ」となる。
【００５１】
この場合、ラスタライザ２は、スキャンラインＳＬＴ＝ＳＬ＿ｉａ＋１とスキャンラインＳＬＢ＝ＳＬ＿ｉａ＋２との間に挟まれたブロックについて行う下位階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ＋１）における探索開始位置と探索終了位置を次のようにして求める。
【００５２】
まず、ラスタライザ２は、スキャンラインＳＬＴ＝ＳＬ＿ｉａ＋１およびＳＬＢ＝ＳＬ＿ｉａ＋２間のブロックに含まれるプリミティブの頂点Ｖ１のスキャン方向の座標（この例ではｘ座標）を求める。そして、この頂点Ｖ１の座標と、スキャンラインＳＬＴ＝ＳＬ＿ｉａ＋１から求めた探索開始位置候補ＳＬＴ＿ｍｉｎ＝ｃｘ（３）と、スキャンラインＳＬＢ＝ＳＬ＿ｉａ＋２から求めた探索開始位置候補ＳＬＢ＿ｍｉｎ＝ｃｘ（３）と、プリミティブ内のブロック境界を比較し、それらのうち最も小さい座標を下位階層の描画範囲探索処理における探索開始位置とする。ここで、プリミティブ内のブロック境界とは、スキャン方向を横切る方向のブロック間の境界である。最上位階層の描画範囲探索処理Ｓ１０では、このプリミティブ内のブロック境界に相当するものはない。そこで、この例では、スキャンラインＳＬＢから求めた探索開始位置候補ＳＬＢ＿ｍｉｎ＝ｃｘ（３）が下位階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ＋１）における探索開始位置となる。
【００５３】
また、ラスタライザ２は、スキャンラインＳＬＴ＝ＳＬ＿ｉａ＋１およびＳＬＢ＝ＳＬ＿ｉａ＋２間のプリミティブの頂点Ｖ１のスキャン方向の座標（この例ではｘ座標）と、スキャンラインＳＬＴ＝ＳＬ＿ｉａ＋１から求めた探索終了位置候補ＳＬＴ＿ｍａｘ＝ｃｘ（０）と、スキャンラインＳＬＢ＝ＳＬ＿ｉａ＋２から求めた探索終了位置候補ＳＬＢ＿ｍａｘ＝ｃｘ（１）と、プリミティブ内のブロック境界とを比較し、それらのうち最も大きい座標を下位階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ＋１）における探索終了位置とする。この例では、頂点Ｖ１のｘ座標が下位階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ＋１）における探索終了位置となる。
【００５４】
図４（ａ）に示す例において、スキャンラインＳＬ＿ｉａ＋２がスキャンラインＳＬＴ、スキャンラインＳＬ＿ｉａ＋３がスキャンラインＳＬＢであるときにも、ステップＳ２１の判断結果が「ＹＥＳ」となる。
【００５５】
この場合、頂点Ｖ３のｘ座標が下位階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ＋２）における探索開始位置となる。また、スキャンラインＳＬＴ＝ＳＬ＿ｉａ＋２から求めた探索終了位置候補ＳＬＴ＿ｍａｘ＝ｃｘ（１）が下位階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ＋２）における探索終了位置となる。
【００５６】
ステップＳ２１の判断結果が「ＮＯ」である場合はステップＳ２２に進む。このステップＳ２２において、ラスタライザ２は、プリミティブを囲む辺がスキャンラインＳＬＴのみに交差しているか否かを判断する。
【００５７】
図４（ａ）に示す例では、スキャンラインＳＬ＿ｉａ＋３がスキャンラインＳＬＴ、スキャンラインＳＬ＿ｉａ＋４がスキャンラインＳＬＢであるときに、このステップＳ２２の判断結果が「ＹＥＳ」となる。
【００５８】
この場合、ラスタライザ２は、スキャンラインＳＬＴ＝ＳＬ＿ｉａ＋３およびＳＬＢ＝ＳＬ＿ｉａ＋４間のブロックＹ６４ＢＬＫＳＥＮＤに含まれるプリミティブの頂点Ｖ２のスキャン方向の座標（この例ではｘ座標）を求める。そして、この頂点Ｖ２の座標と、スキャンラインＳＬＴ＝ＳＬ＿ｉａ＋３から求めた探索開始位置候補ＳＬＴ＿ｍｉｎ＝ｃｘ（２）と、プリミティブ内のブロック境界とを比較し、それらのうち最も小さい座標を下位階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ＋３）における探索開始位置とする。この例では、スキャンラインＳＬＴ＝ＳＬ＿ｉａ＋３から求めた探索開始位置候補ＳＬＴ＿ｍｉｎ＝ｃｘ（２）が下位階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ＋３）における探索開始位置となる。
【００５９】
また、ラスタライザ２は、スキャンラインＳＬＴ＝ＳＬ＿ｉａ＋３およびスキャンラインＳＬＢ＝ＳＬ＿ｉａ＋４間のプリミティブの頂点Ｖ２のスキャン方向の座標（この例ではｘ座標）と、スキャンラインＳＬＴ＝ＳＬ＿ｉａ＋３から求めた探索終了位置候補ＳＬＴ＿ｍａｘ＝ｃｘ（１）と、プリミティブ内のブロック境界とを比較し、それらのうち最も大きい座標を下位階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ＋３）における探索終了位置とする。この例では、スキャンラインＳＬＴ＝ＳＬ＿ｉａ＋３から求めた探索終了位置候補ＳＬＴ＿ｍａｘ＝ｃｘ（１）が下位階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ＋３）における探索終了位置となる。
【００６０】
ステップＳ２２の判断結果が「ＮＯ」である場合はステップＳ２３に進む。このステップＳ２３において、ラスタライザ２は、プリミティブを囲む辺がスキャンラインＳＬＢのみに交差しているか否かを判断する。
【００６１】
図４（ａ）に示す例では、スキャンラインＳＬ＿ｉａがスキャンラインＳＬＴ、スキャンラインＳＬ＿ｉａ＋１がスキャンラインＳＬＢであるときに、このステップＳ２３の判断結果が「ＹＥＳ」となる。
【００６２】
この場合、ラスタライザ２は、スキャンラインＳＬＴ＝ＳＬ＿ｉａおよびスキャンラインＳＬＢ＝ＳＬ＿ｉａ＋１間のブロックＹ６４ＢＬＫＳＴＡＲＴに含まれるプリミティブの頂点Ｖ０のスキャン方向の座標（この例ではｘ座標）を求める。そして、この頂点Ｖ０の座標と、スキャンラインＳＬＢ＝ＳＬ＿ｉａ＋１から求めた探索開始位置候補ＳＬＢ＿ｍｉｎ＝ｃｘ（３）と、プリミティブ内のブロック境界とを比較し、それらのうち最も小さい座標を下位階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ）における探索開始位置とする。この例では、スキャンラインＳＬＢ＝ＳＬ＿ｉａ＋１から求めた探索開始位置候補ＳＬＢ＿ｍｉｎ＝ｃｘ（３）が下位階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ）における探索開始位置となる。
【００６３】
また、ラスタライザ２は、スキャンラインＳＬＴ＝ＳＬ＿ｉａおよびＳＬＢ＝ＳＬ＿ｉａ＋１間のプリミティブの頂点Ｖ０のスキャン方向の座標（この例ではｘ座標）と、スキャンラインＳＬＢ＝ＳＬ＿ｉａ＋１から求めた探索終了位置候補ＳＬＢ＿ｍａｘ＝ｃｘ（０）と、プリミティブ内のブロック境界とを比較し、それらのうち最も大きい座標を下位階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ）における探索終了位置とする。この例では、スキャンラインＳＬＢ＝ＳＬ＿ｉａ＋１から求めた探索終了位置候補ＳＬＢ＿ｍａｘ＝ｃｘ（０）が下位階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ）における探索終了位置となる。
【００６４】
ステップＳ２３の判断結果が「ＮＯ」になる場合として、スキャンラインＳＬＴおよびＳＬＢ間にプリミティブ全体が収まっている場合と、全てのブロック境界がプリミティブ内に収まっている場合がある（図示略）。前者の場合、ラスタライザ２は、スキャンラインＳＬＴおよびＳＬＢ間のブロックに含まれるプリミティブの各頂点を求める。そして、スキャン方向の各頂点の座標の最小値を下位階層の描画範囲探索処理Ｓ１０＿ｉにおける探索開始位置とし、スキャン方向の各頂点の座標の最大値を探索終了位置とする。また、後者の場合、ラスタライザ２は、プリミティブ内の各ブロック境界のスキャン方向の座標の最小値を下位階層の描画範囲探索処理Ｓ１０＿ｉにおける探索開始位置とし、最大値を探索終了位置とする。
以上が図２のステップＳ１５の処理内容の詳細である。
【００６５】
ステップＳ１５の処理が終了すると、ステップＳ１６に進む。このステップＳ１６において、ラスタライザ２は、上側スキャンラインＳＬＴおよび下側スキャンラインＳＬＢにより挟まれたブロックのサイズが描画可能なサイズか否かを判断する。第１階層の描画範囲探索処理Ｓ１０では、ブロックのサイズが大きく、描画可能なサイズではない。図４に示す例では４ピクセル幅のブロックのサイズを描画可能なサイズとしているからである。このため、ステップＳ１６の判断結果が「ＮＯ」となり、ラスタライザ２は、第２階層の描画範囲探索処理Ｓ１０＿ｉを実行する。
【００６６】
［３−４．第２階層の描画範囲探索処理］
第１階層でのスキャン方向がｘ軸方向であった場合、ラスタライザ２は、第２階層の描画範囲探索処理Ｓ１０＿ｉにおけるスキャン方向をｙ軸方向とする。一方、第１階層でのスキャン方向がｙ軸方向であった場合、ラスタライザ２は、第２階層の描画範囲探索処理Ｓ１０＿ｉにおけるスキャン方向をｘ軸方向とする。
【００６７】
また、第１階層の描画範囲探索処理Ｓ１０において、スキャンラインＳＬＴが例えば図４（ａ）のスキャンラインＳＬ＿ｉａ、スキャンラインＳＬＢがスキャンラインＳＬ＿ｉａ＋１であるときに、ステップＳ１６の判断結果が「ＮＯ」となった場合、ラスタライザ２は、スキャンラインＳＬＴ＝ＳＬ＿ｉａおよびＳＬＢ＝ＳＬ＿ｉａ＋１間のブロックにおいて、ステップＳ１５により決定された探索開始位置、探索終了位置を含む領域を処理対象とする第２階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ）を実行する。
【００６８】
ここで、図４（ｂ）を参照し、第２階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ）の処理内容の概略を説明する。この第２階層の描画範囲探索処理Ｓ１０＿ｉは、第１階層の描画範囲探索処理Ｓ１０と同様なステップＳ１１〜Ｓ１７の処理により構成されている。このため、第２階層の描画範囲探索処理Ｓ１０＿ｉでは、第１階層の描画範囲探索処理Ｓ１０を実行するために利用される演算手段と同じ演算手段が利用される。
【００６９】
第２階層のスキャン方向がｙ軸方向である場合、第２階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ）のステップＳ１１では、スキャンラインＳＬＴ＝ＳＬ＿ｉａおよびＳＬＢ＝ＳＬ＿ｉａ＋１間のブロックをｙ軸方向のスキャンラインにより所定ピクセル幅のブロックに分割する。図４（ｂ）に示す例では、ｙ軸方向のスキャンラインＳＬ＿ｊａ、ＳＬ＿ｊａ＋１、ＳＬ＿ｊａ＋２によりブロックＹ６４ＢＬＫＳＴＡＲＴを６４×６４ピクセルの２つのブロックに分割している。
【００７０】
そして、ラスタライザ２は、第１階層の描画範囲探索処理Ｓ１０のステップＳ１５において求めた探索開始位置ｃｘ（３）を含むブロックを探索開始ブロックＸ６４ＢＬＫＳＴＡＲＴとし、探索終了位置ｃｘ（０）を含むブロックを探索終了ブロックＸ６４ＢＬＫＥＮＤとする。
【００７１】
次にラスタライザ２は、スキャン方向に対して垂直な方向（この例ではｘ軸方向）に並んだ探索開始ブロックＸ６４ＢＬＫＳＴＡＲＴから探索終了ブロックＸ６４ＢＬＫＥＮＤまでの各ブロックを順次選択し（ステップＳ１２）、ステップＳ１３〜Ｓ１７の処理を繰り返す。このステップＳ１３〜Ｓ１７の処理内容は、第１階層の描画範囲探索処理Ｓ１０のステップＳ１３〜Ｓ１７の処理内容と基本的に同様である。
【００７２】
ただし、第２階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ）では、ステップＳ１３において前掲式（１Ｙ）、（２Ｙ）、（３Ｙ）および（４Ｙ）の各関数を利用し、ｙ軸方向のスキャンラインＳＬＴおよびＳＬＢとプリミティブの各辺またはその延長線との交点のｙ座標を算出する。そして、ステップＳ１４およびＳ１５では、ｙ軸方向の探索開始位置および探索終了位置を求める。
【００７３】
図４（ｂ）に示す例では、プリミティブの辺とスキャンラインＳＬ＿ｊａ＋１との交点のｙ座標ｃｙ（３）を探索開始位置、スキャンラインＳＬ＿ｊａ＋１上のブロック境界のｙ座標を探索終了位置とする探索範囲がステップＳ１５の処理により求められている。
【００７４】
第１階層の描画範囲探索処理Ｓ１０と同様、第２階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ）のステップＳ１６では、ステップＳ１１で分割されたブロックのサイズが描画可能なサイズであるか否かを判断する。本実施形態では、第２階層のブロックサイズは、６４×６４ピクセルであり、描画可能なブロックサイズではない。そこで、ラスタライザ２は、第２階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ）のステップＳ１６において、第３階層の描画範囲探索処理Ｓ１０＿ｉ＿ｊを実行する。
【００７５】
［３−５．第３階層の描画範囲探索処理］
第２階層でのスキャン方向がｙ軸方向であった場合、ラスタライザ２は、第３階層の描画範囲探索処理Ｓ１０＿ｉ＿ｊにおけるスキャン方向をｘ軸方向とする。一方、第２階層でのスキャン方向がｘ軸方向であった場合、ラスタライザ２は、第３階層の描画範囲探索処理Ｓ１０＿ｉ＿ｊにおけるスキャン方向をｙ軸方向とする。
【００７６】
また、スキャンラインＳＬＴが例えば図４（ｂ）のスキャンラインＳＬ＿ｊａ、スキャンラインＳＬＢがスキャンラインＳＬ＿ｊａ＋１であるときに、ステップＳ１６の判断結果が「ＮＯ」となった場合、ラスタライザ２は、スキャンラインＳＬＴ＝ＳＬ＿ｊａおよびＳＬＢ＝ＳＬ＿ｊａ＋１間のブロックにおいて、ステップＳ１５により決定された探索開始位置、探索終了位置を含む領域を処理対象とする第３階層の描画範囲探索処理Ｓ１０＿ｉ＿ｊ（ｉ＝ｉａ、ｊ＝ｊａ）を実行する。
【００７７】
ここで、図４（ｃ）を参照し、第３階層の描画範囲探索処理Ｓ１０＿ｉ＿ｊ（ｉ＝ｉａ、ｊ＝ｊａ）の処理内容の概略を説明する。この第３階層の描画範囲探索処理Ｓ１０＿ｉ＿ｊも、第１階層の描画範囲探索処理Ｓ１０と同様なステップＳ１１〜Ｓ１７の処理により構成されている。このため、第３階層の描画範囲探索処理Ｓ１０＿ｉ＿ｊにおいても、第１階層の描画範囲探索処理Ｓ１０を実行するために利用される演算手段と同じ演算手段が利用される。
【００７８】
第２階層のスキャン方向がｙ軸方向である場合、第３階層の描画範囲探索処理Ｓ１０＿ｉ＿ｊ（ｉ＝ｉａ、ｊ＝ｊａ）のステップＳ１１では、スキャンラインＳＬＴ＝ＳＬ＿ｊａおよびＳＬＢ＝ＳＬ＿ｊａ＋１間のブロックにおいて、探索により狭められた範囲内の領域をｘ軸方向のスキャンラインにより所定ピクセル幅のブロックに分割する。図４（ｃ）に示す例では、ｘ軸方向のスキャンラインＳＬ＿ｋａ、ＳＬ＿ｋａ＋１、…によりブロックＸ６４ＢＬＫＳＴＡＲＴを４×６４ピクセルのブロックに分割している。
【００７９】
そして、ラスタライザ２は、第２階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ）のステップＳ１５において求めた探索開始位置ｃｙ（３）を含むブロックを探索開始ブロックとし、探索終了位置（この例ではスキャンラインＳＬ＿ｉａ＋１上のブロック境界）を含むブロックを探索終了ブロックとする。
【００８０】
次にラスタライザ２は、スキャン方向に対して垂直な方向（この例ではｙ軸方向）に並んだ探索開始ブロックから探索終了ブロックまでの各ブロックを順次選択し（ステップＳ１２）、ステップＳ１３〜Ｓ１７の処理を繰り返す。このステップＳ１３〜Ｓ１７の処理内容は、第１階層の描画範囲探索処理Ｓ１０のステップＳ１３〜Ｓ１７の処理内容と基本的に同様である。そして、ステップＳ１４およびＳ１５では、ｘ軸方向の探索開始位置および探索終了位置を求める。
【００８１】
第１階層の描画範囲探索処理Ｓ１０と同様、第３階層の描画範囲探索処理Ｓ１０＿ｉ＿ｊ（ｉ＝ｉａ、ｊ＝ｊａ）のステップＳ１６では、ステップＳ１１で分割されたブロックのサイズが描画可能なサイズであるか否かを判断する。本実施形態において、第３階層のブロックサイズは、４×６４ピクセルであり、描画可能なブロックサイズである。
【００８２】
このため、第３階層の描画範囲探索処理Ｓ１０＿ｉ＿ｊ（ｉ＝ｉａ、ｊ＝ｊａ）のステップＳ１６の判断結果は「ＹＥＳ」となり、ラスタライザ２は、ステップＳ１７の描画処理を実行する。
【００８３】
この描画処理では、ステップＳ１５において求めた探索開始位置から探索終了位置までの範囲を描画範囲とし、この描画範囲内の各ピクセルの属性値をプリミティブの頂点Ｖ０、Ｖ１、Ｖ２、Ｖ３の属性値を用いた補間演算により算出する。そして、算出した各ピクセルの属性値をピクセル処理部３に出力する。
【００８４】
図４（ｄ）は、図４（ｃ）のスキャンラインＳＬ＿ｋａおよびＳＬ＿ｋａ＋１間の４×６４ピクセルのブロックの内容を例示している。この例では、第３階層の描画範囲探索処理Ｓ１０＿ｉ＿ｊ（ｉ＝ｉａ、ｊ＝ｊａ）のステップＳ１５の処理の結果、４×６４ピクセルのブロックの中の左から１５番目の４×４ピクセルのブロック内の位置が探索開始位置となり、１６番目の４×４ピクセルのブロックの右側のブロック境界が探索終了位置となる。そこで、ラスタライザ２は、ステップＳ１７において、この１５番目〜１６番目までの４×４ピクセルのブロックについて、描画処理を実行する。
【００８５】
描画処理（ステップＳ１７）が終了すると、ステップＳ１２に戻り、スキャンラインＳＬ＿ｋａ＋１およびＳＬ＿ｋａ＋２間の４×６４ピクセルのブロックについて同様な処理を実行する。
【００８６】
［３−６．下位階層から上位階層への復帰］
第３階層の描画範囲探索処理において、探索開始ブロックから探索終了ブロックまでの各ブロックについて描画処理（ステップＳ１７）を実行すると、第３階層の描画範囲探索処理から第２階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ）に戻る。
【００８７】
第２階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ）では、ｊ＝ｊａ＋１として（すなわち、ＳＬＴ＝ＳＬ＿ｊａ＋１、ＳＬＢ＝ＳＬ＿ｊａ＋２として）、探索開始ブロックから探索終了ブロックまでの各ブロックについてステップＳ１２〜Ｓ１６の処理を実行する。そして、ステップＳ１６において第３階層の描画探索処理Ｓ１０＿ｉ＿ｊ（ｉ＝ｉａ、ｊ＝ｊａ＋１）を実行し、ブロックＸ６４ＢＬＫＥＮＤのプリミティブ内の描画処理を実行する（ステップＳ１７）。
【００８８】
このようにして第２階層の描画範囲探索処理Ｓ１０＿ｉ（ｉ＝ｉａ）が終了すると、第１階層の描画範囲探索処理Ｓ１０に戻る。そして、第１階層の描画範囲探索処理Ｓ１０では、ｉ＝ｉａ＋１として（すなわち、ＳＬＴ＝ＳＬ＿ｉａ＋１、ＳＬＢ＝ＳＬ＿ｉａ＋２として）、探索開始ブロックから探索終了ブロックまでの各ブロックについてステップＳ１２〜Ｓ１６の処理を実行する。
以下、同様である。
【００８９】
ラスタライザ２は、以上のようにして、ブロックを分割しつつ、プリミティブが占めるブロックを探索し、適切なサイズに分割されたブロック内のプリミティブのピクセル列の描画を行う。
【００９０】
［３−７．ジグザグスキャン］
本実施形態においてラスタライザ２は、第２階層の描画範囲探索処理Ｓ１０＿ｉを実行する際、処理対象であるブロックを図６および図７に例示するようにジグザグにスキャンする。
【００９１】
図６に示す例では、三角形のプリミティブがｙ軸方向に長いため、描画矩形範囲の短辺方向であるｘ軸方向をスキャン方向として、第１階層の描画範囲探索処理Ｓ１０を実行している。そして、１回目の第２階層の描画範囲探索処理Ｓ１０＿ｉでは、最上行の２個のブロックを左から右へ処理した後、第２行の第１階層の描画範囲探索処理Ｓ１０を経て、処理対象を第２行に切り換えて、２回目の第２階層の描画範囲探索処理Ｓ１０＿ｉを実行するとき、処理対象である２個のブロックを右から左へ順に処理している。そして、図６に示す例では、１回目の第２階層の描画範囲探索処理Ｓ１０＿ｉを実行した後、第２行の第１階層の描画範囲探索処理Ｓ１０を経て、２回目の第２階層の描画範囲探索処理Ｓ１０＿ｉを実行するとき、１回目の最後に処理したブロックとｙ軸方向に隣接したブロックを２回目の第２階層の描画範囲探索処理Ｓ１０＿ｉにおいて最初に処理する。第２行から第３行への切り換わり、第３行から第４行への切り換わりについても同様である。
【００９２】
図７に示す例では、三角形のプリミティブがｘ軸方向に長いため、描画矩形範囲の短辺方向であるｙ軸方向をスキャン方向として、第１階層の描画範囲探索処理Ｓ１０を実行している。そして、１回目の第２階層の描画範囲探索処理Ｓ１０＿ｉでは、最左列の２個のブロックを上から下へ処理した後、第２列の第１階層の描画範囲探索処理Ｓ１０を経て、処理対象を第２列に切り換えて、２回目の第２階層の描画範囲探索処理Ｓ１０＿ｉを実行するとき、処理対象である２個のブロックを下から上へ順に処理している。そして、図７に示す例では、１回目の第２階層の描画範囲探索処理Ｓ１０＿ｉを実行した後、第２列の第１階層の描画範囲探索処理Ｓ１０を経て、２回目の第２階層の描画範囲探索処理Ｓ１０＿ｉを実行するとき、１回目の最後に処理したブロックとｘ軸方向に隣接したブロックを２回目の第２階層の描画範囲探索処理Ｓ１０＿ｉにおいて最初に処理する。第２列から第３列への切り換わり、第３列から第４列への切り換わりについても同様である。
【００９３】
このように第２階層の描画範囲探索処理Ｓ１０＿ｉを繰り返すときに処理対象であるブロックのジグザグスキャンを行うと、常に描画対象としたブロックに隣接するブロックを新たな描画対象とすることになる。従って、フレームメモリ等のアクセス効率を低下させることなく描画処理を実行することができる。
【００９４】
［４．本実施形態の効果］
図８および図９は、三角形のプリミティブを処理対象とした描画範囲探索処理の実行例を示すものである。これらの図において、Ｅ１は第１階層の描画範囲探索処理Ｓ１０のステップＳ１１〜Ｓ１６の処理対象となった範囲、Ｅ２は第２階層の描画範囲探索処理Ｓ１０＿ｉにおいて求められた描画探索範囲、Ｅ３は第３階層の描画範囲探索処理において求められた描画探索範囲（すなわち、描画範囲）を示している。このように本実施形態によれば、描画探索範囲の分割および探索を階層的に繰り返して、プリミティブが占める描画範囲を求めるので、フレームメモリのアクセス効率を低下させることなく、少ない処理量で描画処理を実行することができる。また、本実施形態によれば、階層的な描画範囲探索処理を共通の演算手段により実行することができるので、画像処理装置の小規模化を図ることができる。
【００９５】
＜第２実施形態＞
この発明の第２実施形態による画像処理装置は、アンチエイリアスフィルタ処理に適した描画処理を可能にするものである。まず、図１０〜図１１を参照し、本実施形態におけるラスタライザによって実行されるアンチエイリアスフィルタ処理について説明する。図１０には、描画対象である直線が示されている。本実施形態では、この直線と重複した領域を占める各ピクセルからなる領域を描画範囲とし、この描画範囲の外側にピクセル１個分だけはみ出した範囲を拡張された描画範囲とする。そして、本実施形態では、この拡張された描画範囲の各ピクセルにより描画対象である直線を表現する。
【００９６】
図１１には３×３ピクセルの領域を描画対象の直線が横切っている様子が示されている。各ピクセルには、４個のサブピクセルが設定されている。図１１において、ｘマークは、直線の中に含まれていないサブピクセルであり、丸囲みされたｘマークは直線の中に含まれているサブピクセルである。
【００９７】
図１１では、３×３ピクセルの中央のピクセルがアンチエイリアスフィルタ処理の対象ピクセルとなっている。そして、アンチエイリアスフィルタ処理を実行するため、対象ピクセルを囲むカバレッジ領域Ｒ０と、このカバレッジ領域Ｒ０を内包するカバレッジ領域Ｒ１と、このカバレッジ領域Ｒ１を内包するカバレッジ領域Ｒ２と、このカバレッジ領域Ｒ２を内包するカバレッジ領域Ｒ３と、このカバレッジ領域Ｒ３を内包するカバレッジ領域Ｒ４とが設定されている。
【００９８】
そして、アンチエイリアスフィルタ処理では、各カバレッジ領域Ｒ０〜Ｒ４において、当該カバレッジ領域に含まれているサブピクセルの個数と、それらのサブピクセルのうち直線の中に含まれているサブピクセルの個数（すなわち、描画対象サブピクセル個数）との比が求められ、それらの比に基づいて、対象ピクセルのカラーデータに乗算する重み係数Ｃｏｖｅｒａｇｅが決定される。より具体的には、次式に従って重み係数Ｃｏｖｅｒａｇｅが算出される。
Ｃｏｖｅｒａｇｅ
＝  （Ｒ０内の描画対象サブピクセル個数／Ｒ０内のサブピクセル個数）／５
＋（Ｒ１内の描画対象サブピクセル個数／Ｒ１内のサブピクセル個数）／５
＋（Ｒ２内の描画対象サブピクセル個数／Ｒ２内のサブピクセル個数）／５
＋（Ｒ３内の描画対象サブピクセル個数／Ｒ３内のサブピクセル個数）／５
＋（Ｒ４内の描画対象サブピクセル個数／Ｒ４内のサブピクセル個数）／５
……（５）
【００９９】
以上の処理を全てのピクセルについて実行し、それにより得られる重み係数Ｃｏｖｅｒａｇｅを当該ピクセルのカラーデータに乗算する。これにより描画対象である直線の輪郭のギザギザを緩和し、直線の画像を滑らかにすることができる。以上、直線を例に説明したが、プリミティブに対してもアンチエイリアスフィルタ処理を施すことにより、プリミテティブの集合により近似されたオブジェクトの輪郭線をギザギザの緩和された滑らかな線にすることができる。なお、このアンチエイリアスフィルタ処理は非特許文献１に開示されている。
【０１００】
本実施形態は、以上説明したアンチエイリアスフィルタ処理の実行に適した描画処理を提供するものである。本実施形態におけるアンチエイリアスフィルタ処理では、描画対象のピクセルと、この描画対象ピクセルを囲む８個のピクセルについて、当該ピクセル内のサブピクセルが描画対象範囲内に含まれるか否かの内外判定を行う。そこで、本実施形態では、アンチエイリアスフィルタ処理において内外判定に必要なピクセルを取得するために、描画対象であるプリミティブが占める領域よりも、階層的な描画範囲探索処理により求められる描画範囲を広くし、後者の描画範囲に前者の領域に対する余裕を設ける。
【０１０１】
図１２は本実施形態における描画範囲探索処理の実行例を示す図である。図１２に示す例では、描画対象のプリミティブにおいて、ｘ軸方向の探索開始位置となる頂点のｘ座標ＩＶＸＭＩＮをＩＶＸＭＩＮ−１とし、ｘ軸方向の探索終了位置となる頂点のｘ座標ＩＶＸＭＡＸをＩＶＸＭＡＸ＋１とし、この２頂点のｘ軸方向外側への移動に合わせて、プリミティブの各辺を平行移動させている。また、スキャンラインＳＬＴおよびＳＬＢを上下方向外側に１ピクセルだけシフトしている。また、プリミティブの上下の２頂点を各々上方および下方に１ピクセルずつ移動させている。このような操作により、本来のプリミティブの辺の約１ピクセルだけ外側に辺のある多角形が得られる。本実施形態では、このようにして得られた多角形内のピクセルを描画対象とし、その描画処理においてアンチエイリアスフィルタ処理を実行する。このように本実施形態によれば、プリミティブの外周部を通常より拡張し、アンチエイリアスフィルタ処理に必要なピクセルを描画対象とすることができる。
【０１０２】
＜他の実施形態＞
以上、この発明の各種の実施形態について説明したが、この発明には他にも実施形態が考えられる。例えば次の通りである。
【０１０３】
（１）各階層の描画範囲探索処理において、処理対象のブロックを分割する際のスキャンラインＳＬＴおよびＳＬＢ間のピクセル幅を描画対象のプリミティブのサイズ等に応じて可変制御するようにしてもよい。
【０１０４】
（２）上記第１実施形態の画像処理装置１００を例えばパーソナルコンピュータに搭載する際、ジオメトリ処理部１が実行する演算処理の一部または全部をパーソナルコンピュータのＣＰＵに実行させてもよい。
【０１０５】
（３）上記各実施形態において、第３階層の描画範囲探索処理Ｓ１０＿ｉ＿ｊのステップＳ１７において実行する描画処理は、処理量が多く、時間の掛かる処理である。そこで、第１〜第３階層の描画範囲探索処理（第３階層では描画処理（ステップＳ１７）を除いた部分）と、第３階層の描画処理（ステップＳ１７）とを例えば異なるハードウェアにより並列実行するようにしてもよい。この態様によれば、描画処理の効率をさらに高めることができる。
【０１０６】
（４）上記各実施形態では、階層数を３階層とし、第１階層〜第３階層の描画範囲探索処理を実行したが、階層数を４階層、５階層という具合に３階層より多くしてもよい。また、上記各実施形態では、第１階層においてブロックを６４ピクセル幅のブロックに分割し、第２階層では第１階層において分割されたブロックを６４プクセル幅のブロックに分割し、第３階層では第２階層において分割されたブロックを４プクセル幅のブロックに分割した。しかし、これは１つの分割例であり、各階層における分割後のブロックのサイズは、ディスプレイのピクセル数やフレームメモリのメモリアクセス単位を考慮して適切に定めればよい。
【符号の説明】
【０１０７】
１……ジオメトリ処理部、２……ラスタライザ、３……ピクセル処理部、４……表示制御部、５１……メモリ部、５２……メモリコントローラ、５３……キャッシュメモリ、１００……画像処理装置、２００……ディスプレイ。
【図１】
2015210730.tif 000003
【図２】
2015210730.tif 000004
【図３】
2015210730.tif 000005
【図４】
2015210730.tif 000006
【図５】
2015210730.tif 000007
【図６】
2015210730.tif 000008
【図７】
2015210730.tif 000009
【図８】
2015210730.tif 000010
【図９】
2015210730.tif 000011
【図１０】
2015210730.tif 000012
【図１１】
2015210730.tif 000013
【図１２】
2015210730.tif 000014
【図１３】
2015210730.tif 000015