(57)【要約】【課題】非常に高速かつ効率的な三角形トラバースを実行できるグラフィックラスタライゼーションにおける三角形トラバース方法及び装置を提供する。【解決手段】この方法は、三角形をカバーする画素からなる最小矩形であるバウンディングボックスを生成し、バウンディングボックスに基づいて三角形をトラバースするためのトラバース開始画素を選択し、トラバース開始画素と三角形の位置関係に基づいてトラバース方向を選択し、トラバース方向においてトラバース開始画素から三角形をトラバースすることを含む。三角形をトラバースすることは、トラバース開始画素及びトラバース方向に対する三角形のエッジ関数の傾きに基づいて次の走査開始画素を計算することを含む。【選択図】図２
2010055611.tif 000002
【特許請求の範囲】
【請求項１】
グラフィックラスタライゼーションにおける三角形トラバース方法であって、
三角形をカバーする画素からなる最小矩形であるバウンディングボックスを生成し、
前記バウンディングボックスに基づいて前記三角形をトラバースするためのトラバース開始画素を選択し、
前記トラバース開始画素と前記三角形の位置関係に基づいてトラバース方向を選択し、
前記トラバース方向において前記トラバース開始画素から前記三角形をトラバースする、ことを含み、
前記三角形をトラバースすることは、前記トラバース開始画素及び前記トラバース方向に対する前記三角形のエッジ関数の傾きに沿って現在の走査開始画素から次の走査開始画素を計算することを含む、
三角形トラバース方法。
【請求項２】
前記三角形をトラバースすることは、前記傾きを求めるために前記トラバース方向において現在の行または列における前記三角形の内部にある最初の画素を検出することを含む、請求項１に記載の三角形トラバース方法。
【請求項３】
前記三角形をトラバースすることは、現在の行において前記三角形の内部にある前記最初の画素と前に走査された行において前記三角形の内部にある前記最初の画素との距離、または、現在の列において前記三角形の内部にある前記最初の画素と前に走査された列において前記三角形の内部にある前記最初の画素との距離を用いて前記傾きを求めることにより、前記次の走査開始画素を導出する、請求項２に記載の三角形トラバース方法。
【請求項４】
前記三角形をトラバースすることは、現在の行または列の走査を終了するか否かを決定することをさらに含み、現在の行または列における現在の画素が前記三角形の外側にあり、かつ前記トラバース方向に沿って前の画素が前記三角形の内部にある場合に、現在の行または列の走査を終了する、請求項１〜３の何れか一項に記載の三角形トラバース方法。
【請求項５】
前記トラバース方向を選択することは、水平方向または垂直方向のうち、前記トラバース開始画素から前記三角形の内部にある画素の方向を、前記トラバース方向とする、請求項１〜４の何れか一項に記載の三角形トラバース方法。
【請求項６】
前記三角形をトラバースすることは、前記トラバース方向において前記三角形の内部にある画素が存在しない場合に前記三角形のトラバースを終了することを含む、請求項１〜５の何れか一項に記載の三角形トラバース方法。
【請求項７】
グラフィックラスタライゼーションにおける三角形トラバース装置であって、
三角形をカバーする画素からなる最小矩形であるバウンディングボックスを生成するバウンディングボックス生成ブロックと、
前記バウンディングボックスに基づいて前記三角形をトラバースするためのトラバース開始画素を選択するトラバース開始画素選択ブロックと、
前記トラバース開始画素と前記三角形の位置関係に基づいてトラバース方向を選択するトラバース方向選択ブロックと、
前記トラバース方向において前記トラバース開始画素から前記三角形をトラバースするトラバースブロックと、を有し、
前記トラバースブロックは、前記トラバース開始画素及び前記トラバース方向に対する前記三角形のエッジ関数の傾きに沿って現在の走査開始画素から次の走査開始画素を計算する手段を有する、
三角形トラバース装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、イメージを表示する方法及び装置に関する。特に、本発明は、グラフィックラスタライゼーションにおける三角形トラバース方法及び装置に関する。
【背景技術】
【０００２】
グラフィックラスタライゼーションは、ラスターグラフィックディスプレイへ伝達するために幾何学的要素（線、三角形、ポリゴン等）を画素に変換する手順である。三角形は、その有用な性質（常に凸であり、常に単平面に属し、複雑な２次元要素の作成が容易）のため、グラフィックラスタライゼーションにおいて最も重要な要素である。「三角形トラバース」は、三角形の内部にある全ての画素を検出する手順である。
【０００３】
エッジ関数は、ハードウェアにおいて三角形をラスタライズする基礎となる。「エッジ関数」は、三角形の３本のエッジの３本の線の関数であり、三角形の３個の頂点により形成される。三角形内の画素は、この画素の座標における３個のエッジ関数値が全て正または全て負となるという特性を持つ。そのため、エッジ関数は画素が三角形の内部にあるか否かを決定するための有用なツールである。
【０００４】
エッジ関数に基づく、多くの三角形トラバース方法が提案されている。例えば、バウンディングボックストラバース、バックトラックトラバース及びジグザグトラバースなどである。
【０００５】
上記のトラバースアルゴリズムは、全て走査線に基づいたトラバース方法である。これらの基本的なアイデアは、三角形のバウンディングボックスを作成し、何らかの順序に従ってそのバウンディングボックスを走査することにある。
【発明の概要】
【０００６】
一つの側面において、グラフィックラスタライゼーションにおける三角形トラバース方法が提供される。この方法は、三角形をカバーするピクセルからなる最小矩形であるバウンディングボックスを生成し、そのバウンディングボックスに基づいて三角形をトラバースするためのトラバース開始画素を選択し、トラバース開始画素と三角形間の位置関係に基づいてトラバース方向を選択し、そのトラバース方向においてトラバース開始画素から三角形をトラバースすることを含む。三角形をトラバースすることは、トラバース開始画素とトラバース方向に対する三角形のエッジ関数の傾きに基づいて、次の走査開始画素を計算することを含む。
【０００７】
他の側面において、グラフィックラスタライゼーションにおける三角形トラバース装置が提供される。この装置は、三角形の頂点座標を受け取り、その頂点座標を用いることにより三角形のエッジ関数の係数を計算し、三角形のバウンディングボックスを生成し、かつトラバース開始画素及びトラバース方向を選択するセットアップブロックと、エッジ関数の係数、トラバース開始画素及びトラバース方向に基づいて三角形をトラバースするトラバースブロックとを有する。またトラバースブロックは、トラバース開始画素とトラバース方向に対する三角形のエッジ関数の傾きに基づいて、次の走査開始画素を計算する。
【０００８】
ここに開示される方法及び装置は、トラバースにおいてできる限り三角形の外側の画素にアクセスしないことにより、非常に高速かつ効率的な三角形トラバースを実行できる。
【図面の簡単な説明】
【０００９】
【図１】三角形を描写するシステムのブロック図である。
【図２】一つの実施形態による三角形トラバース方法の概略を示すフローチャートである。
【図３】図１に示したシステムのセットアップブロック１０４及びトラバースブロック１０５の詳細を示す図である。
【図４】三角形のバウンディングボックスの一例を示す図である。
【図５】三角形のバウンディングボックスを生成する方法を示すフローチャートである。
【図６】四つの異なるケースのうちの一つにおいてそれぞれ選択されるトラバース開始画素を示す図である。
【図７】トラバース方向を選択する方法を示すフローチャートである。
【図８】二つの異なるケースのうちの一つにおいてそれぞれ選択されるトラバース方向を示す図である。
【図９】三角形の完全なトラバースを示す一例の図である。
【図１０】次の走査行／列における走査開始画素の計算方法を示すフローチャートである。
【発明を実施するための形態】
【００１０】
好ましい実施形態についての以下の記述において、説明目的のため、多数の具体的なディテールが本発明を深く理解するために記述されている。しかしながら、これらの具体的なディテールなしに本発明を実施してもよいことは、当業者にとって明らかであろう。
【００１１】
三角形トラバース方法の効率は、主として、三角形の外側にある画素にアクセスする冗長なコストに依存する。そのため、この実施形態の目的は、極力三角形の外側の画素にアクセスしないようにすることにある。
【００１２】
図１は、三角形を描写するシステムのブロック図である。このシステムは、頂点メモリ１０１と、変換ブロック１０２と、投影ブロック１０３と、セットアップブロック１０４と、トラバースブロック１０５と、フレームバッファ１０６と、ディスプレイ１０７とを有する。
【００１３】
まず、頂点情報（物体座標）が頂点メモリ１０１から変換ブロック１０２へ読み出される。そして変換ブロック１０２は、頂点座標を変換し、投影ブロック１０３が変換された頂点座標をデバイス座標に投影する。セットアップブロック１０４及びトラバースブロック１０５は、デバイス座標を使用して、どの画素が三角形の内部にあるかを計算し、それらの画素のパラメータ（例えば、色／テクスチャ）を計算する。そしてそのパラメータはフレームバッファ１０６に書き込まれる。ディスプレイ１０７は、フレームバッファ１０６に書き込まれた内容に基づいて表示する。
【００１４】
図２は、一つの実施形態による三角形トラバース方法の概略を示すフローチャートである。この三角形トラバース方法は、バウンディングボックスを生成し（ステップＳ２０１）、トラバース開始画素を選択し（ステップＳ２０２）、トラバース方向を選択し（ステップＳ２０３）、そして三角形をトラバースする（ステップＳ２０４）。
【００１５】
以下、三角形トラバース処理方法及び装置を詳しく記述する。
【００１６】
図３は、図１に示したシステムのセットアップブロック１０４及びトラバースブロック１０５の詳細を示す図である。セットアップブロック１０４は、エッジ関数計算ブロック３０１と、バウンディングボックス生成ブロック３０２と、トラバース開始画素及びトラバース方向選択ブロック３０３とを有する。またトラバースブロック１０５は、開始画素登録ブロック３０４と、走査ブロック３０５と、次開始画素計算ブロック３０６と、描画判定ブロック３０７と、パラメータ計算ブロック３０８とを有する。
【００１７】
セットアップブロック１０４のエッジ関数計算ブロック３０１は、投影ブロック１０３から三角形の３個の頂点の座標V0(x0,y0)、V1(x1,y1)及びV2(x2,y2)を受け取る。i=0,1,2に対して、(xi,yi)は浮動小数点値である。また、３個の頂点V0、V1及びV2は、三角形において時計回りに選択される。３個の頂点の座標に基づいて、エッジ関数計算ブロック３０１は、三角形の３本のエッジのエッジ関数を計算する。
【数１】
2010055611.tif 000003
【００１８】
セットアップブロック１０４のバウンディングボックス生成ブロック３０２は、投影ブロック１０３から三角形の３個の頂点の座標を受け取り、その頂点座標を用いて三角形のバウンディングボックスを生成する。三角形のバウンディングボックスは、その三角形をカバーする画素からなる最小矩形であり、その矩形の４個のコーナーにおける画素の座標(xmin,ymin)、(xmin,ymax)、(xmax,ymin)及び(xmax,ymax)により表される。
【００１９】
図４は、三角形のバウンディングボックスの一例を示す図である。以下、三角形のバウンディングボックスを生成する処理について、図４に示した例を参照しつつ説明する。三角形２０１の３個の頂点は、それぞれ、(x0,y0)、(x1,y1)及び(x2,y2)である。３個の頂点の座標から、以下の中間値が得られる。
【数２】
2010055611.tif 000004
ここで関数min()及びmax()は、３個の変数の最小値及び最大値を計算するために使用される。fxmin、fxmax、fymin及びfymaxの全ては、浮動小数点値である。
【００２０】
画素２０３は座標の整数値に配置されるので、上記の中間値は、以下の操作により整数値に変換される。
【数３】
2010055611.tif 000005
ここでceil(float a)関数は、a以上の最小整数を返す関数である。例えば、ceil(1.5)=2である。またfloor(float a)関数は、a以下の最大整数を返す関数である。例えば、floor（1.5)=1である。
【００２１】
三角形の１個以上の頂点は、表示面（図４では図示せず）の外側に存在する可能性があるため、クリップ操作が必要となる。表示面の範囲がクリップウインドウ[clipxmin,clipxmax]、[clipymin,clipymax]により定義されるとすると、クリップ操作は以下のようになる。
if(xmin < clipxmin) xmin = clipxmin;
if(ymin < clipymin) ymin = clipymin;
if(xmax > clipxmax) xmax = clipxmax;
if(ymax > clipymax) ymax = clipymax;
【００２２】
クリップ操作は三角形のバウンディングボックスの４個のコーナーにおける画素の座標、すなわち、(xmin,ymin)、(xmin,ymax)、(xmax,ymin)及び(xmax,ymax)を与え、それらはバウンディングボックスを定義する。
【００２３】
エッジ関数計算ブロック３０１により計算された三角形のエッジ関数とバウンディングボックス生成ブロック３０２により生成された三角形のバウンディングボックスに基づいて、セットアップブロック１０４のトラバース開始画素及びトラバース方向選択ブロック３０３はトラバース開始画素及びトラバース方向を決定する。
【００２４】
特に、図５に示した処理によれば、トラバース開始画素及びトラバース方向選択ブロック３０３は、バウンディングボックス生成ブロック３０２から受け取ったfxmin、fxmax、fymin及びfymaxを用いることにより、バウンディングボックス生成ブロック３０２において計算された４個のコーナーにおける画素(xmin,ymin)、(xmin,ymax)、(xmax,ymin)及び(xmax,ymax)からトラバース開始画素を選択する。トラバース開始画素は、三角形のバウンディングボックスの４個のコーナーにおける画素(xmin,ymin)、(xmin,ymax)、(xmax,ymin)及び(xmax,ymax)（すなわち、左上、左下、右上、右下）のうちの一つであり、三角形の３個の頂点の座標関係に依存する。その選択を示すコードは以下の通りである。
if((x0 == fxmin && y0 == fymin) || (x1 == fxmin && y1 == fymin) || (x2 == fxmin && y2 == fymin)) startpos = topleft（ステップＳ５０１及びＳ５０２）;
else if((x0 == fxmax && y0 == fymin) || (x1 == fxmax && y1 == fymin) || (x2 == fxmax && y2 == fymin)) startpos = topright （ステップＳ５０３及びＳ５０４）;
else if((x0 == fxmin && y0 == fymax) || (x1 == fxmin && y1 == fymax) || (x2 == fxmin && y2 == fymax)) startpos = bottomleft （ステップＳ５０５及びＳ５０６）;
else if((x0 == fxmax && y0 == fymax) || (x1 == fxmax && y1 == fymax) || (x2 == fxmax && y2 == fymax)) startpos = bottomright （ステップＳ５０７及びＳ５０８）;
なお、上記のコードにおいて、変数startposはトラバース開始画素の位置を表す。また、topleft、topright、bottomleft、bottomrightは、それぞれ、バウンディングボックスの左上、右上、左下、右下のコーナーを表す。
【００２５】
図６は、四つの異なるケースのうちの一つにおいてそれぞれ選択されるトラバース開始画素を示す図である。図６（ａ）、（ｂ）、（ｃ）及び（ｄ）は、それぞれ、図５におけるステップＳ５０２、Ｓ５０４、Ｓ５０６及びＳ５０８に対応する。
【００２６】
図５は、所定の順序、すなわち、左上、右上、左下、右下の順序でトラバース開始画素を選択しているが、他の順序に従ってトラバース開始画素を選択してもよい。また、図６は、三角形のただ１個の頂点のみがバウンディングボックスの１個のコーナーの画素に含まれる例として三角形を示した。しかし、三角形の２個以上の頂点がその三角形のバウンディングボックスのコーナーの画素に含まれてもよい。
【００２７】
図示されたように、クリップ操作の前に、バウンディングボックスのコーナーの一つにおける画素に含まれる三角形の頂点が少なくとも一つ存在する。バウンディングボックスがクリップ操作の対象でない場合、トラバース開始画素は、バウンディングボックスの４個のコーナーにある画素のうち、三角形の頂点が含まれる画素の何れかである。バウンディングボックスがクリップ操作の対象となる場合、トラバース開始画素は、クリップ操作の前においてトラバース開始画素が存在するコーナーに対応するコーナーにある画素の一つである。
【００２８】
また、トラバース開始画素及びトラバース方向選択ブロック３０３は、エッジ関数計算ブロック３０１から受け取ったエッジ関数の係数と、バウンディングボックスの４個のコーナーにある画素(xmin,ymin)、(xmin,ymax)、(xmax,ymin)及び(xmax,ymax)に基づいて、トラバース方向を選択する。二つのトラバース方向が考えられる。すなわち、水平方向（行）と垂直方向（列）である。トラバース開始画素から三角形の内部に存在する画素が水平ラインにある場合、トラバース方向を水平とし、そうでなければ、トラバース方向を垂直とする。
【００２９】
三角形に対するトラバース開始画素の位置に基づいて、トラバース開始画素から三角形の内部に存在する画素が水平ラインにあるか否かを決定できる。三角形に対するトラバース開始画素の位置は、トラバース開始画素における三角形の３個のエッジ関数の値から得られる。画素が三角形の外側にある場合、この画素における３個のエッジ関数の値を用いて、この画素が三角形の左／右／上／下の何れにあるか否かを決定できる。
【００３０】
以下の４個の式を用いて、画素p(x,y)と三角形の位置関係を決定する。
(1) InLeftTriangle(x,y)
｛     if((e0(x,y) < 0 && a0 >= 0) || (e1(x,y) < 0 && a1 >= 0) || (e2(x,y) < 0 && a2 >= 0))
return true;  //（三角形の左側にある）
else return false;  //（三角形の左側にない）
｝
(2) InRightTriangle(x,y)
｛     if((e0(x,y) < 0 && a0 <= 0) || (e1(x,y) < 0 && a1 <= 0) || (e2(x,y) < 0 && a2 <= 0))
return true;  //（三角形の右側にある）
else return false;  //（三角形の右側にない）
｝
(3) InTopTriangle(x,y)
｛     if((e0(x,y) < 0 && b0 <= 0) || (e1(x,y) < 0 && b1 <= 0) || (e2(x,y) < 0 && b2 <= 0))
return true;  //（三角形の上方にある）
else return false;  //（三角形の上方にない）
｝
(4) InBottomTriangle(x,y)
｛     if((e0(x,y) < 0 && b0 >= 0) || (e1(x,y) < 0 && b1 >= 0) || (e2(x,y) < 0 && b2 >= 0))
return true;  //（三角形の下方にある）
else return false;  //（三角形の下方にない）
｝
【００３１】
図７は、トラバース方向を選択する方法を示すフローチャートである。互いに異なるトラバース開始画素に対して、この方法はバウンディングボックスの４個のコーナーにある画素に基づいてトラバース方向を選択する。図７に示したステップＳ７０１、Ｓ７０５、Ｓ７０９及びＳ７１３は、トラバース開始画素の四つの異なるケースを表す。四つのブランチＳ７０２−Ｓ７０４、Ｓ７０６−Ｓ７０８、Ｓ７１０−Ｓ７１２及びＳ７１４−Ｓ７１６は、それぞれ、上記の四つの異なるケースに対応し、トラバース方向を得る決定をなす。
【００３２】
図８（ａ）及び（ｂ）は、図７に示した処理により得られた二つの異なるトラバース方向の例を示す図である。図８（ａ）は、図７に示したステップＳ７０１、Ｓ７０２及びＳ７０４による水平なトラバース方向を示し、一方、図８（ｂ）は、図７に示したステップＳ７０１−Ｓ７３０による垂直なトラバース方向を示す。
【００３３】
トラバース開始画素がチェックされてトラバース方向を選択した、図７に示した順序と、図８に示した実例は、全て例示である。図７に示した順序と異なる順序、及び図８に示した例と異なる例とすることも可能である。
【００３４】
この時点で、セットアップブロック１０４は、エッジ関数、トラバース開始画素及びトラバース方向を算出している。トラバースブロック１０５は、セットアップブロック１０４により準備された情報に基づいて三角形をトラバースする。
【００３５】
トラバースブロック１０５の開始画素登録ブロック３０４は、先ず、セットアップブロック１０４のトラバース開始画素及びトラバース方向選択ブロック３０３からトラバース開始画素を受け取り、そのトラバース開始画素を現在の走査開始画素として登録する。走査ブロック３０５は開始画素登録ブロック３０４から現在の走査開始画素を受け取り、セットアップブロック１０４のトラバース開始画素及びトラバース方向選択ブロック３０３からトラバース方向を受け取る。そして走査ブロック３０５は、そのトラバース方向において現在の走査開始画素から三角形の現在の行／列を走査する。そのトラバースにおいて、各行／列の走査開始画素を、極力三角形の外側の画素にアクセスしないよう、適応的に調節して、トラバース速度を向上する。
【００３６】
走査において、走査ブロック３０５は、走査された画素を描画判定ブロック３０７へ送る。描画判定ブロック３０７は、画素が三角形の内部にあるか否かを決定する。その画素の座標における三角形の３個のエッジ関数の値全てが正である場合、その画素は三角形の内部にあると決定できる。描画判定ブロック３０７は、走査ブロック３０５から受け取った現在の行／列において三角形の内部にある最初の画素を、次開始画素計算ブロック３０６へ送る。現在の行／列に三角形の内部にある画素が存在しない場合、トラバースを終了し、トラバースを終了させることを示す命令を走査ブロック３０５へ送る。
【００３７】
また、描画判定ブロック３０７は、走査ブロック３０５から受け取った各画素p(x,y)に対して、現在の行／列の走査を終了するか否かを決定する。描画判定ブロック３０７が現在の行／列の走査を終了しないと決定した場合、描画判定ブロック３０７は画素p(x,y)をパラメータ計算ブロック３０８へ送る。描画判定ブロック３０７が現在の行／列の走査を終了すると決定した場合、描画判定ブロック３０７は、現在の行／列の走査を終了させることを示す命令を走査ブロック３０５へ送る。
【００３８】
画素p(x,y)が以下の条件の一つを満たす場合、描画判定ブロック３０７は現在の行／列の走査を終了すると決定する。
I (startpos == topleft || startpos == bottomleft) && (direction == horizontal) && (InRightTriangle(x,y) == True);
II (startpos == topright || startpos == bottomright) && (direction == horizontal) && (InLeftTriangle(x,y) == True);
III (startpos == topleft || startpos == topright) && (direction == vertical) && (InBottomTriangle(x,y) == True);
IV (startpos == bottomleft || startpos == bottomright) && (direction == vertical) && (InTopTriangle(x,y) == True)
なお、変数startposは、トラバース開始画素の位置を表す。また、topleft、topright、bottomleft、bottomrightは、それぞれ、バウンディングボックスの左上、右上、左下、右下のコーナーを表す。また変数directionは、トラバース方向を表し、horizontal及びverticalは、それぞれ、水平及び垂直を表す。
【００３９】
描画判定ブロック３０７から画素を受け取る度に、次開始画素計算ブロック３０６は次の行／列の走査開始画素を計算する。次の行／列の走査開始画素は、エッジ関数の係数に基づいて適応的に決定される。すなわち、現在の行／列において三角形の内部となる最初の画素と、次の行／列において三角形の内部となる最初の画素との距離を計算することにより、次の行／列の走査開始画素が得られる。
【００４０】
図９は、次の走査画素の選択方法及びこの実施形態によるトラバース方法を簡潔に図示する、三角形の完全なトラバースを示す一例の図である。図９において、トラバース開始画素は左上の画素であり、トラバース方向は水平方向である。またトラバース開始画素は、第１の走査行における走査開始画素でもある。現在の行において三角形の内部となる最初の画素の座標を(xc,yc)とし、前の行において三角形の内部となる最初の画素の座標を(xp,yp)とすると、次の行における走査開始画素(xn,yn)は、以下のように計算される。
【数４】
2010055611.tif 000006
【００４１】
同様に、三角形及び異なるトラバース方向に対して、異なる位置における走査開始画素の組み合わせに関しても、次の行／列における走査開始画素を、エッジ関数の係数を用いることにより適応的に選択できる。
【００４２】
図１０は、次の行／列における走査開始画素の計算方法を示すフローチャートである。図示した四つのブランチＳ１００１−Ｓ１００７、Ｓ１００８−Ｓ１０１４、Ｓ１０１５−Ｓ１０２１及びＳ１０２２−Ｓ１０２７を使用して、走査開始画素とトラバース方向の四つの異なる組み合わせに対して、それぞれ、次の行／列における走査開始画素を計算する。
【００４３】
図示したように、トラバース方向が水平であれば、deltaxはxcとxp間の距離である。xc=xpであれば、deltax=0となる。そうでなければ、deltax=|xc-xp|-1となる。deltayの値は、トラバース開始画素がバウンディングボックスの上端の行にあるか下端の行にあるかに因る。トラバース開始画素が上端の行にあれば、deltay=1である。そうでなければ、deltay=-1である。
【００４４】
トラバース方向が垂直であれば、deltayはycとyp間の距離である。yc=ypであれば、deltay=0となる。そうでなければ、deltay=|yc-yp|-1となる。deltaxの値は、トラバース開始画素がバウンディングボックスの左端の列にあるか右端の列にあるかに因る。トラバース開始画素が左端の列にあれば、deltax=1である。そうでなければ、deltax=-1である。
【００４５】
図１０に示した四つのブランチの順序は単なる例示にすぎない。他の順序とすることも可能である。
【００４６】
上記の方法によれば、次開始画素計算ブロック３０６は、次の行／列における走査開始画素を計算し、その走査開始画素を開始画素登録ブロック３０４へ送る。開始画素登録ブロック３０４は、次開始画素計算ブロック３０６から受け取ったその走査開始画素を現在の走査開始画素として登録する。
【００４７】
描画判定ブロック３０７から現在の行／列の終了を示す命令を受け取ると、走査ブロック３０５は、開始画素登録ブロック３０４から以前に登録された現在の走査開始画素を取り出し、次の行／列の走査を開始する。
【００４８】
この走査処理は、トラバース処理が終わるまで繰り返される。
【００４９】
描画判定ブロック３０７から受け取った各画素p(x,y)について、パラメータ計算ブロック３０８は、色、テクスチャといったその画素のパラメータを計算し、算出されたパラメータ及び画素をフレームバッファ１０６へ送る。
【００５０】
これまで、好ましい実施形態について述べてきた。本発明を特定の実施形態において説明してきたが、本発明は、ハードウェア、ソフトウェア、ファームウェアまたはそれらの組み合わせにおいて実行でき、また本発明は、システム、サブシステム及びそのパーツまたはサブパーツに適用できる。ソフトウェアで実行される場合、この実施形態の各ブロックは、実質的に、プロセッサ上で実行されることにより、所要のタスクを達成するコードセグメントとなる。また、ハードウェアで実行される場合、この実施形態のブロックのそれぞれは、そのブロックの機能を実現する演算回路またはメモリ回路を有する。
【００５１】
以上説明した実施形態及びその変形例に関し、更に以下の付記を開示する。
（付記１）
グラフィックラスタライゼーションにおける三角形トラバース方法であって、
三角形をカバーする画素からなる最小矩形であるバウンディングボックスを生成し、
前記バウンディングボックスに基づいて前記三角形をトラバースするためのトラバース開始画素を選択し、
前記トラバース開始画素と前記三角形の位置関係に基づいてトラバース方向を選択し、
前記トラバース方向において前記トラバース開始画素から前記三角形をトラバースする、ことを含み、
前記三角形をトラバースすることは、前記トラバース開始画素及び前記トラバース方向に対する前記三角形のエッジ関数の傾きに沿って現在の走査開始画素から次の走査開始画素を計算することを含む、
三角形トラバース方法。
（付記２）
前記バウンディングボックスがクリップ操作の対象でない場合、前記トラバース開始画素は、前記バウンディングボックスの４個のコーナーの画素のうち、前記三角形の頂点が含まれるコーナーの画素の一つであり、
前記バウンディングボックスがクリップ操作の対象である場合、前記トラバース開始画素は、前記クリップ操作が行われる前において、前記三角形の頂点が含まれる前記バウンディングボックスのコーナーの一つに対応する、前記バウンディングボックスの４個のコーナーの画素のうちの一つのコーナーの画素である、付記１に記載の三角形トラバース方法。
（付記３）
前記トラバース方向を選択することは、水平方向または垂直方向のうち、前記トラバース開始画素から前記三角形の内部にある画素の方向を、前記トラバース方向とする、付記１に記載の三角形トラバース方法。
（付記４）
前記三角形をトラバースすることは、前記傾きを求めるために前記トラバース方向において現在の行または列における前記三角形の内部にある最初の画素を検出することを含む、付記１に記載の三角形トラバース方法。
（付記５）
前記三角形をトラバースすることは、現在の行において前記三角形の内部にある前記最初の画素と前に走査された行において前記三角形の内部にある前記最初の画素との距離、または、現在の列において前記三角形の内部にある前記最初の画素と前に走査された列において前記三角形の内部にある前記最初の画素との距離を用いて前記傾きを求めることにより、前記次の走査開始画素を導出する、付記４に記載の三角形トラバース方法。
（付記６）
前記三角形をトラバースすることは、現在の行または列の走査を終了するか否かを決定することをさらに含み、現在の行または列における現在の画素が前記三角形の外側にあり、かつ前記トラバース方向に沿って前の画素が前記三角形の内部にある場合に、現在の行または列の走査を終了する、付記１に記載の三角形トラバース方法。
（付記７）
前記三角形をトラバースすることは、前記トラバース方向において前記三角形の内部にある画素が存在しない場合に前記三角形のトラバースを終了することを含む、付記１に記載の三角形トラバース方法。
（付記８）
グラフィックラスタライゼーションにおける三角形トラバース装置であって、
三角形をカバーする画素からなる最小矩形であるバウンディングボックスを生成するバウンディングボックス生成ブロックと、
前記バウンディングボックスに基づいて前記三角形をトラバースするためのトラバース開始画素を選択するトラバース開始画素選択ブロックと、
前記トラバース開始画素と前記三角形の位置関係に基づいてトラバース方向を選択するトラバース方向選択ブロックと、
前記トラバース方向において前記トラバース開始画素から前記三角形をトラバースするトラバースブロックと、を有し、
前記トラバースブロックは、前記トラバース開始画素及び前記トラバース方向に対する前記三角形のエッジ関数の傾きに沿って現在の走査開始画素から次の走査開始画素を計算する手段を有する、
三角形トラバース装置。
（付記９）
前記バウンディングボックスがクリップ操作の対象でない場合、前記トラバース開始画素は、前記バウンディングボックスの４個のコーナーの画素のうち、前記三角形の頂点が含まれるコーナーの画素の一つであり、
前記バウンディングボックスがクリップ操作の対象である場合、前記トラバース開始画素は、前記クリップ操作が行われる前において、前記三角形の頂点が含まれる前記バウンディングボックスのコーナーの一つに対応する、前記バウンディングボックスの４個のコーナーの画素のうちの一つのコーナーの画素である、付記８に記載の三角形トラバース装置。
（付記１０）
前記トラバース方向選択ブロックは、水平方向または垂直方向のうち、前記トラバース開始画素から前記三角形の内部にある画素の方向を、前記トラバース方向とする、付記８に記載の三角形トラバース装置。
（付記１１）
前記トラバースブロックは、前記傾きを求めるために前記トラバース方向において現在の行または列における前記三角形の内部にある最初の画素を検出する手段を有する、付記８に記載の三角形トラバース装置。
（付記１２）
前記トラバースブロックは、現在の行において前記三角形の内部にある前記最初の画素と前に走査された行において前記三角形の内部にある前記最初の画素との距離、または、現在の列において前記三角形の内部にある前記最初の画素と前に走査された列において前記三角形の内部にある前記最初の画素との距離を用いて前記傾きを求めることにより、前記次の走査開始画素を導出する、付記１１に記載の三角形トラバース装置。
（付記１３）
前記トラバースブロックは、現在の行または列の走査を終了するか否かを決定する手段を有し、現在の行または列における現在の画素が前記三角形の外側にあり、かつ前記トラバース方向に沿って前の画素が前記三角形の内部にある場合に、現在の行または列の走査を終了する、付記８に記載の三角形トラバース装置。
（付記１４）
前記トラバースブロックは、前記トラバース方向において前記三角形の内部にある画素が存在しない場合に前記三角形のトラバースを終了する手段をさらに有する、付記８に記載の三角形トラバース装置。
【符号の説明】
【００５２】
１０１    頂点メモリ
１０２    変換ブロック
１０３    投影ブロック
１０４    セットアップブロック
１０５    トラバースブロック
１０６    フレームバッファ
１０７    ディスプレイ
３０１    エッジ関数計算ブロック
３０２    バウンディングボックス生成ブロック
３０３    トラバース開始画素及びトラバース方向選択ブロック
３０４    開始画素登録ブロック
３０５    走査ブロック
３０６    次開始画素計算ブロック
３０７    描画判定ブロック
３０８    パラメータ計算ブロック
【図１】
2010055611.tif 000007
【図２】
2010055611.tif 000008
【図３】
2010055611.tif 000009
【図５】
2010055611.tif 000010
【図７】
2010055611.tif 000011
【図１０】
2010055611.tif 000012
【図４】
2010055611.tif 000013
【図６】
2010055611.tif 000014
【図８】
2010055611.tif 000015
【図９】
2010055611.tif 000016