(57)【要約】【課題】  スタンプの内外判定を高速に行うことが可能な画像処理装置を提供する。【解決手段】  画像処理装置４５は、DDAセットアップ部１と、コンテキスト部２と、直線方程式計算部３と、XY計算部４と、エッジ判定部５と、DDA制御部６と、マスク生成部７とを有する。複数のスレッドを交互に切り替えながらスタンプの処理を行い、スタンプがポリゴンの外部にあると判定されると、次に処理すべきスタンプを瞬時に切り替えるようにしたため、ポリゴンの外部にあるスタンプを無駄に処理するおそれがなくなり、効率的なラスタライズ処理が可能になる。【選択図】  図３
2005301902.tif 000002
【特許請求の範囲】
【請求項１】
複数の直線方程式のそれぞれに対応して複数個ずつ設けられ、隣接する複数画素からなるスタンプに関連する座標を対応する直線方程式に入力して得られる値を格納可能なスタンプ情報格納手段と、
複数の直線方程式のそれぞれに対応して設けられ、複数個の前記スタンプ情報格納手段に格納された情報の一つを交互に選択する情報選択手段と、
複数の直線方程式のそれぞれに対応して設けられ、前記情報選択手段にて選択された情報を用いて現在のスタンプに関連する座標を対応する前記直線方程式に入力して計算を行い、該計算結果を対応する前記スタンプ情報格納手段に格納する直線方程式演算手段と、
複数の直線方程式のそれぞれに対応する前記直線方程式演算手段の演算結果に基づいて、現在のスタンプに隣接する次のスタンプが複数の直線方程式で囲まれる領域の内側にあるか否かを判定する内外判定手段と、
現在のスタンプ内の代表画素の座標を計算する座標計算手段と、を備えることを特徴とする画像処理装置。
【請求項２】
前記スタンプ情報格納手段は、
現在のスタンプを第１方向に１スタンプ分移動させた場合の直線方程式の値を格納する第１の値格納手段と、
現在のスタンプを第２方向に１スタンプ分移動させた場合の直線方程式の値を格納する第２の値格納手段と、
前記内外判定手段の判定結果に基づいて、前記第１および第２の値格納手段のいずれかに格納された値を選択して出力する値選択手段と、を有することを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記スタンプ情報格納手段による格納処理と、前記直線方程式演算手段による演算処理および前記内外判定手段による判定処理とは並行して行われることを特徴とする請求項１または２に記載の画像処理装置。
【請求項４】
前記直線方程式のＸ方向の傾きおよびＹ方向の傾きを格納する傾き格納手段を備え、
前記情報選択手段は、前記内外判定手段の判定結果に基づいて、前記傾き格納手段に格納されたＸ方向またはＹ方向の傾きを選択し、
前記直線方程式演算手段は、前記情報選択手段にて選択されたＸ方向またはＹ方向の傾きと、前記情報選択手段にて選択されたいずれかの前記スタンプ情報格納手段に格納された情報と、を加算して、現在のスタンプに関する直線方程式の演算を行うことを特徴とする請求項１乃至３のいずれかに記載の画像処理装置。
【請求項５】
前記複数の直線方程式のそれぞれに対応する前記直線方程式演算手段の演算結果に基づいて、現在のスタンプ内のすべての画素の座標値およびパラメータを計算する画素情報計算手段を備えることを特徴とする請求項１乃至４のいずれかに記載の画像処理装置。
【請求項６】
前記パラメータは、RGBの階調値と、透過率情報と、奥行き情報と、テクスチャー座標と、法線ベクトルとを含むことを特徴とする請求項５に記載の画像処理装置。
【請求項７】
第１方向に隣接する１列分のスタンプに関する直線方程式の値と、該１列に第２方向に隣接する１列分のスタンプに関する直線方程式の値とは、それぞれ別個の前記スタンプ情報格納手段に格納されることを特徴とする請求項１乃至６のいずれかに記載の画像処理装置。
【請求項８】
複数のポリゴンに含まれるスタンプに関する直線方程式の値は、それぞれ別個の前記スタンプ情報格納手段に格納されることを特徴とする請求項１乃至７のいずれかに記載の画像処理装置。
【請求項９】
ポリゴンの頂点データを供給する頂点データ供給装置と、
前記頂点データに基づいて、画素ごとの座標値およびパラメータを生成する画像処理装置と、
前記座標値およびパラメータを格納する記憶装置と、を備えた画像処理システムにおいて、
前記画像処理装置は、
複数の直線方程式のそれぞれに対応して複数個ずつ設けられ、隣接する複数画素からなるスタンプに関連する座標を対応する直線方程式に入力して得られる値を格納可能なスタンプ情報格納手段と、
複数の直線方程式のそれぞれに対応して設けられ、複数個の前記スタンプ情報格納手段に格納された情報の一つを交互に選択する情報選択手段と、
複数の直線方程式のそれぞれに対応して設けられ、前記情報選択手段にて選択された情報を用いて現在のスタンプに関連する座標を対応する前記直線方程式に入力して計算を行い、該計算結果を対応する前記スタンプ情報格納手段に格納する直線方程式演算手段と、
複数の直線方程式のそれぞれに対応する前記直線方程式演算手段の演算結果に基づいて、現在のスタンプに隣接する次のスタンプが複数の直線方程式で囲まれる領域の内側にあるか否かを判定する内外判定手段と、
現在のスタンプ内の代表画素の座標を計算する座標計算手段と、を備えることを特徴とする画像処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数画素からなるスタンプが直線方程式の内側にあるか外側にあるかを判定する画像処理装置に関する。
【背景技術】
【０００２】
グラフィックプロセッサでは、頂点データからピクセルデータに変換するラスタライズ処理が行われる。従来のラスタライズ処理では、DDA（Digital Differencial Analyser）と呼ばれる手法で線形補間をしながらポリゴンの内外判定を行ったり、パラメータを生成する（特許文献１、非特許文献１，２参照）。このため、エッジ方程式の値を逐次加算しながら、加算結果の符号判定を行って、スタンプの移動方向を決定する。スループットを達成するためには、この一連の処理を１サイクルで行う必要があり、これが高クロック動作を阻害している。
【０００３】
ここで、ラスタライズとは、メインプロセッサから与えられたポリゴンの頂点座標に基づいて、ポリゴンの内部をスキャンしながら、内部の各ピクセル位置での座標やパラメータを生成する操作である。
【０００４】
上述したDDAでは、３つのステージＡ，Ｂ，Ｃに分けてスタンプの内外判定を行う。Ａステージでは、現在のスタンプ位置での直線方程式の値と、次の行（スタンプからＹ方向にスタンプ高さ分だけ移動した位置）の直線方程式の値とを格納する。Ｂステージでは、現在値に傾きを加算して次のスタンプの直線方程式の値を計算する。Ｃステージでは、直線方程式の符号からスタンプがポリゴンの内部にあるか外部にあるかを判定する。
【０００５】
１サイクルごとにスタンプを１つ移動するためには、ＡステージからＣステージまでの動作を１サイクルで行う必要がある。すなわち、DDAでは、Ｃステージの内外判定の結果によって、次にスタンプが動く方向がＸ方向なのかＹ方向なのかを判定してからＡステージのMUXを駆動するために、ここがLSI設計上のクリティカルパスとなり、高周波動作のボトルネックとなっている。
【０００６】
逆に、高周波数で動作させるために、ステージＡ，Ｂ，Ｃをそれぞれ１サイクル（合計で３サイクル）で動作させるようにパイプライン化させると、Ｃステージを実行した後に次のスタンプのＡステージを動作させる必要があるため、各サイクルごとにスタンプを移動させることができなくなり、２サイクルに１スタンプしか処理できなくなる。これは、DDAのスループットが１から０．５に低下してしまうことになり、演算処理性能が低下する。
【０００７】
あるいは、スループットを確保するために、エッジ判定の前にスタンプを移動させる方法も考えられる。この場合、エッジ判定の結果がＸ方向の移動であると予め予測してスタンプを移動させるため、スタンプがポリゴンのＸ方向の外側に来たときに、２スタンプほどの無駄な処理が生じる。ポリゴンが比較的大きい場合には所望の性能が出るが、ポリゴンが小さくてすぐにＹ方向に折り返す必要がある場合は、Ｘ方向でのスタンプの無駄な処理が多くなり、性能が低下する。
【特許文献１】United States Patent No. US6504542
【非特許文献１】"Incremental and Hierarchical Hilbert Order Edge Equation Polygon Rasterization" (Michael D. McCool, Chris Wales, Kevin Moule / SIGGRAPH/EUROGRAPHICS workshop on Graphics hardware 2001 Proceedings)
【非特許文献２】"Tiled polygon traversal using half-plane edge functions" (Joel McCormack and Robert McNamara / SIGGRAPH/EUROGRAPHICS workshop on Graphics hardware 2000 Proceedings)
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明の目的は、スタンプの内外判定を高速に行うことが可能な画像処理装置を提供することにある。
【課題を解決するための手段】
【０００９】
本発明の一態様に係る画像処理装置は、複数の直線方程式のそれぞれに対応して複数個ずつ設けられ、隣接する複数画素からなるスタンプに関連する座標を対応する直線方程式に入力して得られる値を格納可能なスタンプ情報格納手段と、複数の直線方程式のそれぞれに対応して設けられ、複数個の前記スタンプ情報格納手段に格納された情報の一つを交互に選択する情報選択手段と、複数の直線方程式のそれぞれに対応して設けられ、前記情報選択手段にて選択された情報を用いて現在のスタンプに関連する座標を対応する前記直線方程式に入力して計算を行い、該計算結果を対応する前記スタンプ情報格納手段に格納する直線方程式演算手段と、複数の直線方程式のそれぞれに対応する前記直線方程式演算手段の演算結果に基づいて、現在のスタンプに隣接する次のスタンプが複数の直線方程式で囲まれる領域の内側にあるか否かを判定する内外判定手段と、現在のスタンプ内の代表画素の座標を計算する座標計算手段と、を備える。
【発明の効果】
【００１０】
本発明によれば、直線方程式の値を複数個のスタンプ情報格納手段に交互に格納して、次のスタンプの直線方程式の値を計算するため、スタンプの内外判定を高速に行うことができる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明の一実施形態について、図面を参照しながら説明する。本実施形態では、隣接する２×２ピクセルからなるスタンプを単位として、与えられたポリゴンをラスタスキャンし、各ピクセルの座標やパラメータを生成する。ここで、パラメータとは、各ピクセルにおけるＲＧＢの階調値、透過率、奥行き、テクスチャ座標および法線ベクトルなどである。このような処理を以下ではラスタライズと呼ぶ。
【００１２】
以下では、簡略化のために、ポリゴンが三角形であるとする。このとき、各ポリゴンは、図１に示すように、３つの直線方程式Ia，Ib，Icで表される。各直線方程式は以下の（１）〜（３）式で表される。
【００１３】
Ｉa：ａ０・ｘ＋ｂ０・ｙ＋ｃ０    …（１）
Ｉb：ａ１・ｘ＋ｂ１・ｙ＋ｃ１    …（２）
Ｉc：ａ２・ｘ＋ｂ２・ｙ＋ｃ２    …（３）
現在のスタンプの位置は、図２に示すように、スタンプ内の左下のピクセル（代表点）の座標で表される。ラスタライズ処理では、スタンプを順次移動させて、各スタンプがポリゴンの内部に存在するか否かを判定する。具体的には、図２に示すように、現在のスタンプの脇に位置する先行点の座標を（１）〜（３）式の直線方程式に与えて得られた値により、現在のスタンプがポリゴンの内部に存在するか否かを判定する。このような内外判定処理を、スタンプを上下左右に１つずつ動かしながら行うが、そのたびごとに直線方程式を計算するのは処理負担が大きい。
【００１４】
そこで、本実施形態では、現在のスタンプにおける直線方程式の値を記憶しておき、その値に直線方程式の傾き（a0, a1, a2）、（b0, b1, b2）を加算することで、隣接する次のスタンプの直線方程式の値を求める。
【００１５】
以下、本発明の具体的な実施形態について説明する。
【００１６】
（第１の実施形態）
図３は本発明の第１の実施形態に係る画像処理装置の概略構成を示すブロック図である。この画像処理装置は、例えばグラフィックプロセッサに内蔵され、頂点データからピクセルデータに変換するラスタライズ処理を行う。
【００１７】
図４は図３の画像処理装置を内蔵するグラフィックプロセッサを備えた画像処理システムの概略構成の一例を示すブロック図である。図４の画像処理システムは、ホストプロセッサ２１と、グラフィックプロセッサ２２と、メインメモリ２３と、I/Oプロセッサ２４とを備えている。
【００１８】
ホストプロセッサ２１は、メインプロセッサ３１と、複数の信号処理部（DSP：Digital Signal Processor）３２と、外部との入出力を司るI/O部３３，３４，３５とを有する。I/O部３３はメインメモリ２３との入出力を司り、I/O部３４はグラフィックプロセッサ２２との入出力を司り、I/O部３５はI/Oプロセッサ２４との入出力を司る。
【００１９】
グラフィックプロセッサ２２は、コントローラ４１と、ホストプロセッサ２１とデータのやり取りを行うI/O部４２と、PCIなどの各種汎用バス、ビデオおよびオーディオ等の入出力を司るI/O部４３と、図４に示した画像処理ユニット４４とを有する。
【００２０】
I/Oプロセッサ２４は、汎用バスの他、HDDやDVDドライブ等の周辺機器、およびネットワークと接続する制御を行う。
【００２１】
画像処理ユニット４４の画像処理は、ホストプロセッサ２１の処理に並行して行われるため、ホストプロセッサ２１自身で３次元画像処理を行わなくて済み、ホストプロセッサ２１の処理負担が軽減されるとともに、３次元画像処理を高速に行うことができる。
【００２２】
画像処理ユニット４４は、図３の画像処理装置４５と、複数の演算ユニット４６と、メモリ４７とを備えている。画像処理装置４５、演算ユニット４６およびメモリ４７は、ローカルネットワーク４８に接続されている。
【００２３】
画像処理装置４５は、隣接する２×２ピクセルからなるスタンプごとに、スタンプ内の各ピクセルの座標やバラメータを計算し、その計算結果を対応する演算ユニット４６に供給する。複数の演算ユニット４６は、互いに並行して処理を行うことができる。すなわち、各演算ユニット４６は、それぞれ異なるスタンプの画像処理を行う。演算ユニット４６での演算結果はメモリ４７に格納される。
【００２４】
図４に示す複数の演算ユニット４６は、それぞれ並行して画像処理を行えるため、画像処理を高速に行うことができる。
【００２５】
図３に戻って、画像処理装置４５は、DDAセットアップ部１と、コンテキスト部２と、直線方程式計算部３と、XY計算部４と、エッジ判定部５と、DDA制御部６と、マスク生成部７とを有する。DDA制御部６は、ラスタライズの開始点の(X,Y)座標と、その座標における直線方程式の値（初期値Ia, Ib, Ic)と、直線方程式の傾き（dIa/dx, dIa/dy, dIb/dx, dIb/dy, dIc/dx, dIc/dy）とを計算する。初期値は、コンテキスト部２のACCレジスタとSaveレジスタに格納される。直線方程式の傾きは、コンテキスト部２のdIdxレジスタとdIdyレジスタに格納される。
【００２６】
コンテキスト部２、直線方程式計算部３およびDDA制御部６は、ポリゴンを構成する３つの直線方程式のそれぞれに対応して設けられる。
【００２７】
図５はコンテキスト部２とDDA制御部６の内部構成の一例を示すブロック図である。図示のように、各コンテキスト部２は、直線方程式の計算結果を格納可能な複数のスレッドth１〜thＮと、直線方程式の傾きを格納する傾きコンテキスト部１１と、スタンプの代表点の(x,y)座標を格納するXYコンテキスト部１２とを有する。
【００２８】
複数のスレッドのそれぞれは、現在のスタンプの先行点における直線方程式の値を格納するマルチプレクサおよびACCレジスタ１３と、スタンプをＹ方向に１スタンプ分移動させたスタンプの先行点における直線方程式の値を格納するマルチプレクサおよびSaveレジスタ１４と、ACCレジスタ１３またはSaveレジスタ１４に格納された値を選択するマルチプレクサ１５とを有する。
【００２９】
傾きコンテキスト部１１は、直線方程式のＸ方向の傾きdI/dxを格納するdIdxレジスタ１６ａと、直線方程式のＹ方向の傾きdI/dyを格納するdI/dyレジスタ１６ｂと、dIdxレジスタ１６ａまたはdI/dyレジスタ１６ｂの値を選択するマルチプレクサ１７とを有する。
【００３０】
直線方程式計算部３内の加算器１８は、対応するコンテキスト部２内のいずれかのスレッドから出力された値と傾きコンテキスト部１１から出力された値とを加算して、次のスタンプにおける先行点の直線方程式の値を計算する。
【００３１】
エッジ判定部５内の内外判定器１９は、３つの直線方程式計算部３にて計算された値のいずれもがポリゴンの内部にあることを示している場合に、スタンプはポリゴンの内部に存在すると判定する。直線方程式の値が一つでもポリゴンの外部にあることを示す場合は、スタンプはポリゴンの外部に存在すると判定する。
【００３２】
DDA制御部６は、スレッドth１〜thＮの出力のうちいずれか一つを選択するマルチプレクサ５１と、XYコンテキスト部１２の出力から対応する座標(x,y)を選択するマルチプレクサ５２と、これらマルチプレクサでの選択を制御するスレッド制御ユニット５３とを有する。
【００３３】
マスク生成部７は、３つの直線方程式計算部３で計算された値に基づいて、現在のスタンプ内の各ピクセルの座標(x,y)を計算する。
【００３４】
XYコンテキスト部１２は、最初は開始点のスタンプにおける代表点の座標(x,y)を格納し、その後は、現在のスタンプにおける代表点の座標(x,y)を格納する。具体的には、スレッドth１〜thＮのそれぞれごとに、代表点の座標(x,y)を格納する。
【００３５】
図６はXYコンテキスト部１２の内部構成の一例を示すブロック図である。図示のように、XYコンテキスト部１２は、各スレッドごとに設けられるマルチプレクサおよびXsaveレジスタ６１と、マルチプレクサおよびＸレジスタ６２と、マルチプレクサおよびＹレジスタ６３と、これらレジスタ６１〜６３の出力のうちいずれか一つを選択するマルチプレクサ６４と、を有する。これらレジスタは、現在のスタンプにおける代表点の座標(x,y)を格納する。また、XYコンテキスト部１２は、スタンプの座標を１スタンプ分移動させるための座標増分格納部６５を有する。座標増分格納部６５は、１スタンプ分のＸ座標の距離Δｘを格納するΔｘレジスタ６６と、１スタンプ分のＹ座標の距離Δｙを格納するΔｙレジスタ６７と、これらレジスタ６６，６７の一方を選択するマルチプレクサ６８とを有する。
【００３６】
図７はポリゴンのラスタライズ処理の手順を説明する図である。図７の例では、Ｘ方向に隣接するスタンプを同じスレッドで処理し、Ｙ方向に隣り合うスタンプ列は別々のスレッドで処理する。
【００３７】
具体的には、２つのスレッドth１，２を用いてラスタライズを行う。スタンプ１を開始点として、まず、Ｙ方向に隣接するスタンプ２をスレッドth２で処理する。スタンプ２の処理内容は、内外判定と、スタンプ２を構成する各ピクセルの座標検出と、各ピクセルのパラメータ計算である。次に、スタンプ１の右側に隣接するスタンプ３をスレッドth１で処理し、その後、スタンプ２の右側に隣接するスタンプ４をスレッドth２で処理する。このように、スレッドth１，２が交互に処理を行う。
【００３８】
スレッドth１，２はそれぞれ、３つのステージA,B,Cに分けて処理を行う。ステージＡは、図３に示すように、コンテキスト部２における処理である。ステージＢは、直線方程式計算部３における処理である。ステージＣは、エッジ判定部５における処理である。
【００３９】
図８は図７のポリゴンをラスタライズする場合のタイミングを示す図である。図示のように、まず、スレッドth１が２回連続して処理を行い、それ以降は、スレッドth２とスレッドth１が交互に処理を行う。スレッドth１，２は１サイクルずつずらして処理を行い、各スレッドの処理は３サイクルで完了する。
【００４０】
図８からわかるように、スレッドth１はスタンプ１を開始点として、まずＹ方向への移動を開始する（サイクルｔ１）。次のサイクルｔ２で、スレッドth１はスタンプ１からＸ方向への移動を開始する。次のサイクルｔ３で、スレッドth２はスタンプ２からＸ方向への移動を開始する。次のサイクルｔ４で、スレッドth１はスタンプ３からＹ方向への移動を開始する。次のサイクルｔ５で、スレッドth２はスタンプ４からＸ方向への移動を開始する。
【００４１】
例えば、サイクルｔ４に着目すると、スレッドth１がスタンプ１のステージＣを処理しているときに、スレッドth２がスタンプ３のステージＡを処理する。このように、スレッドth１，２は並列処理を行う。
【００４２】
サイクルｔ４において、エッジ判定部５は、スタンプ１をＸ方向に移動させたとき（スタンプ３）の先行点がポリゴンの外側に出ることを認識する。このため、フラグ２０をセットする。このフラグ２０は同サイクル中にスレッドth１に送られる。このとき、スレッドth１は、スタンプ３のサイクルＡを処理しているため、スタンプ３の右側には処理すべきスタンプが存在しないことを認識し、Ｙ方向への移動処理を行う。
【００４３】
このように、本実施形態では、スタンプの先行点がポリゴンの内部に位置するか否かの判定結果に基づいて、同じサイクル中にスタンプの移動方向を決定する点に特徴がある。このため、従来のように、無駄なスタンプ処理を行わなくてすみ、処理の効率化を図ることができる。
【００４４】
以下、図７のポリゴンをラスタライズする場合を例にとって、第１の実施形態に係る画像処理装置４５の動作を説明する。まず、最初にスレッドth１を使って、図のスタンプ１から処理を開始するものとする。
【００４５】
(1-1) スレッドth１、スタンプ１、Ｙ方向移動、ステージＡ（図８のサイクルｔ１）
スレッドth１のACCレジスタ１３とSaveレジスタ１４には、スタンプ１の先行点の直線方程式の値が格納され、XYコンテキスト部１２のＸレジスタとＹレジスタにはスタンプ１の代表点の座標(X,Y)が格納され、XSaveレジスタ６１には代表点のＸ座標が格納されている。
【００４６】
開始時は、Ｙ方向に移動するため、DDA制御部６内のマルチプレクサ５２は、Ｘ，Ｙレジスタ６２，６３のうちＹレジスタ６３の出力を選択してXY計算部４に供給する。また、XYコンテキスト部１２内のマルチプレクサ６８は、Ｙ方向の増分値Δｙを選択してXY計算部４に供給する。
【００４７】
一方、スレッドth１〜thＮ内のマルチプレクサ１５は、Saveレジスタ１４の値を選択する。DDA制御部６内のマルチプレクサは、スレッドth１の出力を選択して直線方程式計算部３に供給する。また、傾きコンテキスト部１１内のマルチプレクサはdIa/dyを選択して直線方程式計算部３に供給する。以上の処理は、３つの直線方程式計算部３のそれぞれに対して行われる。
【００４８】
(1-2) スレッドth１、スタンプ１、Ｙ方向移動、ステージＢ（図８のサイクルｔ２）
XY計算部４は、Ｙ＋Δｙの計算を行う。また、３つの直線方程式計算部３はそれぞれ、Ia＋dIadyの加算を行い、その計算結果を出力する。
【００４９】
(1-3) スレッドth１、スタンプ１、Ｙ方向移動、ステージＣ（図８のサイクルｔ３）
エッジ判定部５は、３つの直線方程式計算部３の出力値の符号を調べて、それらがすべて正であれば、先行点はポリゴンの内部にあり、一つでも負の値があれば、ポリゴンの外部にあると判断する。計算された直線方程式の値は、スタンプ２の先行点のものであるため、図７のポリゴンの場合、すべて正の値になり、ポリゴンの内部にあると判定される。そこで、次は、スタンプ５の位置までＸ方向に移動することが決定される。
【００５０】
計算した直線方程式の値は、スレッドth２のACCレジスタ１３とSaveレジスタ１４に格納される。また、Ｙ座標値は、XYコンテキスト部１２のＹレジスタ６３に格納され、XSaveレジスタ６１の値はＸレジスタ６２に格納される。また、Ｙ方向移動後、最初のポリゴン内部のスタンプであるため、そのＸ座標がXSaveレジスタ６１に格納される。
【００５１】
(2) スタンプ１からスタンプ３への移動
(2-1) スレッドth１、スタンプ１、Ｘ方向移動、ステージＡ（図８のサイクルｔ２）
スレッドth１のACCレジスタ１３とSaveレジスタ１４には、スタンプ１の直線方程式の先行点の値が格納され、XYコンテキスト部１２のＸレジスタ６２とＹレジスタ６３には代表点のX,Ｙレジスタ６２，６３が格納されている。また、XSaveレジスタ６１には、スタンプ１の代表点のＸ座標が格納されている。Ｘ方向に移動するため、Ｘレジスタ６２の値、ΔｘおよびACCレジスタ１３の値が出力される。DDA制御部６は、スレッドth１の出力を選択する。
【００５２】
(2-2) スレッドth１、スタンプ１、Ｘ方向移動、ステージＢ（図８のサイクルｔ３）
XY計算部４は、Ｘ＋Δｘの計算を行う。また、３つの直線方程式計算部３はそれぞれ、Ia＋dIa/dxの計算を行い、その計算結果を出力する。
【００５３】
(2-3) スレッドth１、スタンプ１、Ｘ方向移動、ステージＣ（図８のサイクルｔ４）
エッジ判定部５は、３つの直線方程式計算部３の出力値の符号を調べる。この場合、移動後のスタンプ３の先行点における直線方程式の値を調べる。この結果、ポリゴンの外側にあると判定され、その旨のフラグがセットされる。
【００５４】
(3) スタンプ２からスタンプ４への移動
この場合、Ｘ方向の移動であるため、スレッドth２を(2)と同様にして動作させる。移動後のスタンプ４の先行点はポリゴンの内部に位置するため、ステージＣの処理が(2-3)と異なる。
【００５５】
(3-3) スレッドth２、スタンプ２、Ｘ方向移動、ステージＣ（図８のサイクルｔ５）
この場合、３つの直線方程式計算部３の出力はすべて正になる。このため、直線方程式の値がACCレジスタ１３に格納され、スタンプ４のＸ座標がＸレジスタ６２に格納される。
【００５６】
(4) スタンプ３からスタンプ５への移動
上述した(2-3)において、スタンプ３の先行点がポリゴンの外部にある旨のフラグがセットされているため、スレッドth１はＹ方向への移動を行う。
【００５７】
(4-1) スレッドth１、スタンプ３、Ｙ方向移動、ステージＡ（図８のサイクルｔ４）
Ｙ方向への移動を指示するフラグがセットされているため、スレッドth１は、Saveレジスタ１４に格納されている直線方程式の値（スタンプ１の先行点の値）を出力する。また、XYコンテキスト部１２は、Ｙレジスタ６３の値とΔｙを出力する。また、傾きコンテキスト部１１はdIadyを出力する。
【００５８】
(4-2) スレッドth１、スタンプ３、Ｙ方向移動、ステージＢ（図８のサイクルｔ５）
XY計算部４は、Ｙ＋Δｙを計算する。３つの直線方程式計算部３はそれぞれIa＋dIa/dyを計算し、その計算結果を出力する。
【００５９】
(4-3) スレッドth１、スタンプ３、Ｙ方向移動、ステージＣ（図８のサイクルｔ６）
エッジ判定部５は、移動後の先行点が三角形の内部にあると判定し、直線方程式の値をスレッドth１のACCレジスタ１３とSaveレジスタ１４に格納する。Saveレジスタ１４に格納するのは、ポリゴンの内部にあると判定したためである。次に、加算したＹ座標値をスレッドth１のＹレジスタ６３に格納する。また、XSaveレジスタ６１の値をＸレジスタ６２に、Ｘレジスタ６２の値をXSaveレジスタ６１に格納する。
【００６０】
以上の処理をスタンプごとに順次行い、ポリゴンの最後のスタンプまで処理を行うと、そのポリゴンの処理を終了する。
【００６１】
上述した実施形態では、２つのスレッドを交互に切り替えながら処理を行う例を説明したが、３つ以上のスレッドを交互に切り替えながら処理を行ってもよい。３つ以上のスレッドを用いる場合は、フラグの受け渡しからＸ座標およびＹ座標を切り替えるまでのタイミングにより余裕が生じる。
【００６２】
図９は以上に説明した第１の実施形態の概略的な処理手順を示すフローチャートである。まず、DDAセットアップ部１は、直線方程式の係数を計算し（ステップＳ１）、開始点を決定する（ステップＳ２）。次に、DDAセットアップ部１は、開始点の座標と、直線方程式の初期値と傾きを計算する（ステップＳ３）。次に、コンテキスト部２は、ACCレジスタ１３とSaveレジスタ１４を初期化する（ステップＳ４）。次に、マスク生成部７は、ピクセル単位の座標とパラメータを生成する（ステップＳ５）。
【００６３】
その後、スレッドth１とスレッドth２の処理が交互に行われる。まず、スレッドth１の処理を説明する。スレッドth１は、スレッドth１のスタンプをＸ方向に１スタンプ分移動させ（ステップＳ６）、移動後のスタンプの先行点について内外判定を行う（ステップＳ７）。内側にあると判定されると、マスク生成部７は、移動後のスタンプ内の各ピクセルのXY座標を計算するとともに、パラメータを生成する（ステップＳ８）。そして、ステップＳ６に戻る。
【００６４】
一方、ステップＳ７でポリゴンの外側と判定されると、スタンプをＹ方向に１スタンプ分移動させる（ステップＳ９）。次に、移動後のスタンプがポリゴンの内部に位置するか否かを判定し（ステップＳ１０）、位置する場合には、移動後のスタンプ内の各ピクセルについてXY座標とパラメータの計算を行った後、ステップＳ６に戻る。一方、ステップＳ１０でポリゴンの外側と判定されると、処理を終了する。
【００６５】
次に、スレッドth２の処理を説明する。スレッドth２では、スタンプをＹ方向に移動させて（ステップＳ１１）、内外判定を行う（ステップＳ１２）。移動後のスタンプがポリゴンの内部に位置すると判定されると、そのスタンプ内の各ピクセルのXY座標とパラメータを計算する（ステップＳ１３）。
【００６６】
次に、スタンプをＸ方向に１スタンプ分移動させ（ステップＳ１４）、内外判定を行う（ステップＳ１５）。移動後のスタンプがポリゴンの内部に位置すると判定されると、そのスタンプ内の各ピクセルのXY座標とパラメータを計算し（ステップＳ１６）、ステップＳ１４に戻る。
【００６７】
一方、ステップＳ１５でポリゴンの外側と判定されると、スタンプをＹ方向に１スタンプ分移動させる（ステップＳ１７）。次に、移動後のスタンプについて内外判定を行う（ステップＳ１８）。移動後のスタンプがポリゴンの内部と判定されると、そのポリゴン内の各ピクセルのXY座標とパラメータを計算し（ステップＳ１９）、ステップＳ１４に戻る。
【００６８】
一方、ステップＳ１２またはＳ１８でポリゴンの外側と判定されると、処理を終了する。
【００６９】
このように、第１の実施形態では、複数のスレッドを交互に切り替えながらスタンプの処理を行い、スタンプがポリゴンの外部にあると判定されると、次に処理すべきスタンプを瞬時に切り替えるようにしたため、ポリゴンの外部にあるスタンプを無駄に処理するおそれがなくなり、効率的なラスタライズ処理が可能になる。また、複数のスレッドを交互に切り替えて処理を行うため、直線方程式を計算する直線方程式計算部３とエッジ判定部５を複数のスレッドで共用でき、全体の構成を簡略化できる。
【００７０】
（第２の実施形態）
第２の実施形態は、隣接するポリゴンに別個のスレッドを割り当てて、各スタンプの処理を行う。
【００７１】
図１０は第２の実施形態の処理タイミングの一例を示す図である。この図では、３つのスレッドth１〜３を用いて処理を行う例を示している。
【００７２】
まず、スレッドth１は、ポリゴン１のスタンプ処理を行うために、サイクルｔ１で初期設定を行い、その後、開始点のスタンプについて、サイクルｔ２でステージAの処理を行い、サイクルｔ３でステージＢの処理を行い、サイクルｔ４でステージＣの処理を行う。
【００７３】
一方、スレッドth２は、サイクルｔ２でポリゴン２の初期設定を行い、その後、開始点のスタンプについて、サイクルｔ３でステージＡの処理を行い、サイクルｔ４でステージＢの処理を行い、サイクルｔ５でステージＣの処理を行う。
【００７４】
一方、スレッド３は、サイクルｔ３でポリゴン３の初期設定を行い、その後、開始点のスタンプについて、サイクルｔ４でステージＡの処理を行い、サイクルｔ５でステージＢの処理を行い、サイクルｔ６でステージＣの処理を行う。
【００７５】
以降、スレッドth１〜３は、対応するポリゴン内のスタンプを順に処理していく。ポリゴン内の最後のスタンプの処理が終わると、次のポリゴンについて同様の処理を行う。あるスレッドが１つのポリゴンの処理が終わると、そのスレッドは次のポリゴンについて初期設定を行い、同様の手順でスタンプの処理を行う。
【００７６】
図１１は３つのポリゴンのラスタライズをスレッドth１〜３が行う順序を示す図である。図示のように、スレッドth１〜３はそれぞれポリゴンｐ１〜ｐ３のラスタライズを行う。
【００７７】
図１２は第２の実施形態の処理手順の一例を示すフローチャートである。このフローチャートは、２つのスレッドがそれぞれ異なるポリゴンを処理する例を示している。図９との違いは、各スレッドがそれぞれ初期設定を行う点である（ステップＳ３１〜Ｓ３５、Ｓ５１〜Ｓ５５）。それ以外の処理は図９と同様である。
【００７８】
このように、第２の実施形態では、一つのポリゴンを１つのスレッドで処理し、複数のスレッドが交互にラスタライズを行うため、ポリゴンのサイズが小さい場合には、第１の実施形態よりも効率的に処理を行うことができる。
【００７９】
（第３の実施形態）
第３の実施形態は、ポリゴンを形成する３つの直線方程式のうち２つ（以下、開始辺と終了辺）に沿って、スタンプごとに処理を行うものである。
【００８０】
図１３は第３の実施形態の処理手順を説明する図である。開始辺と終了辺に沿って、交互に１スタンプずつ処理を行う。このとき、各辺の外側に出ると、内側に１スタンプ移動させる。例えば、開始辺の場合、図１３のスタンプ1,2,3,4,5,6,7,8の順に処理が行われる。また、終了辺の場合、スタンプ1,2,3,4,5,6,7,8,9の順に処理が行われる。
【００８１】
そして、Ｘ方向に平行な各ラインごとに、開始辺に沿ったスタンプから終了辺に沿ったスタンプまでの距離を記憶しておく。
【００８２】
次に、開始辺と終了辺の間に位置するスタンプについては、直線方程式の符号ではなく、上述の距離によりエッジ判定を行う。これにより、開始点と終了辺の間に位置するか否かを容易に判定できる。
【００８３】
第３の実施形態の場合、開始辺に沿ったスキャンと、終了辺に沿ったスキャンと、開始辺および終了辺の間の中間スキャンの計３つのスキャンが必要となるが、開始辺のスキャンと中間スキャンはまとめて行えるため、２つのスキャンで行うことができる。
【００８４】
このように、第３の実施形態では、ポリゴンの開始辺と終了辺に沿ってスタンプの処理を行うため、第１および第２の実施形態のような３つの直線方程式を用いた内外判定を行わなくてすむ。
【００８５】
上述した画像処理装置が行う画像処理の具体的内容は特に問わない。三次元画像処理を行ってもよいし、二次元画像処理を行ってもよい。また、図１に示した画像処理装置は、必ずしも図４のホストプロセッサ２１に接続して使用する必要はない。さらに、画像処理装置だけでチップを構成してもよいし、図４の画像処理ユニット２２を１つのチップとしてもよいし、図４のホストプロセッサ２１と画像処理ユニット２２を１つのチップとしてもよい。
【００８６】
また、上述した実施形態では、２×２のスタンプを用いる例を説明したが、スタンプを構成するピクセル数には特に制限はない。また、ポリゴンの形状も、三角形に限定されず、四角形以上の多角形でもよい。
【００８７】
上述した実施形態で説明した画像処理装置は、ハードウェアで構成してもよいし、ソフトウェアで構成してもよい。ソフトウェアで構成する場合には、画像処理装置の少なくとも一部の機能を実現するプログラムをフロッピーディスクやＣＤ−ＲＯＭ等の記録媒体に収納し、コンピュータに読み込ませて実行させてもよい。記録媒体は、磁気ディスクや光ディスク等の携帯可能なものに限定されず、ハードディスク装置やメモリなどの固定型の記録媒体でもよい。
【００８８】
また、画像処理装置の少なくとも一部の機能を実現するプログラムを、インターネット等の通信回線（無線通信も含む）を介して頒布してもよい。さらに、同プログラムを暗号化したり、変調をかけたり、圧縮した状態で、インターネット等の有線回線や無線回線を介して、あるいは記録媒体に収納して頒布してもよい。
【図面の簡単な説明】
【００８９】
【図１】ポリゴンを説明する図。
【図２】スタンプを説明する図。
【図３】本発明の第１の実施形態に係る画像処理装置の概略構成を示すブロック図。
【図４】図３の画像処理装置を内蔵するグラフィックプロセッサを備えた画像処理システムの概略構成の一例を示すブロック図。
【図５】コンテキスト部２とDDA制御部６の内部構成の一例を示すブロック図。
【図６】XYコンテキスト部１２の内部構成の一例を示すブロック図。
【図７】ポリゴンのラスタライズ処理の手順を説明する図。
【図８】図７のポリゴンをラスタライズする場合のタイミングを示す図。
【図９】第１の実施形態の概略的な処理手順を示すフローチャート。
【図１０】第２の実施形態の処理タイミングの一例を示す図。
【図１１】３つのポリゴンのラスタライズをスレッドth１〜３が行う順序を示す図。
【図１２】第２の実施形態の処理手順の一例を示すフローチャート。
【図１３】第３の実施形態の処理手順を説明する図。
【符号の説明】
【００９０】
１  DDAセットアップ部
２  コンテキスト部
３  直線方程式計算部
４  XY計算部
５  エッジ判定部
６  DDA制御部
７  マスク生成部
１１  傾きコンテキスト部
１２  XYコンテキスト部
１３  ACCレジスタ
１４  Saveレジスタ
１５  マルチプレクサ
１６  dI/dyレジスタ
１７  マルチプレクサ
１８  加算器
１９  内外判定器
２１  ホストプロセッサ
２２  グラフィックプロセッサ
２３  メインメモリ
２４  I/Oプロセッサ
３１  メインプロセッサ
３２  信号処理部
３３，３４，３５  I/O部
４１  コントローラ
４２，４３  I/O部
４４  画像処理ユニット
４５  画像処理装置
４６  演算ユニット
４７  メモリ
４８  ローカルネットワーク
【図１】
2005301902.tif 000003
【図２】
2005301902.tif 000004
【図３】
2005301902.tif 000005
【図４】
2005301902.tif 000006
【図５】
2005301902.tif 000007
【図６】
2005301902.tif 000008
【図７】
2005301902.tif 000009
【図８】
2005301902.tif 000010
【図９】
2005301902.tif 000011
【図１０】
2005301902.tif 000012
【図１１】
2005301902.tif 000013
【図１２】
2005301902.tif 000014
【図１３】
2005301902.tif 000015