JP3839870B2 - 四辺形を表わす画素データを生成する装置および方法 - Google Patents
四辺形を表わす画素データを生成する装置および方法 Download PDFInfo
- Publication number
- JP3839870B2 JP3839870B2 JP14582196A JP14582196A JP3839870B2 JP 3839870 B2 JP3839870 B2 JP 3839870B2 JP 14582196 A JP14582196 A JP 14582196A JP 14582196 A JP14582196 A JP 14582196A JP 3839870 B2 JP3839870 B2 JP 3839870B2
- Authority
- JP
- Japan
- Prior art keywords
- triangle
- data
- vertex
- generating
- plane equation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/40—Filling a planar surface by adding surface attributes, e.g. colour or texture
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
- Image Processing (AREA)
- Image Analysis (AREA)
Description
【発明の属する技術分野】
本発明は、一般にディスプレイ・グラフィックスの生成に関し、特に、充填スキャン・コンバータに入力される三角形の平面方程式の生成に関する。
【0002】
【従来の技術】
多角形は、表示画面上に表面を表示するためにグラフィックスで用いられる基本プリミティブの一つである。多角形の充填(fill)される領域は、グラフィックス・ディスプレイに3次元の物体の表面をレンダリング(rendering)する際に特に役に立つ。一般に多角形は、凸状または凹状のどちらかの任意の形状をもつ、結合され、閉じられた線の連続として定義される。多角形の辺の上および中に入る表示画素をアクティブにすることによって、表示画面上で多角形を充填することができる。辺の内側の画素は、内部(interior)の画素と呼ばれる。図18は、いくつかの多角形および充填される多角形をレンダリングするためにアクティブにされる画素を示している。
【0003】
いくつかの技法を用いて、多角形を充填するためにどの画素をアクティブにするべきか決定する。これらの技法は、充填スキャン・コンバージョンといわれる。一般にこれらの技法は、画素の水平または垂直の行のいずれのスパン上の一組の辺の間で作用する。例えば図18で、それぞれの多角形についてそれぞれの水平スパンの始点および終点が陰付けされた画素によって印されている。充填スキャン・コンバータは、画素から画素へ、例えば図18のX方向へステップし、それぞれの画素についてパラメータの値を計算することによって、1つのスパン内の画素データを順に生成することができる。そして1画素下の行にY方向に下がることによって、画素を生成するための新しいスパンが選択され、新しいスパンについて画素から画素へステッピングを繰り返す。
【0004】
図18から分かるように、多角形は複雑になりえる。多くの辺をもつ多角形、内部交差(intersecting)する多角形、および凹形の多角形のような複雑な多角形については、スキャン・コンバージョンは非常に複雑になりうる。従って、三角形を充填するように充填スキャン・コンバータを最適化し、三角形の組合せとして多角形をレンダリングすることが望ましい。さらに、通常グラフィック・データベースには四辺形が存在するため、2つの三角形に分割される四辺形を支持するように充填スキャン・コンバータを最適化することが望ましい。そして三角形の充填スキャン・コンバータは、結果の三角形を両方とも充填することができる。
【0005】
図18は2次元で単一色で描かれているが、多角形は例えば赤、緑および青の色の値によって定義されるような色をもつこともできる。多角形は3次元であってもよく、したがって通常Z軸の座標として定義されるそれぞれの画素に関連する奥行き(depth)をもつ。それゆえ図18に示すそれぞれの画素は、実際上、X座標およびY座標、さらに赤、緑、青およびZ軸座標をもつことができる。
【0006】
三角形を効率的に表示するために設計されるハードウェアおよびソフトウェアは、例えば加速器のブロックと充填スキャン・コンバータのブロックというようにいくつかのブロックに分割することができる。このような配置において、加速器は三角形の頂点(V0,V1,V2)に関するデータに基づいて平面方程式を生成する。これらの平面方程式は、三角形の中のそれぞれの画素に関連するパラメータの値を一意に定義するように設計され、結果として充填スキャン・コンバータは高速でシンプルな電子機器ハードウェアとなり、加速器から供給される平面方程式を「ステッピング(stepping)する」ことによって画素を生成する。例えば加速器は加算、乗算および除算を行うことができ、充填スキャン・コンバータは加算のみ行う。
【0007】
【発明が解決しようとする課題】
四辺形を生成および充填するとき、それは2つの別々の三角形に分割することができ、それぞれの三角形に関するデータは別々に加速器に入力されて適当な平面方程式を生成することができる。しかしこの方法には、相当な量の処理資源を使用し、長々とした計算が必要となりうる。四辺形を充填するために必要な処理資源および時間を減少させることが要求されている。
【0008】
さらに充填スキャン・コンバータは、頂点の指定に関してソートされた三角形情報が与えられる場合、より効率的に設計することができる。頂点のソートは平面方程式を生成するより前に実行することができるが、その方法のために付加的な処理資源および時間が用いられる。したがって、ソートされた三角形の頂点を用いて平面方程式を生成する際に必要とされる処理資源および時間を減少させることが要求されている。
【0009】
【課題を解決するための手段】
本発明の一つの形態は、四辺形を表示する画素データを生成するコンピュータ・グラフィック・システム装置に照準されている。装置は、四辺形を定義する頂点データに応じて平面方程式データを生成する処理回路、および第1および第2の三角形の平面方程式データに応じて四辺形を表わす画素データを生成する充填スキャン・コンバータを含む。処理回路は、頂点データに応じて四辺形を第1および第2の三角形に分割する第1の手段と、第1および第2の三角形によって共有される共有データを含む第1の三角形の平面方程式データを生成する第2の手段と、第2の三角形を表す頂点データおよび共有データに応じて、共有データの少なくとも一部を2度生成することなく第2の三角形の平面方程式を生成する第3の手段を含む。共有データは、第2の手段によって第1のメモリから第2のメモリにフェッチ(fetch)される頂点データを含むことができ、第3の手段は、第1のメモリよりもアクセス時間が短い第2のメモリから頂点データの少なくとも一部に直接アクセスする手段を含むことができる。また共有データは、第1の三角形および第2の三角形の両方に共通する辺に関する辺データを含むこともできる。ある実施例で、第1の手段は、第1の頂点、第2の頂点、第3の頂点、第1の辺、第2の辺および第3の辺を含む第1の三角形を指定する手段ならびに第1の三角形の第1の頂点、第4の頂点、第1の三角形の第3の頂点、第1の三角形の第1の辺、第4の辺および第5の辺を含む第2の三角形を指定する手段を含む。
【0010】
この発明の別の形態は、充填スキャン・コンバータに供給される、四辺形を表わす平面方程式データを生成する方法に照準されている。方法は、四辺形を表す頂点データを受け取るステップと、四辺形を第1の三角形および第2の三角形に分割するステップと、共有データを含む第1の三角形の平面方程式データを生成するステップと、第1の三角形の平面方程式データを充填スキャン・コンバータに与えるステップと、共有データの少なくとも一部を使用して第2の三角形の平面方程式データを生成するステップと、第2の三角形の平面方程式データを充填スキャン・コンバータに供給するステップとを含む。
【0011】
この発明のもう一つの形態は、充填スキャン・コンバータに供給される、四辺形を表わす平面方程式のデータを生成する装置に向けられている。装置は、四辺形を表す頂点データを受け取る手段と、四辺形を第1の三角形および第2の三角形に分割する手段と、共有されたデータを含む第1の三角形の平面方程式データを生成する手段と、第1の三角形の平面方程式データを充填スキャン・コンバータに供給する手段と、共有されるデータの少なくとも一部を使用して第2の三角形の平面方程式データを生成する手段と、第2の三角形の平面方程式データを充填スキャン・コンバータに供給する手段を備える。
【0012】
【発明の実施の形態】
図1は、本発明に従って前処理を行うライン・スキャン・コンバージョンの取り込みに適したグラフィックス・システムの一つの実施例のブロック図である。図示される具体化は、基板およびチップの数、それらが区分される方法、バスの幅およびデータ転送速度に関して単なる典型であることを理解されたい。多数の他の具体化を使ってもよい。ここで図示され、説明される回路は単なる実例として与えられている。回路は、例えばSynopsysから市販されている論理統合ソフトウェアを使用する大規模なカスタム集積回路で実現されることが好ましい。論理統合ソフトウェアは、Veralogのような高級言語で論理ゲートに書き込まれる回路の説明を最適化および翻訳する。回路は、5ボルトで動作する1ミクロンのFETを生成するCMOSプロセス、3.3ボルトで動作する0.6ミクロンで引かれた(drawn)ゲート長のデバイスを生成するCMOSプロセス、またはデジタル回路を実行するに適した他のプロセスを使用して実現することができる。論理統合ソフトウェアへの入力は構造的というより機能的であるので、論理統合ソフトウェアによって生成される実際の回路は、ここで示されるものと異なってもよい。
【0013】
図示されるように、システムはフロント・エンド基板10、テクスチャ・マッピング基板12およびフレーム・バッファ基板14を含む。フロント・エンド基板は、52ビットのバス16を通してホスト・コンピュータ15に連絡している。フロント・エンド基板は、レンダリングされるプリミティブをバス16を通してホスト・コンピュータから受け取る。プリミティブは、プリミティブが三角形である場合、例えば頂点のようなプリミティブの部分に関して、x,y,zベクトル座標のデータ、R,G,B色データおよびテクスチャS,T座標によって規定される。3次元のプリミティブを表すデータは、フロント・エンド基板10によって、85ビットのバス18を通してテクスチャ・マッピング基板12およびフレーム・バッファ基板14に供給される。テクスチャ・マッピング基板は、プリミティブを表す画面表示画素を計算するために受け取ったプリミティブ・データを補間し、プリミティブのそれぞれの画素について対応する結果のテクスチャ・データを決定する。結果のテクスチャ・データは、図をわかりやすくするために図1に単一のバスとして示される55ビットのバス28を通してフレーム・バッファ基板に供給される。
【0014】
フレーム・バッファ基板14は、それぞれのプリミティブを表す表示画面上の画素を計算するためにフロント・エンド基板1Oから受け取ったプリミティブ・データを補間し、物体の色の値を決定する。フレーム・バッファ基板は、画素毎に、物体の色の値をテクスチャ・マッピング基板から供給される結果のテクスチャ・データと組み合わせ、それぞれの画素について結果の画像R,G,B値を生成する。それぞれの画素のR,G,B色制御信号がR,G,B線29を通して供給され、表示画面の画素を制御し、表示画面上にテクスチャ・マッピングされたプリミティブを表す結果の画像を表示する。
【0015】
フロント・エンド基板10、テクスチャ・マッピング基板12、およびフレーム・バッファ基板14はそれぞれパイプラインで結ばれ、複数のプリミティブについて同時に操作する。テクスチャ・マッピングおよびフレーム・バッファの基板はフロント・エンド基板から供給されるプリミティブについて操作し、一方、フロント・エンド基板は、基板12および14のパイプラインが満杯になるまで新しいプリミティブについて操作および供給を続ける。
【0016】
フロント・エンド基板10は、分配器チップ30、3つの3次元(3D)加速器チップ32A、32Bおよび32C、2次元(2D)加速器チップ34、および集線器チップ36を含む。分配器チップ30は、バス16を通してホスト・コンピュータからX,Y,Z座標および色のプリミティブ・データを受け取り、3次元のプリミティブ・データを3D加速器チップ32A、32Bおよび32Cに一様に分配する。このように3つのグループのプリミティブが同時に操作されるので、システムの帯域幅は増大する。データは、40ビットのバス38Aを通して3D加速器チップ32Aおよび32Bに供給され、40ビットのバス38Bを通してチップ32Cに供給される。バス38Aおよび38Bは、60MHzの速度でデータを転送し、2つの3D加速器チップを支持するに十分な帯域幅を与える。2Dのプリミティブ・データは、44ビットのバス40を通して40MHzの速度で2D加速器チップ34に供給される。
【0017】
それぞれの3D加速器チップは、受け取ったプリミティブを定義するx,y,z座標を対応する画面の空間座標に変換し、画面の空間座標について物体のR,G,B値およびテクスチャS,T値を決定し、プリミティブの四辺形を三角形に分解し、それぞれの三角形を定義する三角形の平面方程式を計算し、そしてR,G,B値を決定するために光源の計算を行う。またそれぞれの3D加速器チップは、複数のウィンドウが表示される場合またはプリミティブの部分が表示画面に表示される画像の量を越えてしまう場合、画像のクリッピング操作を実行して、結果の画像の正確な画面表示を保証する。3D加速器チップ32A、32Bおよび32Cのそれぞれからの出力データは、44ビットのバス42Aおよび42Bを通して60MHzの速度で集線器チップ36に供給される。2D加速器チップ34もまた、46ビットのバス44を通って45MHzの速度で集線器チップ36に出力データを供給する。集線器チップ36は、3D加速器チップ32Aないし32Cから受け取った3Dプリミティブを結合し、分配器チップ30によって分配される前のオリジナルの順序にプリミティブを並べ直し、結合されたプリミティブの出力データをバス18を通してテクスチャ・マッピングおよびフレーム・バッファの基板に供給する。
【0018】
テクスチャ・マッピング基板12は、テクスチャ・マッピング・チップ46およびキャッシュ・メモリとして配置されることが好ましいローカル・メモリ48を含む。より詳しく後述するが、キャッシュ・メモリ48は、フレーム・バッファ基板でレンダリングされるプリミティブに関連するテクスチャMIPマップ・データを格納する。テクスチャMIPマップ・データは、ホスト・コンピュータ15の主メモリ17からバス40を通り、2D加速器チップ34、そして24ビットのバス24を通してダウンロードされる。
【0019】
テクスチャ・マッピング・チップ46は、表示画面上にレンダリングされるプリミティブを表すプリミティブ・データを、バス18を介して連続して受け取る。上述のように3D加速器チップ32AないしCから供給されるプリミティブは、点、線および三角形を含む。テクスチャ・マッピング基板は、点および線のテクスチャ・マッピングを実行せず、三角形のプリミティブに関してのみ操作する。三角形のプリミティブを表すデータは、少なくとも一つの頂点に関する物体のx,y,z画素座標、少なくとも一つの頂点の物体の色のRGB値、少なくとも一つの頂点に対応するテクスチャ・マップの部分のS,T座標、および三角形の平面方程式を含む。テクスチャ・マッピング・チップ46は、物体の画素のz座標および物体の色のR,G,B値を無視する。チップ46は、x,y画素座標を補間し、プリミティブを表すそれぞれのx,y画面表示画素に対応するSおよびT座標を補間する。それぞれの画素について、テクスチャ・マッピング・チップは、キャッシュ・メモリから対応するテクスチャMIPマップの部分にアクセスし、複数のテクセル(texel)の加重平均を含みうる画素について結果のテクスチャ・データを計算する。
【0020】
一つの典型的な実施例において、キャッシュは64ブロックの256x256テクセルを格納する。先の技術システムのテクスチャ・マッピング・ハードウェアに用いられているローカル・メモリとは異なり、本発明のキャッシュ・メモリは、大きいテクスチャのような、レンダリングされるプリミティブにマップするテクスチャMIPマップの連続全体を格納しなくてもよい。むしろキャッシュ・メモリは、任意のある時間に、現在レンダリングしているプリミティブに実際に使用されるMIPマップの連続の個別の部分のみ格納する。従って多くの応用について、レンダリングされる画像の完全なテクスチャ・データの1部分だけが、任意の時間にキャッシュ・メモリに格納される。
【0021】
それぞれのテクスチャの完全なMIPマップの連続は、ホスト・コンピュータ15の主メモリ17に配置および格納される。レンダリングされるプリミティブのそれぞれの画素について、テクスチャ・マッピング・チップ46はキャッシュ・メモリ48のディレクトリにアクセスし、テクスチャMIPマップの対応する1つまたは複数のテクセルがキャッシュに存在するかどうか判断する。アクセスした時点で対応するテクセルがキャッシュ・メモリに格納されていれば、キャッシュのヒットが生じ、テクスチャ・マッピング・チップ46によってテクセルがキャッシュからフェッチおよび操作され、フレーム・バッファ基板に渡される結果のテクスチャ・データを計算する。しかしテクスチャ・マッピング・チップ46がアクセスする時にプリミティブの画素についてキャッシュ・メモリの中に対応するテクセルが格納されていない場合、キャッシュ・ミスが生じる。キャッシュ・ミスが生じたとき、プリミティブをレンダリングするために必要なテクスチャMIPマップ・データの部分がホスト・コンピュータ15の主メモリ17からキャッシュ・メモリ48にダウンロードされ、場合によっては前に格納されていた一部のデータを置き換える。しかし、レンダリングされるあらゆるプリミティブについてMIPマップの連続の全体をダウンロードする従来のテクスチャ・マッピング・システムとは異なって、本発明は、プリミティブを現在レンダリングするために実際に必要なMIPマップの連続の部分、または現在レンダリングされたプリミティブの部分だけをダウンロードする。より詳細に後述するが、キャッシュ・ミスが起きたときは、テクスチャ・マッピング・チップ46によって割込み制御信号が発信され、ホスト・コンピュータ15のテクスチャ割込みマネージャーを起動させる。割込み制御信号はライン94を通して分配器チップ30に供給され、そしてライン95を通してホスト・コンピュータに割込み信号を供給する。
【0022】
要求されるテクスチャ・データは、ホスト・コンピュータによってその主メモリから読み出され、3Dプリミティブをレンダリングするフロント・エンド基板を通るテクスチャ・マッピング・チップへのパイプラインを迂回して、バス24を通してテクスチャ・マッピング基板48にダウンロードされる。このように、キャッシュ・ミスの割込みが生じたとき、フロント・エンド基板は3Dプリミティブを操作して、バス18を通してテクスチャ・マッピング・チップおよびフレーム・バッファ基板に出力プリミティブ・データを供給し続ける一方で、キャッシュ・ミスを起こしたプリミティブに関連するテクスチャ・データが主メモリ17からダウンロードされる。従来のテクスチャ・マッピング・システムとは対照的に、テクスチャ・マッピング・ハードウェアにテクスチャ・データをダウンロードするのに、3Dプリミティブのパイプラインをフラッシュ(flush)する必要がなく、従ってシステムの帯域幅と性能を増加させる。それぞれの画素に関する結果のテクスチャ・データは、テクスチャ・マッピング・チップ46によって5つのバス28を通してフレーム・バッファ基板に供給される。5つのバス28はそれぞれフレーム・バッファ基板に備えられた5つのフレーム・バッファ制御器チップ50A、50B、50C、50Dおよび50Eに結合され、結果のテクスチャ・データをフレーム・バッファ制御器チップに平行に供給する。フレーム・バッファ制御器チップ50AないしEはそれぞれ、関連するVRAM(ビデオ・ランダム・アクセス・メモリ)チップ51AないしEに結合される。フレーム・バッファ基板はさらに、4つのビデオ形式チップ52A、52B、52Cおよび52DならびにRAM DAC(ランダム・アクセス・メモリ・デジタル-アナログ・コンバータ)54を含む。フレーム・バッファ制御器チップは、表示画面の別々の、重複しないセグメントを制御する。それぞれのフレーム・バッファ制御器チップは、フロント・エンド基板からバス18を通してプリミティブ・データを受け取り、テクスチャ・マッピング基板からバス28を通して結果のテクスチャ・マッピング・データを受け取る。フレーム・バッファ制御器チップはプリミティブ・データを補間して、プリミティブを表すそれぞれのセグメントの画面表示の画素の座標、およびそれぞれの画素の座標について対応する物体R,G,B色の値を計算する。テクスチャ・マッピング基板から結果のテクスチャ・データが供給されるプリミティブ(すなわち三角形)について、フレーム・バッファ制御器チップは画素ごとに物体の色の値と結果のテクスチャ・データを結合して、表示画面上に表示されるそれぞれの画素の最終的なR,G,B値を生成する。
【0023】
物体およびテクスチャの色の値を結合する方法は、多くの異なった方法で制御することができる。例えば置き換えモードでは、画素をレンダリングする際にテクスチャの色の値だけが使用されるように、物体の色の値をテクスチャの色の値と簡単に置き換えることができる。代替として変調モードでは、物体およびテクスチャの色の値を一緒に倍増させて、画素の最終的なR,G,B値を生成することができる。さらに、対応するテクスチャの色の値を物体の色の値と結合する方法を規定する比率を明示する色制御ワードを、それぞれのテクセルについて格納することができる。それぞれの画素に対応する結果のテクセル・データについて結果の色制御ワードを決定し、それをフレーム・バッファ制御器チップにバス28を通して供給することができ、その結果、制御器チップは対応する結果の制御ワードによって示される比率を使用してそれぞれの画素について最終的なR,G,B値を決定することができる。
【0024】
フレーム・バッファ制御器チップ50AないしEによって生成された、それぞれの画素のR,G,B値を含む結果の画像ビデオ・データは、対応するVRAMチップ51AないしEに格納される。VRAMチップ51AないしEのそれぞれのグループは8つのVRAMチップを含み、従って、40のVRAMチップがフレーム・バッファ基板上に位置する。それぞれのビデオ形式チップ52AないしDはVRAMチップの異なるセットに接続され、そこからデータを受け取る。ビデオ・データはVRAMチップから連続的にシフトされ、64ビットのバス58A、58B、58Cおよび58Dを通って33MHzの速度で4つのビデオ形式チップ52A、52B、52Cおよび52Dにそれぞれ供給される。ビデオ形式チップは、RAMDACによって処理できるようにビデオ・データをフォーマットし、フォーマットされたデータを32ビットのバス60A、60B、60Cおよび60Dを通して33MHzの速度でRAMDAC54に供給する。それからRAMDAC54は、デジタルの色データをアナログのR,G,B色制御信号に変換し、それぞれの画素のR,G,B制御信号を、R,G,B制御ライン29に沿って画面ディスプレイ(図示しない)に供給する。
【0025】
本発明のある実施例では、テクスチャ・マッピング基板12およびフレーム・バッファ基板14上のハードウェアが複製されるため、あるプリミティブをレンダリングするタスクを複数のプリミティブに関して平行して実行することができ、結果としてシステムの帯域幅が増える。本発明のこのような代替実施例が図2に示されており、複製されたハードウェアを有する本発明のコンピュータ・グラフィックス・システムのブロック図を示している。図2のシステムは、4つの3D加速器チップ32A、32B、32Cおよび32Dと、キャッシュ・メモリ48Aおよび48Bにそれぞれ関連する2つのテクスチャ・マッピング・チップ46Aおよび46Bと、VRAMチップのグループにそれぞれ関連する10のフレーム・バッファ・チップ50Aないし50Jを含む。図2のシステムの動作は、上述された図1のシステムの動作と同様である。図2の実施例におけるハードウェアの複製は、あるプリミティブをレンダリングする操作を複数のプリミティブについて平行して実行することができるので、システムの帯域幅の増加を可能にする。
【0026】
加速器チップ32A、32Bおよび32Cを表わす簡略されたブロック図が、図3に示されている。ホスト・コンピュータ15からのプリミティブ・データは入力FIFO70を通って、頂点RAM(バッファ0)71および頂点RAM(バッファ0)72を含む二重バッファの頂点RAMに供給される。加速器はパイプライン構成において2つの個別のプロセッサを含む。左のスタック78は、クリップ・コード・ロジック82、レジスタ・ファイル73、マルチプレクサ74、浮動小数点ALU75および浮動小数点乗算器76を含む。左のスタック78の動作は、アドレス解読ロジック、変換エンジンおよび分解エンジンを含む左のスタック制御ユニット77によって制御される。左のスタック78からの結果は、プリミティブRAM(バッファ0)80およびプリミティブRAM(バッファ1)81を含む二重バッファのプリミティブRAMを通って右のスタック79に供給される。右のスタックは、色クランパ/比較器85、レジスタ・ファイル180、マルチプレクサ182、浮動小数点ALU184、浮動小数点乗算器186および浮動小数点除算/平方根ユニット188を含む。右のスタック79からの結果は、出力FIFO91を通ってテクスチャ・マッピング基板12およびフレーム・バッファ基板14(図1)に供給される。右のスタック79の動作は、右のスタック制御ユニット83によって制御される。右のスタックはライティング(lighting)、クリッピングおよび平面方程式の計算を実行する。クリッピングおよびライティングのパラメータは、ホスト・コンピュータ15によってクリッピング/ライティングRAM84に供給される。
【0027】
加速器は、変換、四辺形の分解、三角形およびベクトルに関する部分的な勾配計算、ライティング(またはシェーディング(shading))、クリッピング、およびランダムに向きを定められ、定義された四辺形(クワッド)、三角形およびベクトルの平面方程式(または勾配)の計算を実行する。出力は、画素データにレンダリングするためにフレーム・バッファ基板14のスキャン・コンバータに供給され、また画素ごとのテクスチャの色の値を生成するためにテクスチャ・マッピング基板12に供給される。
【0028】
図3の例では、サイズおよびコストを制限するため、右のスタック79だけが除算器を含んでいる。右のスタックは除算器を含み、左のスタックは除算器を含まないので、左のスタックが変換、部分的な勾配計算、クリップ検査、分解およびライティングのための前計算を実行して、加速器の機能を区分する。右のスタックは、ライティング、クリッピングおよび平面方程式の計算を実行する。根本的な操作の流れは、プリミティブ・データがホスト・コンピュータから入力FIFO70に入力することである。プリミティブ・データは頂点RAMバッファ71および72のうちの一方に入る。そして左のスタック78は、変換、分解および部分的な勾配計算を実行し、結果をプリミティブRAMバッファ80および81のうちの一方に置く。左のスタックが1つのプリミティブに関してその操作を完了すると、右のスタック78にそのプリミティブについて操作を開始するように通知する。そして左のスタックは、次のプリミティブに関して操作を始めることができる。同時に右のスタックは、プリミティブRAMバッファにあるプリミティブに関してライティング、(必要であれば)クリッピング、および平面方程式の計算を行う。
【0029】
代替の実施例では、左と右のスタックが共に、除算器を含む同一のハードウェアを含む。この構成では、それぞれのスタックが異なるプリミティブに同じ操作を実行するように機能を区分することができる。
【0030】
図4は、平面方程式の生成を実行する典型的な回路素子のブロック図である。ALU(算術論理ユニット)184、乗算器186および除算器188は、操作上、マルチプレクサ/データ・フォーマッタ182を通してレジスタ・ファイル180およびRAM(ランダム・アクセス・メモリ)196に接続される。図4に示されるような一つの実施例において、RAM196は2つのRAMセグメント、RAM196AおよびRAM196Bから構成される。RAM196Aは図3の二重バッファのプリミティブRAM80および81に対応し、RAM196Bは図3のクリッピング/ライティングRAM84に対応する。好ましい実施例では、ALU184、乗算器186および除算器188はすべて浮動小数点回路であるが、発明の利点を実現するために必ずしも必要ではない。ALU184、乗算器186および除算器/平方根計算機188の組み合わせを、処理ユニット185と呼ぶことができる。RAM196は、三角形および四辺形に関する頂点データを格納する。ALU184は加算および減算のような数値演算を実行し、乗算器186および除算器188はそれぞれ乗算および除算を実行する。レジスタ・ファイル180およびマルチプレクサ/データ・フォーマッタ182は記憶域およびデータ・ルーチングを提供し、一般にデータ・フロー回路181と呼ぶことができる。入力は、LS_leftバス183およびLS_rightバス189で受け取ることができる。出力はLS_OUTバス187上に供給することができ、それは充填スキャン・ステッパがステッピングに使用する情報を受け取ることができるFIFOに接続されていることが好ましい。図3の右のスタック制御器83の一部として実行されうる状態(state)機械190は、図4の他の素子を制御して、より詳しく後述するように平面方程式を生成する。
【0031】
図4でRAM196は、図1のホスト・コンピュータ15および上流の処理回路から、四辺形のデータ定義(典型的には頂点)を受け取る。図1で示したシステムに関して、好ましい実施例において図4の回路素子は3D加速器チップ32AないしCのそれぞれの中に属している。RAM196は、変換および辺の勾配計算を行う加速器の中の上流回路からデータを受け取る。上流回路によってRAM196に書き込まれたデータは、後述するように平面方程式の計算および頂点のソーティングを行う図4の回路によってアクセスされる。RAM196は高速に操作するために二重バッファであることが好ましい。
【0032】
一般に、三角形に基づく充填スキャン・コンバータをもつ3Dコンピュータ・グラフィックス・システムは、外部ソースから四辺形の定義を受け取り、この四辺形の定義を第1および第2の三角形の定義に分割し、これらの定義を平面方程式ジェネレータの入力に与える。それからシステムは、第1の三角形について平面方程式を生成し、充填スキャン・コンバータにこれらの平面方程式を与える。図1の中で、充填スキャン・コンバータはフレーム・バッファ基板14内に存在する。充填スキャン・コンバータは、平面方程式に基づくそれぞれの画素のそれぞれのパラメータの値を決定することによって、充填された三角形をレンダリングする。続いてシステムは、第2の三角形について平面方程式を生成し、それらを充填スキャン・コンバータに供給することができる。
【0033】
発明の一つの見地によれば、グラフィックス・システムは四辺形を2つの三角形に分割するため、第1の三角形の平面方程式の生成による結果を使用することにより、第2の三角形の平面方程式をより効率的に生成することができる。発明のこの見地を分かりやすくするために、平面方程式、および平面方程式で用いられる値の微分によって充填スキャン・コンバータの機能を述べる。
【0034】
図5を参照すると、三角形7は一連のスパン8Aないし8Nに分解することができる。それぞれのスパンは、充填される三角形7の中の1行の画素を表している。そして充填スキャン・コンバータは、これらのスパンに沿ってステップし、三角形の中のすべての画素についてパラメータのそれぞれの値を決定することによって、画素データを生成する。これを行うために、充填スキャン・コンバータはそれぞれのスパンについて、スパンの位置Yと、スパンの始点および終点のX座標と、赤、緑、青およびZの始点値と、勾配(dz/dx、dred/dx、dgreen/dxおよびdblue/dx)という情報を与えられる。
【0035】
それぞれの頂点(V0,V1,V2)のパラメータを示す値の間の補間を行うことによって、それぞれのパラメータの始点値がそれぞれのスパンについて決定される。始点値および表示パラメータ(赤、緑、青または奥行きを含む)の勾配(dp/dx)が分かると、連続した画素のパラメータは以下の方程式で補間される。
【0036】
【数1】
p1 = p0+dp/dx
【0037】
上記の方程式で、p1は次の画素の1つのパラメータであり、p0は現在の画素の1つのパラメータであり、dp/dxはこのパラメータの偏導関数である。例えばパラメータが赤の場合、次の画素(p1)の赤の強度は、X軸上の連続する画素の間で赤の強度が変化する量(dp/dx)に、現在の画素(p0)の赤の強度を加えることによって決定される。
【0038】
充填スキャン・コンバータは、次のスパン8Bのパラメータの始点値を決定するために、三角形の辺に沿ってそれぞれのパラメータについて同様の補間を行う。これらのパラメータpはそれぞれXおよびYの線形関数であるから、三角形の任意の点のパラメータの値を以下の形式の平面方程式として表すことができる。
【0039】
【数2】
p = ax + by + c
【0040】
上記の方程式で、pは赤、緑、青またはz座標のいずれかである。上記のような平面方程式は、Computer Graphics, Principles and Practice (Foley et al, Addison Wesley, 1990)の中でより詳しく説明されている。具体的には、「a」、「b」および「c」は、それぞれユニークなxy位置のpの値を定義する定数である。ここで、「平面方程式の生成」とはこれらの定数の値を生成することに言及し、また以下で述べるが、代替の定数の値の決定もまた平面方程式を説明する。
【0041】
第1または開始のスパン8Aの第1の画素の値p0は、平面方程式ジェネレータによって与えられる。充填スキャン・コンバータは、説明のために最小のYスパンとするこの開始スパンに基づいて、他のスパン8Bないし8Nの始点のパラメータ値を計算することができる。慣例によって、表示画面上で、Xは左から右に増加し、Yは上から下に増加する。充填スキャン・コンバータは、辺に沿ってY方向にステッピングするために以下の方程式を用いることができる。辺は、x=edge_slope*y+b(ここでedge_slope=dx/dy(Yに関するXの変化))によって表すことができる。
【0042】
【数3】
p0 = ax0 + by0 +c
p1 = ax1 + by1 +c
【0043】
ここで、p0は辺を表す一つの画素のあるパラメータ値であり、p1は次のスパンの始点の画素を表す画素の同じパラメータの値である。また(x0, y0)および(x1, y1)は、辺上の連続する点を定義する。しかし、x1=x0+dx、および辺に沿ったYのステップに関してy1=y0+1であるので、以下の方程式が成り立つ。
【0044】
【数4】
【0045】
上記の方程式で、「a」の値は、三角形全体に関するの定数である。一定のdyの一般的な線において、dxの値は定数であるが典型的には整数でない。しかし画素は離散的な位置にあるので、充填スキャン・コンバータは整数のX値にそれぞれの画素を当てはめ、つまりdxを整数値Δxに置き換えることができる。整数値Δxは実際の線のdxと選ばれた画素との間で誤差が増えるに従って変化する。しかし選ばれた整数Δxは常に、切り捨てのedge_slopeまたは切り上げのedge_slopeのどちらかである。従って上記の方程式は次のようになる。
【0046】
【数5】
p1 = p0 + b + 切り捨て(edge_slope) + 調整
【0047】
切り捨て(A)とは、最も近い整数に切り捨てされた「A」値をいう。[b+切り捨て(edge_slope)]の項は、前もって計算された定数であり、
【0048】
【数6】
調整 = a [(絶対値(x1 - x0) > 絶対値(edge_slope)(Δxが切り上げのedge_slope)の場合]
調整 = 0 [絶対値(x1 - x0) =< 絶対値(edge_slope)(Δxが切り捨てのedge_slope)の場合]
【0049】
p(I)がスパン8上のx=Iのパラメータpの値である場合、画素p(I)を決定するために次式が与えられる。
【数7】
p(I)=p(I- 1) + b + [切り捨て(edge_slope))] + 調整
調整 = a [絶対値(x(I) - x(I-1)) > 絶対値(edge_slope)の場合]
調整 = 0 [絶対値(x(I) - x(I-1)) =< 絶対値(edge_slope)の場合]
【0050】
edge_slopeがX(I-1)に加えられてX(I)になるとき、少数位置からの桁上げ(carry)があるときに限ってΔxは切り上げたedge_slopeと等しくなることに留意されたい。上記の方程式は、如何なる乗算の実行も必要としない。こうしてスパン8Aの始点の画素が与えられ、スパン8Aの初期パラメータが与えられると、次のスパン8Bの第1の画素の始点パラメータは単純な加算機および計数器を用いて生成することができるので、充填スキャン・コンバータの構造が単純化される。
【0051】
スパン8Aないし8Nのすべてのスパンは、典型的にXスパンとして生成されるので、三角形の辺は典型的にY方向にステップされる。図6aおよび図6bは、充填スキャン・コンバータが充填する三角形のタイプIおよびタイプIIをそれぞれ示している。この指定に関して、タイプIの三角形9は、三角形9の中でY方向に最も長い左側の1辺を含み、タイプIIの三角形10は、三角形10の中でY方向に最も長い右側の1辺を含む。この指定に関して、充填スキャン・コンバータを辺1として識別される辺から常にステップするように設計することができ、その結果充填スキャン・コンバータの構造を単純化することができる。さらに、充填スキャン・コンバータを三角形の上から下に(Yを増加させて)ステップするように設計することができ、その結果また充填スキャン・コンバータの構造を単純化することができる。最長の辺を含む三角形のタイプに依存して、スパンは左から右(図6aのタイプIの三角形9)または右から左(図6bのタイプIIの三角形10)のどちらかの向きに補間される。完全に水平な1辺をもつ三角形は、どちらのタイプとしても扱うことができる。
【0052】
図7を参照して、充填スキャン・コンバータはx'0、y0およびm2として示される値を使って図示された三角形を充填する。この例では、x'0は第1のスパンのY値と交差する辺1上の点のX座標値であり、整数である必要はない。値y0は、第1のスパンのY座標であり、整数である。値m2は、辺1の勾配(yの変化で割ったxの変化)である。始点の画素のX値の選択は、X方向にステップする次のX値に基づく。ステップするX方向は、m2の符号によって決定することができる。スパンの終点を決定するために、対向する辺(辺2または辺3のいずれも)もまた同様の方法でステップされる。
【0053】
以上のことをまとめてみると、充填スキャン・コンバータは以下の値を使って、平面方程式の一つの変形を表す。
【0054】
1.平面方程式の一般的な形式からのそれぞれのパラメータの「a」値。この値はdp/dxであり、X方向に関するパラメータ「p」の導関数に等しい。dP_dX(ここでP=[R, G, B, Z])と表す。
【0055】
2.平面方程式の一般的な形式からのそれぞれのパラメータの「b」値。この値はdp/dyであり、Y方向に関するパラメータ「p」の導関数に等しい。この値は充填スキャン・コンバータに渡される前に、「a」が上記の通りの場合、[切り捨て(edge1_slope)]の値と結合される。「切り捨て(edge1_slope)」は辺1の勾配dx/dyの整数部分である。このように、(b+切り捨て(edge1_slope))の量が使用される。この値はdP_dE(ここでP=[R, G, B, Z])と表す。
【0056】
3.p0(生成される第1の画素)のパラメータの始点値。これらはP_Start(ここでP=[R, G, B, Z])と表す。
【0057】
さらに、充填スキャン・コンバータは以下のX,Y辺情報を使用して、三角形の辺をステップし、三角形のスパンを定義する。
【0058】
4.三角形の全ての3辺の勾配dx/dy。これらはedgeN_slope(ここでN=[1, 2, 3])と表す。
【0059】
5.辺1の始点および終点のY値。充填スキャン・コンバータはこれらの値を丸めるので、辺1の始点と終点のY値は、頂点0と頂点2の実際のy軸の値と等しい。図6aおよび図6bに示されるように、辺1が常に(Yに関して)長い辺になるように、頂点が典型的にソートされる。これらを、edge1_y_startおよびedge1_y_stopと表す。
【0060】
6.辺3の始点のY値。この値は特定のY交差に合わせて調整する必要はない。充填スキャン・コンバータは、典型的にこの値を内部に(internally)切り詰める(truncate)。最初に辺1および辺2がスパンを定義したあとに、この値が使用される。しかし、Yスパンがedge3_y_startより大きいかまたは等しくなると、辺1および辺3がスパンを定義する。
【0061】
7.それぞれの辺の始点のX値。その辺の整数の始点のY値に合わせて調整される。(X値自体は、偶然を除いて通常整数ではない。)これらは、edgeN_x_start(ここでN=[1,2,3])と表す。
【0062】
8.三角形が図6aおよび図6bに示されるようなタイプIの三角形であるかまたはタイプIIの三角形であるかを指示するフラグ(X_increment)。図6aに示されるタイプIの三角形に関して、辺1と辺2または辺1と辺3の間のすべてのスパンは、X方向で増加する。図6bに示されるタイプIIの三角形に関して、辺1と辺2または辺1と辺3の間のすべてのスパンは、X方向で減少する。
【0063】
三角形の3つの頂点から平面方程式を生成するために、すべての3つの頂点が形式(X,Y, Z, 赤、緑、青)の座標を持つと仮定することができる。言い換えると、それらはすべて、XおよびY座標とともに奥行きおよび色の情報を持つ。ここで示された概念はすべて、頂点がXおよびY座標のみ、または上記のパラメータの任意の組み合わせをもつ例についても等しく適用することができる。
【0064】
上述したように、平面方程式ジェネレータは、四辺形が2つの三角形に分割された後の三角形の定義を受け取り、これらの三角形の定義に基づいて平面方程式を生成することができる。これは、図8で6つのステップ120、122、124、126、128、130に分割されたプロセスに従って実行される。これらのステップの順序は、図8に示される順序で実行される必要はなく、ある範囲で同時にまたは平行に実行されることができる。ここで、これらのステップについて詳細に述べる。説明では、頂点はすでにv0.y<=v1.y<v2.yというようにソートされていると仮定する。言い換えると、頂点V0のY軸の値は、頂点V1のY軸の値よりも小さいかあるいは等しく、また図6aおよび図6bに示すように頂点V2のY軸の値よりも小さい。
【0065】
平面方程式ジェネレータは、最初に辺のデルタを計算する(ステップ120)。1つのパラメータの辺のデルタは、そのパラメータがある辺に沿って変化する量である。Z軸(奥行き)および色のパラメータについては2つの辺のデルタのみ必要とされる。なぜなら、偏導関数を決定するにはこのような2つの値だけで十分だからである。また以下の方程式で示されるように、辺のデルタは1方向に関してそれぞれに定義されるため、三角形のまわりで一貫する方向を持つ。これは四辺形を分解するのに有用である。しかし、平面方程式を生成するために、一般に外積が2辺の間で決定され、2辺の両方に隣接する頂点が固定される。実例のため、固定される頂点は、ここで頂点V0として示す。しかしその他のどの頂点も外積の固定される頂点として選ぶことができ、その場合、以下の方程式は異なる形式で表される。以下の方程式で、変数「n」は変数が一貫した辺方向に関する正規化座標であることをが示し、「mn」は変数が一貫した辺方向に関する正規化座標の負であることを示す。例えば、nx1は頂点0から頂点1(辺2)へのX軸の正規化された変化である。また、mnx2はが辺1についてX軸に沿った正規化の変化の負であり、辺1のdxと呼ばれる。以下に示すように、mnx2は、頂点0(v0.x)のX値から頂点2(v2.x)のX値を引いた差に等しい。辺の指定に関しては、図6a、図6bまたは図7を参照されたい。最後に、dxe3(辺3のdx)は、辺3すなわち頂点V2から頂点V1へのX軸に沿ったX軸の変化である。同様の変数が、他のパラメータについても使用される。
【0066】
【数8】
mnx2 = v0.x - v2.x
nx1 = v1.x - v0.x
dxe3 = v2.x - v1.x
mny2 = v0.y - v2.y
ny1 = v1.y - v0.y
dye3 = v2.y - v1.y
mnz2 = v0.z - v2.z
nz1 = v1.z - v0.z
mnred2 = v0.red - v2.red
nred1 = v1.red - v0.red
mngreen2 = v0.green - v2.green
ngreen1 = v1.green - v0.green
mnblue2 = v0.blue - v2.blue
nblue1 = v1.blue - v0.blue
【0067】
それから平面方程式ジェネレータは、XおよびYに関して辺の勾配を計算する(ステップ122)。上記で計算されたいくつかの値を用いて、例えば辺1の勾配(edge1_slope)は辺1のYの変化(上記mny2)で割った辺1のXの変化(上記mnx2)に等しく、他の辺についても同様の計算が行われる。
【0068】
【数9】
edge1_slope = mnx2/mny2
edge2_slope = nx1/ny1
edge3_slope = dxe3/dye3
【0069】
そして平面方程式ジェネレータは、辺の始点/終点のY値を初期化する(ステップ124)。これらは、辺1の始点のY値(edge1_y_start)、辺1の終点のY値(edge1_y_stop)、および辺3の始点のY値(edge3_y_start)を含む。これらは調整された2次的な画素ではないので、値は必ずしも整数ではなく、頂点のY軸値から直接決定することができる。
【0070】
【数10】
edge1_y_start = v0.y
edge1_y_stop = v2.y
edge3_y_start = v1.y
【0071】
次に、平面方程式ジェネレータは、最も近い頂点(図7の頂点V0)から第1のYスパン交点まで辺(図7の辺1)に沿って調整した、辺の始点のXを計算する(ステップ126)。これらの値(edge1_x_start、edge2_y_startおよびedge3_y_start)を生成するために、最初に2つの端数が決定される。端数frac_y0は、頂点V0からY軸に沿って次に大きい整数Y(すなわち第1のYスパン)までの量であり、frac_y1は頂点V1のY値と次に大きい整数Yとの間の差である。それぞれの始点Xは、以下の通り、辺の勾配の一つと端数の一つの積に頂点の一つのX値を加えることによって決定することができる。
【0072】
【数11】
frac_y0 = 切り上げ(v0.y) - v0.y
frac_y1 = 切り上げ(v1.y) - v1.y
edge1_x_start = v0.x + edge1_slope*frac_y0
edge2_x_start = v0.x + edge2_slope*frac_y0
edge3_x_start = v1.x + edge3_slope*frac_y1
【0073】
好ましい実施例で、切り上げ操作は、通常最も近くにある最も大きい整数に丸めることである。例えば(-1.3)は(-1.0)に丸められる。同様に切り捨ては、好ましくは通常次に小さい整数に丸めることである。そして平面方程式ジェネレータは、Zおよび色ならびに三角形のタイプ(IまたはII)に関して偏導関数を計算する(ステップ128)。最初に、三角形がタイプIまたはタイプIIのどちらであるか示す、偏導関数の分母(one_over_cd)を決定する。偏導関数の計算はすべて頂点0から頂点2および頂点0から頂点1の2つのベクトルの外積に基づいている。しかし、1つの三角形には1つの平面だけが定義されうるので、いかなる平面についてもその平面の法線は1つしか存在せず(符号および大きさは無視する)、従って外積はどの頂点(0,1または2)に基づいてもよい。
【0074】
【数12】
【0075】
この中で「truncate」操作とは、0値により近い次の整数に丸めることをいう。次に平面方程式ジェネレータは、頂点から第1の画素まで調整した、Zおよび色の始点値を計算する(ステップ130)。
【0076】
【数13】
【0077】
one_over_cdの符号は、外積が面(page)の外または中のどちらを指しているのか決定する。このように、この符号は三角形がタイプIまたはタイプIIのどちらの三角形であるか決定するために使用することができる。
【0078】
始点/終点の値のうちY以外はすべて、充填スキャン・コンバータによる使用のために頂点から離れて調整される。edgeN_x_startは、頂点xから、辺と頂点の下の第1のスパンとの交点に調整される。Z、赤、緑、青の始点はすべて、充填スキャン・コンバータによって頂点V0からレンダリングされる第1の画素に調整される。充填スキャン・コンバータによって計算される最初の画素は、図7に示されるように、V0のすぐ下のスパンの左端にある1画素であり、辺1の上またはその内側にある。
【0079】
上述したように、四辺形は2つの個々の三角形に分割することができ、それぞれの三角形は適当な平面方程式を生成する平面方程式ジェネレータに個別に入力される。図9aは2つの三角形に分割できる四辺形を示し、図9bは2つの三角形に分割できる凹形四辺形を示す。図9aおよび図9bから分かるように、結果は1つの共有される辺をもつ2つの三角形である。
【0080】
発明の一つの見地によれば、共有される辺および2つの共有される頂点は、詳しくは第2の三角形に関して上述の平面方程式の計算の一部を省くために利用される。第1の三角形ついて平面方程式が生成される一方で、第2の三角形について一部の計算を始めることによって、付加的なパフォーマンスを得ることができる。
【0081】
図10aは、図9aに示される四辺形の辺および頂点について命名規則を示し、図10bは、図9bに示される四辺形の辺および頂点の命名規則を示す。例えば図10aにおいて、第1の三角形101は、3つの頂点V1.0、V1.1およびV1.2、ならびに辺1.1、辺1.2および辺1.3をもつ。第2の三角形102は、頂点V2.0、V2.1およびV2.2、ならびに辺2.1、辺2.2および辺2.3をもつ。これらの図で、最初の数字は三角形を識別し、2番目の数字は三角形の頂点または辺を表す。例えば、V2.1は第2の三角形102の頂点1である。これらの命名規則は、同一の辺1(三角形102の辺1.1および三角形101の辺2.1)および同一の頂点0(V1.0およびV2.0)および頂点2(V1.2およびV2.2)を共有する、2つの三角形の生成を容易にする。同様の共有が、図10Bの第1の三角形103と第2の三角形104の間にも存在する。
【0082】
辺1は四辺形の2つの三角形の間で共有されているので、第2の三角形の平面方程式の生成は、第1の三角形の平面方程式による結果を用いて実行することができ、その結果処理効率が改善される。例えば、変数mnx2は辺1に関するX軸の正規化された変化であり、辺1のdxと呼ぶ。mnx2は図10aの三角形101についてすでに計算されており、指定によって三角形101および三角形102は辺1を同一にするので、mnx2は三角形102に関して再度計算する必要がない。如何に処理効率を改善することができるかという方法について、より詳細に以下で説明する。
【0083】
再び図4を参照して、レジスタ180は、RAM196よりも速く、頂点データのようなデータについてALU184、乗算器186および除算器188にアクセスする。従って、RAM196に代わってレジスタ180からパラメータをアクセスできれば、動作はより短い時間で実行される。発明の一つの実施例では計算を実行する前に、通常、パラメータがRAM196からフェッチされ、レジスタ180に入れられる。そしてレジスタ180から同じパラメータが直接アクセスされる場合、アクセス時間が減少する。しかし第2の三角形の平面方程式を生成するとき、四辺形の2つの三角形に共有される辺および共有される頂点に関連する任意のデータおよびその他の中間のパラメータに関して、RAM196からレジスタ180へのフェッチを省くことができる。この説明の中で「フェッチ」という語は、RAM196からレジスタ・ファイル180へ数値を移す操作を説明するために用いられる。
【0084】
第2の三角形に関して省略することができるRAM196からレジスタ180へのフェッチは、v0.x、v0.y、v0.z、v2.x、v2.y、v2.z、mnx2およびmny2を含む。なぜならこれらの値は、第1の三角形について実行された計算の結果としてレジスタ180にすでに格納されているからである。これらの値は頂点0、頂点2または辺1と関連するのですでに格納されており、それらの値ははすべて、図10aおよび図10bに示される指定の結果として両方の三角形に同一である。
【0085】
その上、mnz2、mnred2、mngreen2、mnblue2およびedge1_slopeの値の計算は、第2の三角形に関して省略することができる。これらの計算を省略できるのは、これらの値が第1の三角形について実行された計算の結果としてすでに計算されており、図10aおよび図10bに示すように共有される辺1と関連しているからである。
【0086】
図11は、本発明の一つの実施例に従って、四辺形に関する平面方程式を計算するプロセスを示している。ステップ170では、四辺形の定義を受け取る。ステップ171で、四辺形を第1の三角形と第2の三角形に分割する。先に述べたように、このステップは、それぞれの三角形について2つの共有される頂点と一つの共有される辺が存在するように、四辺形を分割することを含むことができる。さらに、分割するステップは、それぞれの三角形の共有される頂点と共有される辺が同じ指定をもつように三角形の辺および頂点を指定することを含むことができる。ステップ172で、第1の三角形の平面方程式が生成される。第1の三角形の平面方程式は充填スキャン・コンバータに与えられる(ステップ174)。ステップ176で、第1の三角形の平面方程式を生成した結果を用いて第2の三角形の平面方程式を生成する。例えば、ステップ176は、レジスタにすでに格納されている値のような、第1の三角形の平面方程式を生成した中間の結果を使用することを含むことができる。さらにその結果は、mnz2等のような平面方程式の定数を含むことができる。従って、ステップ176は、ステップ174が完了する前に始めることができる。図4に示した回路は個別のALU184、乗算器186、および除算器188を含むので、いくつかの操作を平行して実行することができる。ステップ178で、第2の三角形の平面方程式を充填スキャン・コンバータに与える。
【0087】
図12は、本発明の一つの実施例で実行されるフェッチおよび計算の操作を表にしたものであり、上で述べた方法で三角形を指定し、フェッチおよび計算のような重複した動作を省くることによって達成される利点を示している。フェッチおよび計算の一部は、二回実行してもよいことに注意されたい。例えば一つの実施例では、図12に示されるように、edge1_slopeは第1の三角形と同様に第2の三角形についても生成される。さらにv0.x、v2.xおよびv2.yのフェッチは、第2の三角形について省略されなかった。平面方程式の生成を実行するために用いられる異なった構造に基づいて、これは速度に影響を与えうる。しかし回路の構造を単純化するために、edge1_slopeの計算を代わって2回実行することは有利でありうる。このような実施例では、おそらく2クロック・サイクルが加わることになる。
【0088】
さらに図4のような配置において、乗算器186には多くの場合ALU操作よりも多くの乗算/除算の操作があるので、しばしば処理のスループットに関する障害となる。また図4に示した実施例で、乗算器186および除算器188は、各々の入力および出力について効果的に時分割多重送信(time multiplex)する共通のバスを共有する。その結果、上の表で示したフェッチのようにいくつかのステップを省略できたとしても、乗算器186それ自身のスループットを増やさない限り、ALU184および除算器188によるレジスタ・ファイル180へのアクセスがスループットを減少させることはできないので、スループットに影響を与えることはできない。
【0089】
しかし、代替の実施例では、edge1_slopeの計算およびv0.x、v2.x、v2.yのフェッチが、両方とも第2の三角形に関して省略される。省略するフェッチや計算の組合せは本発明の範囲内である。
【0090】
上で示したように、図4は、三角形の生成および平面方程式の生成を実行するシステムの好ましい実施例を示す。しかしこれらの機能は、図示のハードウェアまたはソフトウェアのどちらでも、またはハードウェアおよびソフトウェアの組み合わせとして、実行することができる。ソフトウェアの実施例で、ソフトウェアは、汎用コンピュータまたは必要な機能を実行するために最適化されたコンピュータで実行することができる。このようなコンピュータは、一般にCPU、ハード・ドライブまたはEPROMのようなプログラム・メモリ、ランダム・アクセス・メモリのようなデータ・メモリ、およびこれらの素子の間のインターフェースへの処理のバスを含む。また、通信デバイスを充填スキャン・コンバータへのインターフェースに使用することもできる。
【0091】
発明の別の見地は、頂点のソーティングに関連する。充填スキャン・コンバータは、典型的には、表示画面の最上部のスパンを横切ってステップし、それからより下のスパンに進み(Y値を増やす)、より低いスパンのステッピングを実行する(図5参照)。最上部のスパンを最初に実行するというこの命令は、頂点V0を最上部の頂点として定義することによって充填スキャン・コンバータに指示することができる。従ってグラフィックス・システムは、3つの頂点V0、V1、V2に関するデータのような三角形の情報を受け取る頂点ソーターを含むことができる。このような頂点ソーターは頂点に関するデータをソートして、平面方程式ジェネレータにソート順にデータを供給する。図6aおよび図6bに関して述べたように辺および頂点の指定を保持するために、この頂点のソーティングによって辺のソーティングも行われる。平面方程式ジェネレータは、例えば充填スキャン・コンバータに供給される平面方程式を生成するという図8に示したステップを実行する。
【0092】
しかし、図8で計算する平面方程式のある値だけが頂点のソートに依存する。こうして、ソーティングは図8に示すプロセスのうちの最初の数ステップと同時に行うことができ、その結果プロセスはより効率的になり、必要な処理資源が削減される。
【0093】
頂点のソーティングと平面方程式の生成は、上述のように、図4および図15に示す処理ユニットによって同時に実行することができる。
【0094】
典型的に、頂点のソーティングは、最大のものに対する最小のものを見つけるためにそれぞれの頂点の対のY座標値を比較することを含む。これらのY座標値を比較するプロセスには計算サイクルが余分にかかるが、代わりにその時間を使って平面方程式を計算し始めることができる。その代わり、Yをソーティングする命令は、図8で先に述べた平面方程式の一部として計算される辺のデルタYでコード化されることに注意されたい。辺のデルタは頂点に関して一貫して定義されるので(図6aおよび図6bを参照)、辺のデルタYの符号を使ってソーティングの結果を決定することができる。
【0095】
図13は、異なったソートの結果になる三角形のいくつかの例を示す。例えば、三角形201は、辺と頂点の表記が図6aおよび図6bの指定に従っているのでソーティングを必要としない。しかし三角形203については、頂点V1が、最小のY座標値をもつので、三角形201のような指定を得るために頂点V0と交換されなければならない。
【0096】
図14は、図13のそれぞれの例に関して頂点と辺の適当な交換を行うための正確な表を示している。図14に示すように、ソートされた頂点の順序およびソートされた辺の順序は、それぞれの辺に関する辺のデルタdyの符号から決定することができる。「辺3のDY符号」、「辺2のDY符号」および「辺1のDY符号」の「0」は、辺のデルタdyの符号が正であることを示し、「1」は辺のデルタdyの符号が負である。例えば、三角形202について、辺1のdy(頂点V0から頂点V2)が正であり、辺2のdy(頂点V1から頂点V0)は負であり、辺3のdy(頂点V2から頂点V1)が正である。「ソート後の頂点の順序」とは、オリジナルの頂点に関するソート後の頂点の順序をいう。例えば(b)の場合、ソート後の頂点の順序は(2,0,1)であり、ソート後の頂点V2はオリジナルの頂点V0と等しく、ソート後の頂点V0はオリジナルの頂点V1と等しく、ソート後の頂点V1はオリジナルの頂点V2と等しいことを意味する。同様に、ソート後の辺の順序は、オリジナルの辺に関するソート後の辺の順序を示す。
【0097】
図8および平面方程式を生成するステップに関して上述したように、辺のデルタはそれぞれ、三角形のまわりで一貫した方向を持つように1方向で定義される。三角形202についてソーティングは、頂点および辺の指定を時計回りに効果的に回転させることによって達成される。そのようにして、図14はソート後の頂点の順序およびソート後の辺の順序を示している。図14は、図13に示す三角形201ないし206のそれぞれの結果の頂点の順序と辺の順序を含む。また図14は、図13に示さなかった2つの付加のケースも示している。具体的には、ケース(g)はそれぞれの辺が正の辺のデルタをもつ場合を示し、ケース(h)はそれぞれの辺が負の辺のデルタをもつ場合を示す。先に述べたような辺の定義では、このようなケースは通常起こらない。しかし、例えば三角形が縮小されて有効に点に変形した場合、すべての辺のデルタが0となることができ、それぞれの辺のデルタの符号は正または負である。三角形が変形して水平線になる場合にも同様の状況が存在しうる。従って、(g)および(h)に示されたケースは存在しうる。これらのケースでは、頂点が全て効果的に等しいので、実際のソーティングは必要でない。従ってこれらのケースにおいては、ソート後の頂点の順序およびソート後の辺の順序は、任意の頂点のソーティングの前の順序になりうる。
【0098】
図15は、頂点をソーティングするための回路の一つの実施例を示し、図4に示した平面方程式の計算回路の一部として実行することができる。回路は使用されうるロジックを表わしており、代替の実現を効果的に行って、同様の目的を達成することもできる。回路は、ram_sign信号229上で受け取られる3辺のデルタYの符号を保持する入力レジスタ220A、220Bおよび220Cを含む。論理回路222の出力は出力レジスタ224A、224Bおよび224Cに供給され、ソートされた信号を供給し、それらの信号は図17のアドレス・マップに示される方法で図4のレジスタ・ファイル180をアドレスする際に使用される。
【0099】
操作上、それぞれの入力レジスタ220A、220Bおよび220Cは、辺のデルタのそれぞれの符号を示す時分割多重送信されたデータを運ぶram_sign信号229を受け取る。ライン226上の信号set_e1_dyは、ram_sign信号229が辺1のデルタYの符号を保有することを示し、ライン227上の信号set_e2_dyは、ram_sign信号229が辺2のデルタYの符号を保有することを示し、ライン228上の信号set_e3_dyは、ram_sign信号229が辺3のデルタYの符号を保有することを示す。辺のデルタYの符号信号は、例えば辺のデルタのそれぞれを計算する図8のステップ120から受け取られる。論理回路222は、ソート後の頂点の順序を決定するために図14に示されるロジックに従ってロジックの操作を行い、レジスタ224Aないし224Cに出力を与える。例えば出力レジスタ224Aは、ソート後の頂点V0を表わす2ビットの値を保有し、それを出力信号sorted_v0としてライン231上に供給する。出力レジスタ224Bはソート後の頂点V2を表わす2ビットの値を保有し、それを出力信号sorted_v2としてライン232上に供給する。出力レジスタ224Cは、ソート後の頂点V1に関する値を保有し、出力信号sorted_v1としてライン233上に供給する。ライン230上の信号set_sort_regsは、ソート後の頂点の値を保有するために、出力レジスタ224Aないし224Cをラッチ(latch)するために使用することができる。さらに論理回路222は、ライン234上に信号sorted_edges_same_as_verticesと指定される別の出力を供給し、ソーティングの結果として三角形のタイプが入れ替わらなかったことを示すために用いられる。(三角形のタイプIおよびIIについて図6aおよび図6bを参照)。図15に示す回路が、ソート後の辺の番号を供給する必要はない。ソート後の辺の番号は、ライン231ないし233のソート後の頂点の信号およびsorted_edges_same_as_vertices信号234から解読することができる。
【0100】
図15に示す回路からの出力が与えられれば、図4に示す回路を使って一つの典型的な実施例におけるソートされた平面方程式を生成することができる。一つの実施例では、図15からの出力はレジスタ・ファイル180の頂点データへのポインタとして使用されるため、ソーティングの結果としての実際上のデータ交換を回避する。図17は、この実施例で使用されるレジスタ・ファイル180のためのメモリ・マップを示す。図17でラベル256は、頂点V0、頂点V1または頂点V2のいずれの頂点に関連してレジスタ・ファイル180に格納される値を示す。アドレス252は十進アドレスであり、アドレス254はアドレス252に一致する2進アドレスである。領域256はそれぞれのアドレスの内容を定義する。例として、X、Y、Z、R、G、Bの値が頂点のそれぞれと関連付けられている。これらの値の一つにアクセスするために、適当なアドレスが与えられる。二進アドレスの最初の2つの数字は、どの頂点が選択されるかを示し(頂点V0の場合01、頂点V1の場合10、頂点V2の場合11)、最後の3つの二進数字はその頂点の個々の値を示す。このように、最初の2つの数字はソート後の頂点を表すことができる。これらの2つの数字は図15の信号224AないしCからの出力であるので、頂点データを再配置する必要はない。また図17の頂点データは、辺情報、詳しくは3辺のそれぞれについての辺のdxおよび辺のdyを含むことに注意されたい。図17に示す配列によって、これらの値はまた、図15に示す回路の出力から参照することできる。
【0101】
上に示したように、図4の回路を使って四辺形の迅速な生成を行うことができる。ソートされた平面方程式の生成を行う際、ALU184、乗算器186および除算器188によって速くアクセスできるように、頂点および辺のデータを、RAM196からフェッチてレジスタ・ファイル180に格納することができる。レジスタ・ファイル180は、2ビットのソートされた頂点の信号224AないしCがレジスタ・ファイル180から所望のソート後の頂点を選ぶことができるように、頂点データと辺をレジスタ・ファイルに格納する。さらに、3ビットのフィールドを使って、所望のソートされた頂点の適当なパラメータ(例えばX、Y、Z、赤、緑、青)を指定することができる。従って、sorted.v0.xを実行される計算への入力として要求する場合、レジスタ180に2ビットの頂点指定および3ビットのパラメータ指定を含むアドレスを与えることによって、データをレジスタ180から読み取ることができる。
【0102】
図16および以下の方程式は、ソート後のパラメータ値を使って平面方程式を計算する際、図4の回路によって実行される操作を示している。操作は、図16に示された順序で実行される必要はなく、重複させたり、同時に実行することも可能である。以下の方程式で、変数名にある「sorted」の語は、ソーティングの後の値を示す。従って、例えばオリジナルの頂点が、v0、v1およびv2(v1.y<v0.y<v2.y)である場合、sorted.v0 = v1、sorted.v1 = v0およびsorted.v2 = v2である。
【0103】
ステップ132で、辺のデルタが図8のステップ120と同様の方法で計算される。従って、mnx2、nx1、dxe3、mny2、ny1、dye3、mnz2、nz1、mnred2、nred1、mngreen2、ngreen2、mnnblue2およびnblue1の値のそれぞれは、ソーティングの前またはソーティングの間に計算することができる。
【0104】
【数14】
mnx2 = v0.x - v2.x
nx1 = v1.x - v0.x
dxe3 = v2.x - v1.x
mny2 = v0.y - v2.y
ny1 = v1.y - v0.y
dye3 = v2.y - v1.y
mnz2 = v0.z - v2.z
nz1 = v1.z - v0.z
mnred2 = v0.red - v2.red
nred1 = v1.red - v0.red
mngreen2 = v0.green - v2.green
ngreen1 = v1.green - v0.green
mnblue2 = v0.blue - v2.blue
nblue = v1.blue - v0.blue
【0105】
ステップ134で、ソート後の辺の勾配が計算される。これは、辺の勾配がソーティングなしで計算される図8のステップ122と区別される。図8のプロセスは、先にソートされた頂点データに依存するからである。従って、ソートされた辺の勾配は、出力レジスタ224AないしCからの出力を使って適当なソートされた頂点を決定し、以下に示すように計算することができる。アスタリスク(*)を伴う下の値は、ソーティングとは独立した値であるから、ソーティングの前または間に計算することができる。
【0106】
【数15】
edge1_slope* = mnx2 / mny2
edge2_slope* = nx1 / ny1
edge3_slope* = dxe3 / dye3
sorted.e1_slope = edge1_slope または edge3_slope (ソートによる)
sorted.e2_slope = edge1_slope または edge2_slope (ソートによる)
sorted.e3_slope = edge2_slope または edge3_slope (ソートによる)
【0107】
例えば、sorted_edges_same_as_vertices信号が有効である場合、sorted.e1_slopeは、ソート後のV0のdxをソート後のV0のdyで割ったものとして計算される。そうでなければ、sorted.e1_slopeはソート後のV2のdxをソート後のV2のdyで割ったものとして計算される。(ソート後の頂点の指定について図17を参照。例えば「V0のdx」はedge1_dxをいう)。同様に、信号sorted_edges_same_as_verticesが有効である場合、sorted.e2_slopeはソート後のV1のdxをソート後のV1のdyで割ったものとして計算される。そうでない場合、ソート後のV0のdxをソート後のV0のdyで割ったものとして計算される。また、信号sorted_edges_same_as_verticesが有効である場合、sorted.e3_slopeはソート後のV2のdxをソート後のV2のdyで割ったものとして計算され。そうでない場合、ソート後のV1のdxをソート後のV1のdxで割ったものとして計算される。
【0108】
ステップ136で、ソート後の辺の始点/終点のY値が決定される。ソート後の頂点は分かっているので、始点/終点の値はソート後の頂点から直接決定することができる。
【数16】
edge1_y_start = sorted.v0.y
edge1_y_stop = sorted.v2.y
edge3_y_start = sorted.v1.y
【0109】
それから図7のステップ126と同様の方程式を用いるが、代わりにソート後の値を使用して、辺の始点のXを計算することができる(ステップ138)。
【数17】
frac_y0 = 切り上げ(sorted.v0.y) - sorted.v0.y
frac_y1 = 切り上げ(sorted.v1.y) - sorted.v1.y
edge1_x_start = sorted.v0.x + sorted.e1_slope*frac_y0
edge2_x_start = sorted.v0.x + sorted.e2_slope*frac_y0
edges_x_start = sorted.v1.x + sorted.e3_slope*frac_y1
【0110】
奥行きおよび/または色が要求される場合、ステップ140でZおよび任意の色に関する偏導関数が決定される。以下の方程式のいくつかは、三角形のソーティングには依存せず、ソーティング回路がソートを実行した時点の任意の順序で実行することができることに留意されたい。例えばすべての偏導関数は、辺に関するものを除いてソートに依存しない。x_increment値は上述のようにソートに依存する。x_incrementによって表される外積の符号は、三角形のタイプを変更した(タイプIからII、またはタイプIIからI)ソーティングとは反対になるからである。従ってsorted_edges_same_as_vertices信号234がアクティブであれば、x_incrementは前に述べたとおりである。しかしsorted_edges_same_as_vertices信号234がアクティブでない場合、これはタイプの入れ替えを示しており、x_incrementの信号は反対になる。
【0111】
【数18】
【0112】
次に、ソート後のZおよび色の始点値を、頂点から第1の画素へ調整して計算する(ステップ142)。
【0113】
【数19】
【0114】
この結果、頂点のソーティングは、別の方法で必要とされるよりも速い時間で少ない処理資源を用いて実行することができる。例えば辺のデルタYは、平面方程式の生成のためにすでに算出されていることになっているので、それぞれの頂点のY座標値の比較を行う代わりに、これらのデルタを比較の基準に使用して、頂点のソーティングを実行することができる。それぞれの辺のデルタYは、一貫した辺の指定に従ってY軸がその辺に関して増加しているかを示す符号をもっているので、論理回路を使って頂点を速くソートしてソート後の頂点を与えることができる。
【0115】
さらに、ソーティングのステップ全体は、平面方程式の生成に関して効果的に明白である。ソーティング操作を実行し、そのソーティング操作の結果に基づいて平面方程式を計算する代わりに、平面方程式を一つのステップの中で効果的に生成することができる。
【0116】
同時に実行されるソーティングは、図4に示すようなハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組み合わせのいずれにおいても実行することができる。
【0117】
本発明は例として次の実施態様を含む。
(1)コンピュータ・グラフィックス・システムで、四辺形を表わす画素データを生成する装置であって、
四辺形を定義する頂点データに応じて、四辺形を第1および第2の三角形(101および102、103および104)を表わす頂点データに分割する第1の手段と、上記第1の三角形(101,103)を表わす頂点データに応じて、上記第1および第2の三角形(101および102、103および104)が共有する共有データを含む上記第1の三角形(101,103)の平面方程式データを生成する第2の手段と、
第2の三角形(102,104)を表わす頂点データおよび共有データに応じて、共有データの少なくとも一部を生成することなく、上記第2の三角形(102,104)の平面方程式データを生成する第3の手段と、
を含む、四辺形を定義する頂点データに応じて平面方程式データを生成する処理回路(181,185,190)と、
上記第1および第2の三角形(101および102、103および104)の上記平面方程式データに応じて、上記四辺形を表わす画素データを生成する充填スキャン・コンバータ(14)と、
を備える、上記装置。
(2)共有されるデータが、第2の手段によって第1のメモリ(196)から第2のメモリ(180)にフェッチされる頂点データを含み、第3の手段が、第1のメモリ(196)よりもアクセス時間が短い第2のメモリ(180)の頂点データの少なくとも一部に直接アクセスする手段を含む、上記(1)の装置。
【0118】
(3)平面方程式データに応じて四辺形を表わす画素データを生成する充填スキャン・コンバータ(14)を含むコンピュータ・グラフィックス・システムにおいて、
四辺形を表す頂点データを受け取るステップ(170)と、
四辺形を、第1の三角形(101,103)および第2の三角形(102,104)を表わす頂点データに分割するステップ(171)と、
共有されるデータを含む第1の三角形(101,103)の平面方程式データを生成するステップ(172)と、
第1の三角形(101,103)の平面方程式データを、四辺形を表わす画素データを生成する充填スキャン・コンバータ(14)に供給するステップ(174)と、
共有されるデータの少なくとも一部を使用して第2の三角形(102,104)の平面方程式データを生成するステップ(176)と、
第2の三角形(102,104)の平面方程式データを、四辺形を表わす画素データを生成する充填スキャン・コンバータに供給するステップ(178)と、
を含む、平面方程式データを生成する方法。
(4)第1の三角形(101,103)の平面方程式データを生成するステップが、共有されるデータの一部をメモリ(180)に格納することを含み、第2の三角形(102,104)の平面方程式データを生成するステップが、メモリ(180)の共有データの少なくとも一部に直接アクセスすることを含む、上記(3)の方法。
(5)第1の三角形の平面方程式データを生成するステップ(172)が、第1の三角形(101,103)および第2の三角形(102,104)の間の共有される辺(辺1.1,辺2.1)を表すデータを生成することを含み、第2の三角形(102,104)の平面方程式データを生成するステップ(174)が、共有される辺(辺1.1,辺1.2)を表すデータの少なくとも一部を使用することを含む、上記(3)の方法。
(6)第2の三角形(102,104)の平面方程式データを生成するステップ(176)が、第1の三角形(101,103)の平面方程式データを生成するステップ(172)の少なくとも一部の間に実行される、上記(3)の方法。
【0119】
(7)平面方程式データに応じて、四辺形を表わす画素データを生成する充填スキャン・コンバータ(14)を含むコンピュータ・グラフィックス・システムにおいて、平面方程式データを生成する装置(181,185,190)であって、
四辺形を表す頂点データを受け取る手段と、
四辺形を第1の三角形(101,103)および第2の三角形(102,104)を表わす頂点データに分割する手段と、
共有されるデータを含む第1の三角形(101,103 )の平面方程式データを生成する手段と、
第1の三角形(101,103)の平面方程式データを充填スキャン・コンバータに供給する手段と、
共有されるデータの少なくとも一部を使用して第2の三角形(102,104)の平面方程式データを生成する手段と、
第2の三角形(102,104)の平面方程式を、四辺形を表わす画素データを生成する充填スキャン・コンバータに供給する手段と、
を備える、上記装置。
(8)第1の三角形(101,103)の平面方程式データを生成する手段が、共有されるデータの一部をメモリ(180)に格納する手段と、第2の三角形(102,104)の平面方程式データを生成する手段が、メモリ(180)の共有されたデータの少なくとも一部に直接アクセスする手段を含む、上記(7)の装置。
(9)第1の三角形(101,103)の平面方程式データを生成する手段が、第1の三角形(101,103)および第2の三角形(102,104)の間の共有される辺(辺1.1、辺2.1)を表すデータを生成する手段を含み、第2の三角形(102,104)の平面方程式データを生成するステップが、共有される辺(辺1.1、辺2.1)を表すデータの少なくとも一部を使用する手段を含む、上記(7)の装置。
(10)第2の三角形(102,104)の平面方程式データを生成する手段が、第1の三角形(101,103)の平面方程式データを生成する手段が平面方程式データを生成している間に、平面方程式を生成する手段を含む、上記(7)の装置。
【0120】
【発明の効果】
本発明によれば、コンピュータ・グラフィックス・システムで四辺形を2つの三角形に分割して処理し、共有される辺および頂点を利用することにより画素データを生成する処理効率を改善することができる。
【図面の簡単な説明】
【図1】本発明を具体化したコンピュータ・グラフィックス・システムの第1の実施例のブロック図である。
【図2】本発明を具体化したコンピュータ・グラフィックス・システムの第2の実施例のブロック図である。
【図3】本発明の実施例を具体化した加速器のブロック図である。
【図4】図1および図3のそれぞれの加速器の一部分のブロック図であり、 平面方程式のデータを生成する処理回路を示す。
【図5】充填スキャン・コンバータによって実行される時に充填される三角形のスパンの生成を示す。
【図6】図6aは、最も長い辺が三角形の左側にある三角形の第1のタイプを示す。図6bは、最も長い辺が三角形の右側にある三角形の第2のタイプを示す。
【図7】三角形を充填する充填スキャン・コンバータによって用いられる画素および関連するパラメータの詳細を示す。
【図8】平面方程式の連続的な生成に関して図4の回路の操作を示すフローチャートである。
【図9】図9aは、2つの三角形に分割することができる四辺形を示す。
図9bは、2つの三角形に分割することができる凹形の四辺形を示す。
【図10】図10aは、図9aに示される四辺形の辺および頂点の命名規則を示す。図10bは、図9bに示される四辺形の辺および頂点の命名規則を示す。
【図11】四辺形を作る三角形の平面方程式を生成する別の方法に関して、図4に示される回路の操作を示すフローチャートである。
【図12】図11のステップに関連するフェッチおよび計算の操作を示す図表であり、一部のフェッチおよび計算の操作の削除を示す。
【図13】頂点をソートする前の三角形のいくつかの例を示す。
【図14】図13に示す三角形で行われる頂点のソーティングを示す。
【図15】図14に従って頂点のソーティングを実行する回路の一例を示す。
【図16】頂点のソーティングが平面方程式の生成と同時に実行されるプロセスを示す。
【図17】図4のレジスタ・ファイル内の頂点データのメモリ・マップである。
【図18】いくつかの多角形およびその多角形を充填するためにアクティブにされた画素を示す。
【符号の説明】
10 フロント・エンド基板
12 テクスチャ・マッピング基板
14 フレーム・バッファ基板
15 ホスト・コンピュータ
32 3D加速器
34 2D加速器
80,81 プリミティブRAMバッファ
84 クリッピング/ライティングRAM
180 レジスタ・ファイル
182 マルチプレクサ/データ・フォーマッタ
184 加算および乗算のALU
186 乗算器
188 除算器
Claims (12)
- コンピュータ・グラフィックス・システムで、四辺形を表わす画素データを生成する装置であって、平面における座標をx、yで表わし、いずれかの画素データをpで表わした場合に、三角形または四辺形の平面方程式を
p=ax+by+c
と定義し、平面方程式データを、定数a、b、cおよび定数a、b、cを導くための頂点および辺に関するデータを含むデータと定義した場合に、四辺形を定義する頂点データに応じて平面方程式データを生成する処理回路であって、四辺形を定義する頂点データに応じて、四辺形を第1および第2の三角形に分割する第1の手段と、上記第1の三角形に応じて、上記第1および第2の三角形が共有する共有データを含む上記第1の三角形の平面方程式データを生成する第2の手段と、第2の三角形に応じて、共有データの少なくとも一部を二度生成することなく、上記第2の三角形の平面方程式データを生成する第3の手段と、を含む、処理回路と、上記第1および第2の三角形の上記平面方程式データに応じて、上記四辺形を表わす画素データを生成する充填スキャン・コンバータと、を備える、装置。 - 共有データは、上記第1の三角形と上記第2の三角形の双方に共通の辺の辺データを含む請求項1に記載の装置。
- 共有データは、第2の手段によって第1のメモリから第2のメモリへフェッチされる頂点データを含み、第3の手段が、第1のメモリよりもアクセス時間が短い第2のメモリの頂点データの少なくとも一部に直接アクセスする手段を含む請求項1に記載の装置。
- 第1の手段が、第1の三角形に対して、第1の頂点、第2の頂点、第3の頂点、第1の辺、第2の辺および第3の辺を指定する手段と第2の三角形に対して第1の三角形の第1の頂点、第4の頂点、第1の三角形の第3の頂点、第1の三角形の第1の辺、第4の辺および第5の辺を指定する手段とを含む請求項1に記載の装置。
- 平面における座標をx、yで表わし、いずれかの画素データをpで表わした場合に、三角形の平面方程式を
p=ax+by+c
と定義し、平面方程式データを、定数a、b、cおよび定数a、b、cを導くための頂点および辺に関するデータを含むデータと定義した場合に、平面方程式データに応じて四辺形を表わす画素データを生成する充填スキャン・コンバータを含むコンピュータ・グラフィックス・システムにおいて、平面方程式データを生成する方法であって、四辺形を表す頂点データを受け取るステップと、四辺形を、第1の三角形および第2の三角形に分割するステップと、共有データを含む第1の三角形の平面方程式データを生成するステップと、第1の三角形の平面方程式データを、四辺形を表わす画素データを生成する充填スキャン・コンバータに供給するステップと、共有データの少なくとも一部を使用して第2の三角形の平面方程式データを生成するステップと、第2の三角形の平面方程式データを、四辺形を表わす画素データを生成する充填スキャン・コンバータに供給するステップと、を含む、方法。 - 分割するステップが、第1の三角形に対して、第1の頂点、第2の頂点、第3の頂点、第1の辺、第2の辺および第3の辺を指定するステップと第2の三角形に対して第1の三角形の第1の頂点、第4の頂点、第1の三角形の第3の頂点、第1の三角形の第1の辺、第4の辺および第5の辺を指定するステップとを含む請求項5に記載の方法。
- 第1の三角形の平面方程式データを生成するステップが、第1のメモリからフェッチされた共有データの一部を第2のメモリに格納することを含み、第2の三角形の平面方程式データを生成するステップが、第1のメモリよりもアクセス時間が短い第2のメモリの共有データの少なくとも一部に直接アクセスすることを含む、請求項5に記載の方法。
- 共有データの少なくとも一部にアクセスするステップが、第1の三角形および第2の三角形によって共有される第1の頂点および第2の頂点の表示パラメータデータにアクセスすることを含む請求項7に記載の方法。
- 第1の三角形の平面方程式データを生成するステップが第1の三角形と第2の三角形の間で共有される辺を記述するデータを生成することを含み、第2の三角形の平面方程式データを生成するステップが共有される辺を記述するデータの少なくとも一部を使用することを含む請求項5に記載の方法。
- 共有される辺を記述するデータの少なくとも一部を使用するステップが、共有される辺の傾斜と共有される辺に沿う表示パラメータの変化を含むデータを使用することを含む請求項9に記載の方法。
- 第2の三角形の平面方程式データを生成するステップが、第1の三角形の平面方程式データを生成するステップの少なくとも一部の間に行われる請求項5に記載の方法。
- 第1の三角形の平面方程式データを生成するステップが、第1の三角形がレンダリングされる表示の第1の軸に関する表示パラメータの変化の量を生成するステップと、第1の三角形がレンダリングされる表示の第2の軸に関する表示パラメータの変化の量を生成するステップと、充填スキャン・コンバータによって生成される第1の三角形の第1の画素の表示パラメータの始点値を生成するステップと、第1の三角形の各辺の傾斜を生成するステップと、第1の三角形の辺の1つの第2の軸の始点値と終点値を生成するステップと、第1の三角形の他の辺の第2の軸の終点値を生成するステップと、第1の三角形の各辺の第1の軸の始点値を生成するステップと、第1の三角形の向きを示すフラグを生成するステップとを含む請求項5に記載の方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/488,644 US5710879A (en) | 1995-06-08 | 1995-06-08 | Method and apparatus for fast quadrilateral generation in a computer graphics system |
US488,644 | 1995-06-08 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH096966A JPH096966A (ja) | 1997-01-10 |
JP3839870B2 true JP3839870B2 (ja) | 2006-11-01 |
Family
ID=23940531
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP14582196A Expired - Lifetime JP3839870B2 (ja) | 1995-06-08 | 1996-06-07 | 四辺形を表わす画素データを生成する装置および方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US5710879A (ja) |
JP (1) | JP3839870B2 (ja) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5842004A (en) * | 1995-08-04 | 1998-11-24 | Sun Microsystems, Inc. | Method and apparatus for decompression of compressed geometric three-dimensional graphics data |
US5930519A (en) * | 1997-04-30 | 1999-07-27 | Hewlett Packard Company | Distributed branch logic system and method for a geometry accelerator |
US6184902B1 (en) * | 1997-04-30 | 2001-02-06 | Hewlett-Packard Company | Centralized branch intelligence system and method for a geometry accelerator |
US5956047A (en) | 1997-04-30 | 1999-09-21 | Hewlett-Packard Co. | ROM-based control units in a geometry accelerator for a computer graphics system |
US6219064B1 (en) | 1998-01-07 | 2001-04-17 | Seiko Epson Corporation | Graphics mechanism and apparatus for mipmap level estimation for anisotropic texture mapping |
US7088359B2 (en) * | 2003-04-23 | 2006-08-08 | Via Technologies, Inc. | Vertex reordering in 3D graphics |
US7286139B2 (en) * | 2004-09-17 | 2007-10-23 | Via Technologies, Inc. | Partial guardband clipping |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4811244A (en) * | 1986-09-26 | 1989-03-07 | Hitachi, Ltd. | Drawing information management system |
JP2690110B2 (ja) * | 1988-08-15 | 1997-12-10 | 沖電気工業株式会社 | 走査変換方法 |
US5142617A (en) * | 1988-10-27 | 1992-08-25 | Tektronix, Inc. | Method of shading a graphics image |
JPH0719295B2 (ja) * | 1990-08-06 | 1995-03-06 | 富士ゼロックス株式会社 | 図形の塗り潰し方法 |
-
1995
- 1995-06-08 US US08/488,644 patent/US5710879A/en not_active Expired - Lifetime
-
1996
- 1996-06-07 JP JP14582196A patent/JP3839870B2/ja not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JPH096966A (ja) | 1997-01-10 |
US5710879A (en) | 1998-01-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5973705A (en) | Geometry pipeline implemented on a SIMD machine | |
US5850489A (en) | Linear expression evaluator | |
US6115047A (en) | Method and apparatus for implementing efficient floating point Z-buffering | |
US5801711A (en) | Polyline and triangle strip data management techniques for enhancing performance of computer graphics system | |
US5268995A (en) | Method for executing graphics Z-compare and pixel merge instructions in a data processor | |
US5969726A (en) | Caching and coherency control of multiple geometry accelerators in a computer graphics system | |
US5831625A (en) | Wavelet texturing | |
US5892517A (en) | Shared access texturing of computer graphic images | |
EP0747861B1 (en) | Computer graphics system having high performance primitive clipping preprocessing | |
US5307450A (en) | Z-subdivision for improved texture mapping | |
US5923338A (en) | Image generation systems having processing element arrays with direct element communication | |
US6417858B1 (en) | Processor for geometry transformations and lighting calculations | |
US5896136A (en) | Computer graphics system with improved blending | |
US6104842A (en) | Geometry processing of digital video models and images | |
US5898437A (en) | Method for fast rendering of three-dimensional objects by generating lists of like-facing coherent primitives | |
JP3839871B2 (ja) | 三角形を表わす画素データを生成する装置 | |
JPH11272880A (ja) | 固定小数点ライティング・ユニットを用いたロ―カル・アイ・ベクトルの高速計算方法 | |
US6037947A (en) | Graphics accelerator with shift count generation for handling potential fixed-point numeric overflows | |
JPH0916144A (ja) | 二次元でインターリーブされるフレームバッファを備えた、三角形ラスタ化のためのシステム及び方法 | |
US5847717A (en) | Data synchronization between a plurality of asynchronous data renderers | |
US5912830A (en) | System and method for conditionally calculating exponential values in a geometry accelerator | |
US5696944A (en) | Computer graphics system having double buffered vertex ram with granularity | |
JP3839870B2 (ja) | 四辺形を表わす画素データを生成する装置および方法 | |
US5784075A (en) | Memory mapping techniques for enhancing performance of computer graphics system | |
US6778188B2 (en) | Reconfigurable hardware filter for texture mapping and image processing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050719 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20051012 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20051017 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060113 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060314 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060315 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060718 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060804 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090811 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100811 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110811 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110811 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120811 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120811 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130811 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130811 Year of fee payment: 7 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130811 Year of fee payment: 7 |
|
R360 | Written notification for declining of transfer of rights |
Free format text: JAPANESE INTERMEDIATE CODE: R360 |
|
R360 | Written notification for declining of transfer of rights |
Free format text: JAPANESE INTERMEDIATE CODE: R360 |
|
R371 | Transfer withdrawn |
Free format text: JAPANESE INTERMEDIATE CODE: R371 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130811 Year of fee payment: 7 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130811 Year of fee payment: 7 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |