以下に添付図面を参照して、この発明にかかる図形描画装置の好適な実施の形態を詳細に説明する。以下に示す実施の形態1〜3では、図形描画装置は、入力された頂点座標に対し、頂点座標ストリーム中に存在しない頂点座標である仮想頂点座標を便宜的に生成し、仮想頂点座標を頂点として含んだ部分図形を形成し、当該部分図形を頂点座標が入力される都度に順次描画することによって対象図形を構成する。これにより、各部分図形において、メモリアドレスが連続する画素が多く含まれるため、効率的な描画が可能となる。
なお、以下に示す実施の形態1〜3では、頂点Vnの頂点座標は(Vnx,Vny)であらわすものとする。同様に交点座標のCnにおいても(Cnx,Cny)であらわすものとする。
(実施の形態1)
(実施の形態1にかかる図形描画装置による対象図形の描画)
まず、この発明の実施の形態1にかかる図形描画装置による対象図形の描画の流れについて説明する。図1−1〜1−8は、この発明の実施の形態1にかかる図形描画装置による対象図形の描画の流れを示す説明図(その1)〜(その8)である。図1−1〜1−8においては、頂点座標ストリームから一連の頂点座標として、頂点V0〜V6の頂点座標が順次入力された場合の描画の流れを示したものである。
図1において、メモリアドレスが連続する方向を示すX軸とX軸に交差(たとえば、直交)する方向を示すY軸からなる2次元座標系に対応するステンシルバッファ領域100に対する対象図形の描画に際して、まず、図形描画装置には、頂点座標ストリームから頂点座標入力インターフェースを介して、先頭の頂点座標として(V0x,V0y)が入力され、続いて中間頂点座標として(V1x,V1y)が入力される。
このとき、図形描画装置は、先頭の頂点座標(V0x,V0y)を始点座標(V0x,V0y)、中間頂点座標(V1x,V1y)を中間頂点座標(V1x,V1y)として設定する。つぎに、図形描画装置は、始点座標(V0x,V0y)および中間頂点座標(V1x,V1y)に基づいて仮想頂点V1’の仮想頂点座標(V0x,V1y)を生成する。すなわち、仮想頂点V1’は、始点座標(V0x,V0y)とX座標を同じくし、中間頂点座標(V1x,V1y)とY座標を同じくする座標上に生成される。図形描画装置は、仮想頂点V1’を生成したのち、V0、V1、V1’を頂点に有する部分図形をステンシルバッファ領域100上に描画する(図1−1)。
つぎに、同様にして、図形描画装置に中間頂点座標(V2x,V2y)が入力されると、図形描画装置は、始点座標(V0x,V0y)および中間頂点座標(V2x,V2y)に基づいて仮想頂点V2’の仮想頂点座標(V0x,V2y)を生成する。すなわち、仮想頂点V2’は、始点座標(V0x,V0y)とX座標を同じくし、中間頂点座標(V2x,V2y)とY座標を同じくする座標上に生成される。図形描画装置は、仮想頂点V2’を生成したのち、V1、V1’、V2’、V2を頂点に有する部分図形をステンシルバッファ領域100上に描画する(図1−2)。
つぎに、同様にして、図形描画装置に中間頂点座標(V3x,V3y)が入力されると、図形描画装置は、始点座標(V0x,V0y)および中間頂点座標(V3x,V3y)に基づいて仮想頂点V3’の仮想頂点座標(V0x,V3y)を生成する。すなわち、仮想頂点V3’は、始点座標(V0x,V0y)とX座標を同じくし、中間頂点座標(V3x,V3y)とY座標を同じくする座標上に生成される。図形描画装置は、仮想頂点V3’を生成したのち、V2、V2’、V3’、V3を頂点に有する部分図形を排他的論理和演算に基づいてステンシルバッファ領域100上に描画する。なお、領域1Aにおいては、偶数個の図形が重複するため、図形が消去される(図1−3)。
つぎに、同様にして、図形描画装置に中間頂点座標(V4x,V4y)が入力されると、図形描画装置は、始点座標(V0x,V0y)および中間頂点座標(V4x,V4y)に基づいて仮想頂点V4’の仮想頂点座標(V0x,V4y)を生成する。すなわち、仮想頂点V4’は、始点座標(V0x,V0y)とX座標を同じくし、中間頂点座標(V4x,V4y)とY座標を同じくする座標上に生成される。図形描画装置は、仮想頂点V4’を生成したのち、V3、V3’、V4’、V4を頂点に有する部分図形を排他的論理和演算に基づいてステンシルバッファ領域100上に描画する。なお、領域1Bにおいては、偶数個の図形が重複するため、図形が消去される(図1−4)。
つぎに、同様にして、図形描画装置に中間頂点座標(V5x,V5y)が入力されると、図形描画装置は、始点座標(V0x,V0y)および中間頂点座標(V5x,V5y)に基づいて仮想頂点V5’の仮想頂点座標(V0x,V5y)を生成する。すなわち、仮想頂点V5’は、始点座標(V0x,V0y)とX座標を同じくし、中間頂点座標(V5x,V5y)とY座標を同じくする座標上に生成される。図形描画装置は、仮想頂点V5’を生成したのち、V4、V4’、V5’、V5を頂点に有する部分図形を排他的論理和演算に基づいてステンシルバッファ領域100上に描画する。なお、領域1Cにおいては、偶数個の図形が重複するため、図形が消去される(図1−5)。
つぎに、同様にして、図形描画装置に一連の頂点座標の末尾の頂点座標(V6x,V6y)が入力されると、図形描画装置は、(V6x,V6y)を末尾の頂点座標と判別したのち、始点座標(V0x,V0y)および中間頂点座標(V6x,V6y)に基づいて仮想頂点V6’の仮想頂点座標(V0x,V6y)を生成する。すなわち、仮想頂点V6’は、始点座標(V0x,V0y)とX座標を同じくし、中間頂点座標(V6x,V6y)とY座標を同じくする座標上に生成される。図形描画装置は、仮想頂点V6’を生成したのち、V5、V5’、V6’、V6を頂点に有する部分図形を排他的論理和演算に基づいてステンシルバッファ領域100上に描画する。なお、領域1Dにおいては、偶数個の図形が重複するため、図形が消去される(図1−6)。
つぎに、図形描画装置は、末尾の頂点座標であると判別された(V6x,V6y)までの入力が終了した場合、終点座標として設定された(V0x,V0y)を再び入力する。図形描画装置は、終点座標(V0x,V0y)が入力されると、終点座標(V0x,V0y)および末尾の頂点座標(V6x,V6y)およびその仮想頂点座標(V0x,V6y)に基づいて、V6、V6’、V0を頂点に有する最後の部分図形(詳細は後述する)を排他的論理和演算に基づいてステンシルバッファ領域100上に描画する。なお、領域1Eにおいては、偶数個の図形が重複するため、図形が消去される(図1−7)。
以上に説明したように、実施の形態1の図形描画装置において、入力された頂点座標から、仮想頂点V1’〜V6’を生成し、頂点V0〜V6および仮想頂点V1’〜V6’に基づいて部分図形をステンシルバッファ領域100上に頂点座標が入力される都度に順次描画していくことにより、頂点V0〜V6を頂点として有する対象図形がステンシルバッファ領域100上に描画されることとなる(図1−8)。
(コンピュータ装置のハードウェア構成)
つぎに、この発明の実施の形態1にかかるコンピュータ装置のハードウェア構成について説明する。図2は、この発明の実施の形態1にかかるコンピュータ装置のハードウェア構成を示す説明図である。
図2において、コンピュータ装置200は、コンピュータ本体210と、入力装置220と、出力装置230と、から構成されており、不図示のルータやモデムを介してLAN,WANやインターネットなどのネットワーク240に接続可能である。
コンピュータ装置200は、CPU,メモリ,インターフェースを有する。CPUは、コンピュータ装置200の全体の制御を司る。メモリは、ROM,RAM,HD,光ディスク211,フラッシュメモリから構成される。メモリは、CPUのワークエリアとして使用される。
また、メモリには、各種プログラムが格納されており、CPUからの命令に応じてロードされる。HDおよび光ディスク211は、ディスクドライブによりデータのリード/ライトが制御される。また、光ディスク211およびフラッシュメモリは、コンピュータ本体210に対して着脱自在である。インターフェースは、入力装置220からの入力、出力装置230からの出力、ネットワーク240に対する送受信の制御をおこなう。
また、入力装置220としては、キーボード221、マウス222、スキャナ223などがある。キーボード221は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式であってもよい。マウス222は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。スキャナ223は、画像を光学的に読み取る。読み取られた画像は画像データとして取り込まれ、コンピュータ本体210内のメモリに格納される。なお、スキャナ223にOCR機能を持たせてもよい。
また、出力装置230としては、ディスプレイ231、プリンタ232、スピーカ233などがある。ディスプレイ231は、カーソル、アイコン、あるいはツールボックスなどをはじめ、文書、画像、機能情報などのデータを表示する。また、プリンタ232は、画像データや文書データを印刷する。また、スピーカ233は、効果音や読み上げ音などの音声を出力する。
上述した図形描画装置およびステンシルバッファは、たとえば、コンピュータ本体210内部に設けられたグラフィックスLSIおよびメモリによって実現され、コンピュータ本体210にインストールされたアプリケーションによって生成された一連の頂点座標に基づいて、ディスプレイ231に表示される画像などの形状を記憶する。
(実施の形態1の図形描画装置の機能的構成)
つぎに、この発明にかかる実施の形態1について説明する。まず、この発明の実施の形態1にかかる図形描画装置の機能的構成について説明する。図3は、この発明の実施の形態1にかかる図形描画装置の機能的構成を示すブロック図である。図3に示すように、実施の形態1の図形描画装置300は、頂点種別判定部301と、先頭座標バッファ302と、先頭座標再利用部303と、頂点座標バッファ304と、生成部310と、設定部320と、描画部330とを備える。
図形描画装置300は、たとえば、アプリケーションによって生成された複数の2次元の頂点座標からなる一連の頂点座標が頂点座標ストリーム340として、頂点座標入力インターフェース350を介して図形描画装置300に順次入力されると、当該一連の頂点座標に基づいた対象図形をステンシルバッファ360のステンシルバッファ領域上に描画する機能を有する。具体的には、たとえば、図1−1〜1−8に示したように、頂点座標ストリーム340から頂点座標として、V0〜V6の頂点座標が順次入力された場合には、当該V0〜V6を頂点に有する図形をステンシルバッファ360のステンシルバッファ領域100上に描画する。
頂点種別判定部301は、入力された頂点座標から当該頂点座標における頂点の種別を判別する機能を有する。頂点の種別としては、具体的に、たとえば、先頭の頂点座標、中間頂点座標、末尾の頂点座標がある。先頭の頂点座標は、入力された一連の頂点座標のうちの先頭となる頂点座標である。先頭の頂点座標は、たとえば、図1−1〜1−8中、V0であらわされた頂点の頂点座標である。
末尾の頂点座標は、入力された一連の頂点座標のうちの末尾となる頂点座標である。末尾の頂点座標は、たとえば、図1−7および図1−8中、V6であらわされた頂点の頂点座標である。
中間頂点座標とは、入力された一連の頂点座標のうちの先頭の頂点座標および末尾の頂点座標以外の頂点座標である。中間頂点座標は、たとえば、図1−1〜1−8中、V1〜V5であらわされた頂点の頂点座標である。すなわち、頂点種別判定部301は、入力された頂点座標ごとに、当該頂点座標が、先頭の頂点座標、中間頂点座標、末尾の頂点座標のうちのいずれに該当するかを判別する。
頂点種別判定部301は、具体的には、たとえば、一連の頂点座標が各種のコマンドに挟まれて入力される場合には、開始コマンド(たとえば、beginなどのコマンド)や終了コマンド(たとえば、endなどのコマンド)をトリガとすることによって判別することができる。また、一連の頂点座標が配列として入力される場合には、配列インデックスの開始値と終了値とカウンタとを組み合わせることによって判別することとしてもよい。また、頂点種別判定部301は、頂点の種別として、後述する実効始点座標も判別できることとしてもよい。
頂点種別判定部301は、入力された頂点座標における頂点の種別を判別したのち、当該頂点座標を判別された結果に基づいて、先頭座標バッファ302および設定部320へ出力する。すなわち、先頭の頂点座標であると判別された頂点座標(たとえば、V0の頂点座標)は、先頭座標バッファ302へ出力されるとともに設定部320へ出力され、中間頂点座標(たとえば、V1〜V5の頂点座標)は、設定部320へ出力される。
先頭座標バッファ302は、頂点種別判定部301によって先頭の頂点座標であると判別された頂点座標を記憶する機能を有する。先頭座標バッファ302に記憶された先頭の頂点座標は、対象図形の描画処理が完了するまで保持される。先頭座標バッファ302は、該当する頂点座標を記憶したのち、当該頂点座標を先頭座標再利用部303へ出力する。また、先頭座標バッファ302は、先頭の頂点座標を記憶するとともに、後述する実効始点座標(たとえば、図5−1〜5−9中のC0、図8−1〜8−6中のV-1の座標)も記憶することとしてもよい。
先頭座標再利用部303は、頂点種別判定部301によって先頭の頂点座標と判別された頂点座標に対し、当該先頭の頂点座標を再利用する頂点座標として生成する機能を有する。先頭座標再利用部303に入力された先頭の頂点座標は、後述する終点座標生成部323へ出力される。
頂点座標バッファ304は、入力された一連の頂点座標を、頂点座標ごとに記憶する機能を有する。頂点座標バッファ304に記憶される頂点座標は、頂点座標が入力されるごとに書き換えられる。具体的には、入力された頂点座標に対し、一つ前に入力された頂点座標(以下、「前回頂点座標」という)が記憶される。具体的には、たとえば、頂点座標としてV2の頂点座標が新たに入力されてきた場合には、頂点座標バッファ304にはV2の前回頂点であるV1の頂点座標が記憶されている。
生成部310は、一連の頂点座標が入力されると、当該頂点座標と、当該頂点座標のX座標値を先頭の頂点座標のX座標値に変換した仮想頂点座標とを、頂点座標ごとにメモリ上に生成する機能を有する。生成部310は、具体的には、たとえば、頂点座標ストリーム340から入力された一連の頂点座標に基づいて、一連の頂点座標から頂点座標ごとに、頂点座標とその仮想頂点座標を生成する。
生成部310は、具体的には、仮想頂点座標生成部311によって構成される。仮想頂点座標生成部311は、後述する設定部320に設けられたX座標バッファ324に記憶された先頭の頂点座標のX座標(たとえば、V0X)、およびY座標バッファ325に記憶された中間頂点座標のY座標(たとえば、V1y)に基づいて、仮想頂点座標を生成し、生成した仮想頂点座標を設定部320へ出力する機能を有する。具体的には、たとえば、入力された頂点座標に対し、当該頂点座標における仮想頂点座標を、入力された頂点座標のX座標を先頭の頂点座標のX座標に変換することによって生成する。
より具体的には、たとえば、生成部310は、図1−1〜1−8で示したように、一連の頂点座標としてV0〜V6の頂点座標が入力されてきた場合に、V0〜V6の頂点座標および仮想頂点V1’〜V6’の仮想頂点座標をステンシルバッファ360のステンシルバッファ領域100上に生成する。
設定部320は、部分図形の作成対象となる2つの頂点座標を、先頭から順次連続する2つの頂点座標に設定するとともに、末尾の頂点座標まで設定された後に、部分図形の作成対象となる2つの頂点座標を、先頭および末尾の頂点座標に設定する機能を有する。設定部320は、具体的には、たとえば、描画される部分図形の頂点となる2つの頂点座標とその仮想頂点座標とを関連づけて設定し、描画部330へ出力する。
設定部320は、具体的には、生成部310によって生成された頂点座標とその仮想頂点座標とを受け付けた場合に、当該頂点座標を始点座標・中間頂点座標・終点座標のいずれかとして設定するとともに、当該頂点座標と連続する頂点座標とそれらの仮想頂点座標とを関連づけて設定し、関連づけたのちに描画部330へ出力する。
また、設定部320は、入力された一連の頂点座標に応じた部分図形がすべて描画されたのちに、先頭の頂点座標と末尾の頂点座標とを関連づけて設定することにより、最後の部分図形の頂点座標を設定する。最後の部分図形とは、終点座標(すなわち、始点座標)と、末尾の頂点座標と、当該末尾の頂点座標の仮想頂点座標とを頂点に有する部分図形である。
より具体的には、たとえば、設定部320は、図1−1〜1−8で示したように、部分図形の作成対象となる2つの頂点座標としてV0から順次、V0とV1、V1とV2、V2とV3、といったように関連づけて設定し、末尾の頂点座標であるV6まで設定されたのちには、V6とV0とを関連づけて設定する。
設定部320は、具体的には、始点座標生成部321と、中間頂点座標生成部322と、終点座標生成部323と、X座標バッファ324と、Y座標バッファ325と、頂点FIFO(First In,First Out)326とによって構成される。
始点座標生成部321は、入力された頂点座標から始点座標を生成する機能を有する。始点座標とは、具体的に、対象図形の描画の際に基準となる頂点の頂点座標である。始点座標生成部321は、具体的には、たとえば、入力された頂点座標の先頭の頂点座標に対し、当該頂点座標を始点座標と設定することによって、始点座標を生成する。始点座標生成部321は、始点座標を生成したのち、当該始点座標を頂点FIFO326へ出力する。
中間頂点座標生成部322は、中間頂点座標を生成する機能を有する。中間頂点座標とは、具体的に、対象図形の頂点座標のうち、始点座標以外の他の頂点座標である。中間頂点座標生成部322は、具体的には、たとえば、入力された頂点座標のうちの先頭の頂点座標以外の頂点座標に対し、中間頂点座標と設定することによって、中間頂点座標を生成する。中間頂点座標生成部322は、中間頂点座標を生成したのち、当該中間頂点座標を頂点FIFO326へ出力する。
終点座標生成部323は、入力された頂点座標から終点座標を生成する機能を有する。終点座標とは、具体的に、対象図形の描画処理において、最後に入力される頂点座標であり、始点座標と同一となる座標である。終点座標生成部323は、具体的には、たとえば、先頭座標再利用部303から入力された頂点座標に対し、終点座標と設定することによって、終点座標を生成する。終点座標生成部323は、終点座標を生成したのち、当該終点座標を頂点FIFO326へ出力する。
X座標バッファ324は、始点座標のX座標を記憶する機能を有する。具体的には、メモリアドレスが連続する方向を示すX軸に対する始点座標のX座標を記憶する。Y座標バッファ325は、中間頂点座標のY座標を記録する機能を有する。具体的には、X軸に直交する方向を示すY軸に対する中間頂点座標のY座標を記憶する。
頂点FIFO326は、各座標生成部311、321〜323から入力された各頂点座標を格納するとともに、格納された当該頂点座標を所定のタイミングで描画部330へ出力する機能を有する。頂点FIFO326に格納された頂点座標は、具体的には、たとえば、描画の開始指示があった場合に、格納された順に描画部330へ出力される。より具体的には、たとえば、描画される部分図形の頂点となる頂点座標とその仮想頂点座標を入力または生成された順に格納し、描画される部分図形の作成対象となる頂点座標とその仮想頂点座標とがすべて揃った場合に、当該頂点座標とその仮想頂点座標とを関連づけて、描画部330へ出力する。
より具体的には、たとえば、頂点FIFO326は、図1−2に示した部分図形を描画する場合には、頂点座標としてV1とV2の頂点座標、および仮想頂点座標としてV1’とV2’の仮想頂点座標がすべて揃ったタイミングで、これらの頂点座標および仮想頂点座標を描画部330へ出力する。
描画部330は、描画処理と消去処理とにより図形を出力する機能を有する。描画処理は、設定部320よって設定された2つの頂点座標とその仮想頂点座標とに囲まれた部分図形をメモリ上に描画する処理である。消去処理は、描画処理によって描画された部分図形にすでに作成済みの部分図形の一部または全部が重複する場合に重複する部分をメモリ上から消去する処理である。
たとえば、描画処理および消去処理は排他的論理和演算に基づいておこなわれ、描画処理によって描画された部分図形において、奇数回の重複する領域は描画されるとともに、偶数回の領域は消去処理によって消去される。
より具体的には、たとえば、描画部330は、図1−3で示したように、設定部320によって関連づけられて入力された連続する2つの頂点座標(たとえば、V2とV3の頂点座標)とその仮想頂点座標(たとえば、V2’とV3’の仮想頂点座標)とを頂点に有する部分図形を描画するとともに、重複する部分(たとえば、1A)をステンシルバッファ360のステンシルバッファ領域100上から消去する。
描画部330は、具体的には、図形描画部331と、画素論理演算部332とによって構成される。図形描画部331は、頂点FIFO326に格納された頂点座標およびその仮想頂点座標から、当該頂点座標とその仮想頂点座標とによって囲まれた部分図形を描画する機能を有する。具体的には、たとえば、設定部320によって関連づけられた頂点座標とその仮想頂点座標とから、当該頂点座標とその仮想頂点座標とを頂点に有する閉多角形をステンシルバッファ360のステンシルバッファ領域100上に描画する。
画素論理演算部332は、図形描画部331によって描画された部分図形に対し、排他的論理和演算をおこなう機能を有する。画素論理演算部332は、演算された結果を図形描画部331へ出力することにより、図形描画部331は、演算された結果に基づいた描画をおこなう。具体的には、図形描画部331によって描画された複数の部分図形において、奇数回部分図形が重複した領域では当該重複した領域に対応した図形が描画され、偶数回部分図形が重複した領域では当該重複した領域に対応した図形が消去される。
(実施の形態1の図形描画装置の処理手順)
つぎに、この発明の実施の形態1にかかる図形描画装置300の処理手順について説明する。図4は、この発明の実施の形態1にかかる図形描画装置の処理手順を示すフローチャートである。図4に示すフローチャートは、たとえば、アプリケーションから対象図形の描画の指示を受け付けた場合に開始される。
図形描画装置300は、まず、頂点座標が入力されるまで待機する(ステップS401:Noのループ)。具体的には、たとえば、アプリケーションによって生成された頂点座標ストリーム340から頂点座標入力インターフェース350を介して、図形描画装置300に頂点座標が入力されるまで待機する。
ステップS401において、頂点座標が入力された場合(ステップS401:Yes)、当該頂点座標を記憶する(ステップS402)。具体的には、図形描画装置300は、入力された頂点座標を頂点座標バッファ304に記憶する。
つぎに、入力された頂点座標が一連の頂点座標のうちの先頭の頂点座標であるか否かを判定する(ステップS403)。具体的には、図形描画装置300は、入力された頂点座標から頂点種別判定部301によって当該頂点座標の種別を判別することにより判定する。ステップS403において、入力された頂点座標が先頭の頂点座標であった場合(ステップS403:Yes)にはステップS404へ進み、先頭の頂点座標でなかった場合(ステップS403:No)にはステップS408へ進む。
ステップS403において、入力された頂点座標が先頭の頂点座標であると判定された場合(ステップS403:Yes)には、当該先頭の頂点座標を記憶する(ステップS404)。具体的には、図形描画装置300は、頂点種別判定部301によって先頭の頂点座標として判別された頂点座標を先頭座標バッファ302に記憶する。
ステップS404において、先頭の頂点座標を記憶したのち、記憶された先頭座標から始点座標を生成する(ステップS405)。具体的には、図形描画装置300は、先頭座標バッファ302に記憶された先頭の頂点座標から、始点座標生成部321によって始点座標を生成する。より具体的には、たとえば、先頭の頂点座標が(V0x,V0y)であった場合には、(V0x,V0y)を始点座標として、始点座標(V0x,V0y)を生成する。
ステップS405において、始点座標を生成したのち、生成した始点座標のX座標を記憶する(ステップS406)。具体的には、図形描画装置300は、始点座標生成部321によって生成された始点座標のX座標をX座標バッファ324に記憶する。より具体的には、たとえば、始点座標が(V0x,V0y)である場合には、始点座標(V0x,V0y)のX座標V0xがX座標バッファ324に記憶されることとなる。
ステップS406において、始点座標のX座標を記憶したのち、始点座標を頂点FIFOに格納する(ステップS407)。具体的には、図形描画装置300は、始点座標のX座標をX座標バッファ324に記憶したのち、始点座標を頂点FIFO326へ出力し、当該始点座標を頂点FIFO326に格納する。より具体的には、たとえば、始点座標が(V0x,V0y)である場合には、当該始点座標(V0x,V0y)が頂点FIFO326に格納されることとなる。
ステップS403において、入力された頂点座標が先頭の頂点座標でないと判定された場合(ステップS403:No)には、当該頂点座標から中間頂点座標を生成する(ステップS408)。具体的には、図形描画装置300は、先頭の頂点座標でないと判定された頂点座標から中間頂点座標生成部322によって中間頂点座標を生成する。より具体的には、たとえば、先頭の頂点座標でないと判定された頂点座標が(V1x,V1y)である場合には、先頭の頂点座標でないと判定された頂点座標(V1x,V1y)から中間頂点座標(V1x,V1y)を生成する。
ステップS408において、中間頂点座標を生成したのち、生成した中間頂点座標のY座標を記憶する(ステップS409)。具体的には、図形描画装置300は、中間頂点座標生成部322によって生成された中間頂点座標のY座標をY座標バッファ325に記憶する。より具体的には、たとえば、中間頂点座標が(V1x,V1y)である場合には、中間頂点座標(V1x,V1y)のY座標V1yがY座標バッファ325に記憶されることとなる。
ステップS409において、中間頂点座標のY座標を記憶したのち、中間頂点座標を頂点FIFOに格納する(ステップS410)。具体的には、図形描画装置300は、中間頂点座標のY座標をY座標バッファ325に記憶したのち、中間頂点座標を頂点FIFO326へ出力し、当該中間頂点座標を頂点FIFO326に格納する。より具体的には、たとえば、中間頂点座標が(V1x,V1y)である場合には、当該中間頂点座標(V1x,V1y)が頂点FIFO326に格納されることとなる。
ステップS407およびステップS410において、始点座標および中間頂点座標が頂点FIFOに格納されたのち、始点座標のX座標と中間頂点座標のY座標とから仮想頂点座標を生成する(ステップS411)。具体的には、図形描画装置300は、X座標バッファ324に記憶された始点座標のX座標と、Y座標バッファ325に記憶された中間頂点座標のY座標とから、仮想頂点座標生成部311によって仮想頂点座標を生成する。より具体的には、たとえば、X座標バッファ324に記憶されたX座標がV0xであり、Y座標バッファ325に記憶されたY座標がV1yである場合には、仮想頂点V1’の仮想頂点座標(V0x,V1y)が生成されることとなる。
ステップS411において、仮想頂点座標を生成したのち、生成された仮想頂点座標を頂点FIFOに格納する(ステップS412)。具体的には、図形描画装置300は、X座標バッファ324に記憶されたX座標と、Y座標バッファ325に記憶されたY座標とから仮想頂点座標生成部311によって仮想頂点座標を生成し、当該仮想頂点座標を頂点FIFO326へ出力することにより、当該仮想頂点座標を頂点FIFO326に格納する。より具体的には、たとえば、仮想頂点座標が(V0x,V1y)である場合には、当該仮想頂点座標(V0x,V1y)が頂点FIFO326に格納されることとなる。
ステップS412において、頂点FIFOに格納されている頂点座標から部分図形を描画する(ステップS413)。具体的には、図形描画装置300は、頂点FIFO326に格納された部分図形の作成対象となる連続する2つの頂点座標と、その仮想頂点座標を描画部330へ出力することによって、描画部330により、ステンシルバッファ360のステンシルバッファ領域上に部分図形を描画する。より具体的には、たとえば、頂点FIFO326に格納されている頂点座標が、(V0x,V0y)、(V1x,V1y)、(V0x,V1y)である場合には、V0、V1、V1’を頂点に有する部分図形がステンシルバッファ領域100上に描画されることとなる。
ステップS413において、部分図形を描画したのち、すべての頂点座標が入力されたか否かを判定する(ステップS414)。具体的には、図形描画装置300は、頂点種別判定部301によって末尾の頂点座標と判別された頂点座標が入力された場合に、すべての頂点座標が入力されたと判定する。
ステップS414において、すべての頂点座標が入力されたと判定された場合(ステップS414:Yes)には、最後の部分図形を描画する(ステップS415)。最後の部分図形を描画したのち、一連の処理を終了する。具体的には、最後の部分図形は、終点座標生成部323によって生成された終点座標と、末尾の頂点座標と、当該頂点座標の仮想頂点座標とに基づいて描画される。すべての頂点座標が入力されていないと判定された場合(ステップS414:No)には、ステップS401に戻り、同様の処理を繰り返す。
以上、説明したように、実施の形態1の図形描画装置300によれば、対象図形の描画に際して、頂点座標ストリーム340には存在しない仮想頂点V1’〜V6’の仮想頂点座標を便宜的に生成し、連続した2つの頂点座標および当該頂点座標に対して生成された仮想頂点座標を有する部分図形によって対象図形を構成するため、描画の際に関与する走査線を連続する2つの頂点座標間にある走査線だけに抑えることができ、メモリアドレスが連続する画素の比率を高めVRAMへのランダムアクセスを減らし、描画速度を向上させることができる。
(実施の形態2)
つぎに、この発明にかかる実施の形態2について説明する。実施の形態2においては、対象図形中にクリッピングが発生した場合における描画について説明する。なお、上述した実施の形態1と同一の構成については同一符号とし、説明を省略する。
クリッピングとは、公知の技術であるため詳細な説明は省略するが、特定された範囲の領域内(たとえば、特定された矩形の内部の領域)のみを描画の対象とする技術である。たとえば、入力された頂点座標が特定された範囲、すなわち、クリッピング領域に含まれない場合は、クリッピング領域の境界線を越えて、ラインをクリッピング領域外に引いたりすることはなく、クリッピング領域に含まれる箇所のみが描画される。
(実効頂点座標について)
実施の形態2において、図形描画装置は、たとえば、入力された一連の頂点座標のうち、クリッピング領域外となる頂点座標に対し、実効頂点座標を生成し、生成された実効頂点座標に基づいて描画をおこなう。
具体的には、入力された一連の頂点座標のうち、先頭の頂点座標がクリッピング領域外であった場合には、実施の形態1における始点座標の代わりとして実効始点座標を生成し、他の頂点座標がクリッピング領域外であった場合には、実施の形態1の中間頂点座標の代わりとして実効中間頂点座標を生成する。
実効始点座標は、たとえば、ステンシルバッファ領域上に設定されたクリッピング領域に初めて含まれる頂点座標と、当該頂点座標の直前の頂点座標とに基づいて算出されるクリッピング領域の境界線上の座標である。より具体的には、たとえば、クリッピング領域に初めて含まれる頂点座標と、当該頂点座標における前回頂点座標とを結んだ線分と、クリッピング領域の境界線との交点座標である。
実効中間頂点座標は、たとえば、ステンシルバッファ領域上に設定されたクリッピング領域と、連続する2つの頂点座標とに基づいて算出されるクリッピング領域の境界線上の座標である。より具体的には、クリッピング領域の境界線と、連続する2つの頂点座標を結んだ線分との交点座標である。
終点座標は、実効始点座標と同一の座標として設定される。すなわち、ステンシルバッファ上に設定されたクリッピング領域に初めて含まれる頂点座標と、当該頂点座標の直前の頂点座標とに基づいて算出されるクリッピング領域の境界線上の座標である。より具体的には、たとえば、ステンシルバッファ上に設定されたクリッピング領域に初めて含まれる頂点座標と、当該頂点座標の直前の頂点座標とを結んだ線分と、クリッピング領域の境界線との交点座標である。
なお、先頭の頂点座標がクリッピング領域に含まれず、実効始点座標が生成された場合において、図形描画装置は、入力された一連の頂点座標のうち、末尾の頂点座標が入力されたと判別された場合に、つぎの頂点座標として先頭の頂点座標を入力し、最後に入力される頂点座標として終点座標が入力される。すなわち、実施の形態2においては、最後の部分図形は、先頭の頂点座標、当該先頭の頂点座標に対する仮想頂点座標、終点座標を頂点に有する部分図形となる。
(実施の形態2の図形描画装置における描画)
つぎに、この発明の実施の形態2にかかる図形描画装置による対象図形の描画の流れについて説明する。図5−1〜5−9は、この発明の実施の形態2にかかる図形描画装置による対象図形の描画の流れを示す説明図(その1)〜(その9)である。図5に示すように、実施の形態2おいては、ステンシルバッファ領域100上にあらかじめクリッピング領域500が設定されている。
まず、図形描画装置には、頂点座標ストリームから頂点座標入力インターフェースを介して、V0〜V2の頂点座標が順次入力されるが、いずれもクリッピング領域500外の座標であり、V3の頂点座標(V3x,V3y)によって、初めて頂点座標がクリッピング領域500内に含まれる座標となる。このとき、図形描画装置は、V2とV3とを結んだ線分と、クリッピング領域500の境界線500aとの交点C0の交点座標(C0x,C0y)を算出し、実効始点座標(C0x,C0y)として設定し、(C0x,C0y)のX座標をX座標バッファ324に記憶する。
つぎに、図形描画装置は、実効始点座標(C0x,C0y)および中間頂点座標(V3x,V3y)に基づいて仮想頂点V3’の仮想頂点座標(C0x,V3y)を生成する。すなわち、仮想頂点座標(C0x,V3y)は、実効始点座標(C0x,C0y)とX座標を同じくし、中間頂点座標(V3x,V3y)とY座標を同じくする座標である。図形描画装置は、仮想頂点座標(C0x,V3y)を生成したのち、C0、V3’、V3を頂点に有する部分図形をステンシルバッファ領域100上に描画する(図5−1)。
つぎに、同様にして、図形描画装置に中間頂点座標(V4x,V4y)が入力される。ここで、(V4x,V4y)はクリッピング領域500外の座標であるため、図形描画装置は、V3とV4とを結んだ線分と、境界線500aとの交点C1の交点座標(C1x,C1y)を算出し、交点座標(C1x,C1y)を実効中間頂点座標(C1x,C1y)として生成する。実効中間頂点座標(C1x,C1y)を生成したのち、(C1x,C1y)のY座標をY座標バッファ325に記憶する。つぎに、図形描画装置は、実効始点座標(C0x,C0y)および実効中間頂点座標(C1x,C1y)に基づいて仮想頂点C1’の仮想頂点座標(C0x,C1y)を生成する。
すなわち、仮想頂点座標(C0x,C1y)は、実効始点座標(C0x,C0y)とX座標を同じくし、実効中間頂点座標(C1x,C1y)とY座標を同じくする座標である。図形描画装置は、仮想頂点C1’の仮想頂点座標(C0x,C1y)を生成したのち、V3、V3’、C1’、C1を頂点に有する部分図形を排他的論理和演算に基づいてステンシルバッファ領域100上に描画する。なお、領域5Aにおいては、偶数個の図形が重複するため、図形が消去される(図5−2)。
つぎに、同様にして、図形描画装置に中間頂点座標(V5x,V5y)が入力される。ここで、(V5x,V5y)はクリッピング領域500外の座標であるため、図形描画装置は、V4とV5とを結んだ線分と、境界線500aとの交点C2の交点座標(C2x,C2y)および交点C3の交点座標(C3x,C3y)をそれぞれ算出する。(C2x,C2y)および(C3x,C3y)を算出したのち、交点座標(C2x,C2y)および(C3x,C3y)を実効中間頂点座標(C2x,C2y)および(C3x,C3y)として生成し、実効中間頂点座標(C2x,C2y)および(C3x,C3y)のY座標をY座標バッファ325に記憶する。そして、実効始点座標(C0x,C0y)および実効中間頂点座標(C2x,C2y)および実効中間頂点座標(C3x,C3y)に基づいて、仮想頂点のC2’、C3’の仮想頂点座標(C0x,C2y)、(C0x,C3y)をそれぞれ生成する。
すなわち、仮想頂点座標(C0x,C2y)は実効始点座標(C0x,C0y)とX座標を同じくし実効中間頂点座標(C2x,C2y)とY座標を同じくする座標であり、仮想頂点座標(C0x,C3y)は実効始点座標(C0x,C0y)とX座標を同じくし実効中間頂点座標(C3x,C3y)とY座標を同じくする座標である。図形描画装置は、仮想頂点座標(C0x,C2y)および(C0x,C3y)を生成したのち、C2、C2’、C3’、C3を頂点に有する部分図形を排他的論理和演算に基づいてステンシルバッファ領域100上に描画する。なお、領域5Bにおいては、偶数個の図形が重複するため、図形が消去される(図5−3)。
つぎに、同様にして、図形描画装置に中間頂点座標(V6x,V6y)が入力される。ここで、(V6x,V6y)はクリッピング領域500内の座標であるため、頂点座標がクリッピング領域500外からクリッピング領域500内に流入する。図形描画装置は、V5とV6とを結んだ線分と、境界線500aとの交点C4の交点座標(C4x,C4y)を算出する。(C4x,C4y)を算出したのち、実効中間頂点座標(C4x,C4y)を生成し、(C4x,C4y)のY座標をY座標バッファ325に記憶する。そして、実効始点座標(C0x,C0y)および実効中間頂点座標(C4x,C4y)に基づいて、仮想頂点C4’の仮想頂点座標(C0x,C4y)を生成する。
すなわち、仮想頂点座標(C0x,C4y)は、実効始点座標(C0x,C0y)とX座標を同じくし、実効中間頂点座標(C4x,C4y)とY座標を同じくする座標である。図形描画装置は、仮想頂点座標(C0x,C4y)を生成したのち、C3、C3’、C4’、C4を頂点に有する部分図形を排他的論理和演算に基づいてステンシルバッファ領域100上に描画する(図5−4)。
つぎに、実効始点座標(C0x,C0y)および中間頂点座標(V6x,V6y)に基づいて、仮想頂点V6’の仮想頂点座標(C0x,V6y)を生成する。すなわち、仮想頂点座標(C0x,V6y)は、実効始点座標(C0x,C0y)とX座標を同じくし、中間頂点座標(V6x,V6y)とY座標を同じくする座標である。図形描画装置は、仮想頂点座標(C0x,V6y)を生成したのち、C4、C4’、V6’、V6を頂点に有する部分図形を排他的論理和演算に基づいてステンシルバッファ領域100上に描画する(図5−5)。
つぎに、図形描画装置は、末尾の頂点座標であると判別された(V6x,V6y)までの入力が終了した場合、再び、(V0x,V0y)を入力する。ここで、(V0x,V0y)はクリッピング領域500外の座標であるため、図形描画装置は、V6とV0とを結んだ線分と、境界線500aとの交点C5の交点座標(C5x,C5y)を算出する。(C5x,C5y)を算出したのち、実効中間頂点座標(C5x,C5y)を生成し、(C5x,C5y)のY座標をY座標バッファ325に記憶する。そして、実効始点座標(C0x,C0y)および中間頂点座標(C5x,C5y)に基づいて、仮想頂点C5’の仮想頂点座標(C0x,C5y)を生成する。
また、V6とV0とを結んだ線分は、C0(図5−6では、C0はC2’と重複しているため図示していない)からY軸方向に伸ばした直線と交差するため、図形描画装置は、V6とV0とを結んだ線分と、C0からY軸方向に伸ばした直線との交点R0の交点座標も算出する。図形描画装置は、仮想頂点C5’を生成、交点R0の交点座標を算出したのち、V6、V6’、R0を頂点に有する部分図形と、C5、C5’、R0を頂点に有する部分図形とを排他的論理和演算に基づいてステンシルバッファ領域100上に描画する。なお、領域5Cにおいては、偶数個の図形が重複するため、図形が消去される(図5−6)。
つぎに、図形描画装置は、V0から、X軸方向に境界線500aと交差するまで伸ばした線分と、境界線500aとの交点C6の交点座標(C6x,C6y)を算出する。(C6x,C6y)を算出したのち、実効中間頂点座標(C6x,C6y)を生成し、(C6x,C6y)のY座標をY座標バッファ325に記憶する。そして、実効始点座標(C0x,C0y)および中間頂点座標(C6x,C6y)に基づいて、仮想頂点C6’の仮想頂点座標(C0x,C6y)を生成する。図形描画装置は、仮想頂点座標(C0x,C6y)を生成したのち、C5、C5’、C6’、C6を頂点に有する部分図形を排他的論理和演算に基づいてステンシルバッファ領域100上に描画する(図5−7)。
つぎに、図形描画装置は、V1から、X軸方向に境界線500aと交差するまで伸ばした線分と、境界線500aとの交点C7の交点座標(C7x,C7y)を算出する。(C7x,C7y)を算出したのち、実効中間頂点座標(C7x,C7y)を生成し、(C7x,C7y)のY座標をY座標バッファ325に記憶する。そして、実効始点座標(C0x,C0y)および中間頂点座標(C7x,C7y)に基づいて、仮想頂点C7’の仮想頂点座標(C0x,C7y)を生成する。図形描画装置は、仮想頂点座標(C0x,C7y)を生成したのち、C6、C6’、C7’、C7を頂点に有する部分図形を排他的論理和演算に基づいてステンシルバッファ領域100上に描画する(図5−8)。
つぎに、図形描画装置は、公知の技術のため詳細な説明は省略するが、V2における幾何学的な処理に基づいて、C8の座標(C8x,C8y)を算出する。(C8x,C8y)を算出したのち、実効中間頂点座標(C8x,C8y)を生成し、(C8x,C8y)のY座標をY座標バッファ325に記憶する。そして、実効始点座標(C0x,C0y)および中間頂点座標(C8x,C8y)に基づいて、仮想頂点C8’の仮想頂点座標(C0x,C8y)を生成する。図形描画装置は、仮想頂点座標(C0x,C8y)を生成したのち、C7、C7’、C8’、C8を頂点に有する部分図形を排他的論理和演算に基づいてステンシルバッファ領域100上に描画する(図5−9)。
以上に説明したように、実施の形態2の図形描画装置において、入力された頂点座標から、実効頂点座標を生成するとともに、当該実効頂点座標に対する仮想頂点座標を生成することによって、V0〜V6を頂点として有する対象図形のうちのクリッピング領域500内に含まれた領域が描画されることとなる。
(実施の形態2の図形描画装置の機能的構成)
つぎに、この発明の実施の形態2にかかる図形描画装置の機能的構成について説明する。図6は、この発明の実施の形態2にかかる図形描画装置の機能的構成を示すブロック図である。図6に示すように、実施の形態2の図形描画装置600は、実施の形態1の図形描画装置300にクリッピング処理部610が組み合わされて構成される。すなわち、実施の形態2の図形描画装置600は、頂点種別判定部301と、先頭座標バッファ302と、先頭座標再利用部303と、頂点座標バッファ304と、生成部310と、設定部320と、描画部330と、クリッピング処理部610とを備える。
クリッピング処理部610は、クリップ判定部611と、判定結果バッファ612と、交点座標算出部613とによって構成される。クリップ判定部611は、入力された頂点座標に対し、当該頂点座標がクリッピング領域に含まれるか否かを判定する機能を有する。クリップ判定部611によって判定された判定結果は、判定結果バッファ612へ出力され、判定された頂点座標は、交点座標算出部613へ出力される。すなわち、頂点座標ストリーム340から頂点座標入力インターフェース350を介して入力された頂点座標は、まず、頂点種別判定部301によって頂点の種別が判別されたのち、つぎに、クリップ判定部611によって、クリッピング領域に含まれるかを判定される。
判定結果バッファ612は、クリップ判定部611によって判定された判定結果を記憶する機能を有する。判定結果バッファ612に記憶される判定結果は、図形描画装置600による部分図形の描画処理が1サイクルするごとに書き換えられる。
公知の技術のために、詳細な説明は省略するが、クリップ判定部611によって判定された判定結果および判定結果バッファ612に記憶された前回頂点座標の判定結果によって、交点座標があるか否かを判定する。交点座標が存在する場合、判定結果は、連続する2つの頂点座標に対し、それぞれ判定結果が異なる場合、連続する2つの頂点座標に対して、判定結果が双方ともクリッピング領域外と判定された場合の3つの場合がある。
交点座標算出部613は、交点座標を算出する機能を有する。交点座標とは、たとえば、クリッピング領域の境界線と、連続する2つの頂点座標を結んだ線分との交点の座標である。また、交点座標は、頂点座標からX軸方向またはY軸方向へ伸ばした直線と、クリッピング領域の境界線との交点の座標であってもよい。
(実施の形態2の図形描画装置の処理手順)
つぎに、この発明の実施の形態2にかかる図形描画装置600の処理手順について説明する。図7は、この発明の実施の形態2にかかる図形描画装置の処理手順を示すフローチャートである。図7に示すフローチャートは、たとえば、アプリケーションから対象図形の描画の指示を受け付けた場合に開始される。
図形描画装置600は、まず、頂点座標が入力されるまで待機する(ステップS701:Noのループ)。具体的には、たとえば、アプリケーションによって生成された頂点座標ストリーム340から頂点座標入力インターフェース350を介して、図形描画装置600に頂点座標が入力されるまで待機する。
ステップS701において、頂点座標が入力された場合(ステップS701:Yes)には、当該頂点座標を記憶する(ステップS702)。具体的には、図形描画装置600は、入力された頂点座標を頂点座標バッファ304に記憶する。
つぎに、入力された頂点座標が一連の頂点座標のうちの先頭の頂点座標であるか否かを判定する(ステップS703)。具体的には、図形描画装置600は、入力された頂点座標から頂点種別判定部301によって当該頂点座標の種別を判別することによって判定する。ステップS703において、入力された頂点座標が先頭の頂点座標であった場合(ステップS703:Yes)にはステップS704へ進み、先頭の頂点座標でなかった場合(ステップS703:No)にはステップS711へ進む。
ステップS703において、入力された頂点座標が先頭の頂点座標であると判定された場合(ステップS703:Yes)には、当該先頭の頂点座標を記憶する(ステップS704)。具体的には、図形描画装置600は、頂点種別判定部301によって先頭の頂点座標として判別された頂点座標を先頭座標バッファ302に記憶する。より具体的には、先頭の頂点座標が(V0x,V0y)であった場合には、先頭の頂点座標(V0x,V0y)を先頭座標バッファ302に記憶する。
ステップS704において、先頭の頂点座標を記憶したのち、当該先頭の頂点座標がクリッピング領域に含まれるか否かを判定する(ステップS705)。具体的には、図形描画装置600は、入力された頂点座標から頂点種別判定部301によって先頭の頂点座標であると判別された頂点座標に対して、クリップ判定部611によって当該先頭の頂点座標がクリッピング領域内に含まれる座標であるか否かを判定する。ステップS705において、先頭の頂点座標がクリッピング領域に含まれると判定された場合(ステップS705:No)にはステップS706へ進み、含まれないと判定された場合(ステップS705:Yes)にはステップS701へ戻る。
ステップS705において、先頭の頂点座標がクリッピング領域に含まれると判定された場合(ステップS705:No)には、前回頂点座標がクリッピング領域に含まれるか否かを判定する(ステップS706)。具体的には、図形描画装置600は、判定結果バッファ612に記憶された前回頂点座標の判定結果に基づいて判定する。ステップS706において、前回頂点座標がクリッピング領域に含まれると判定された場合(ステップS706:No)にはステップS708へ進み、含まれないと判定された場合(ステップS706:Yes)にはステップS707へと進む。なお、入力された頂点座標が先頭の頂点座標の場合には、前回頂点座標が存在しないため、前回頂点座標がクリッピング領域に含まれると解釈して、ステップS708へと進む。
ステップS706において、前回入力された頂点座標がクリッピング領域内に含まれないと判定された場合(ステップS706:Yes)には、交点座標を算出する(ステップS707)。具体的には、図形描画装置600は、入力された頂点座標と前回頂点座標との少なくともいずれか一方に基づいて交点座標算出部613によって交点座標を算出する。より具体的には、たとえば、図形描画装置600は、入力された頂点座標と前回頂点座標とを結んだ線分と、境界線500aとの交点座標を算出する。
ステップS706およびステップS707において、入力された先頭の頂点座標または算出された交点座標から、実効始点座標を生成する(ステップS708)。具体的には、図形描画装置600は、入力された先頭の頂点座標または算出された交点座標から、入力された先頭の頂点座標または算出された交点座標を始点座標生成部321へ入力することにより、実効始点座標を生成する。より具体的には、先頭の頂点座標がクリッピング領域に含まれると判定された場合には、当該先頭の頂点座標を実効始点座標として生成し、先頭の頂点座標がクリッピング領域内に含まれないと判定された場合には、ステップS707において算出された交点座標を実効始点座標として生成する。
ステップS708において、実効始点座標が生成されたのち、生成した実効始点座標のX座標を記憶する(ステップS709)。具体的には、図形描画装置600は、始点座標生成部321によって生成された実効始点座標のX座標をX座標バッファ324に記憶する。より具体的には、たとえば、実効始点座標が(C0x,C0y)である場合には、実効始点座標(C0x,C0y)のX座標C0xがX座標バッファ324に記憶されることとなる。なお、この際に、生成された実効始点座標(C0x,C0y)自体も先頭座標バッファ302に記憶する。
ステップS709において、実効始点座標のX座標を記憶したのち、実効始点座標を頂点FIFOに格納する(ステップS710)。具体的には、図形描画装置600は、実効始点座標のX座標をX座標バッファ324に記憶したのち、実効始点座標を頂点FIFO326へ出力し、当該実効始点座標を頂点FIFO326に格納する。より具体的には、たとえば、実効始点座標(C0x,C0y)である場合には、当該実効始点座標(C0x,C0y)が頂点FIFO326に格納されることとなる。
ステップS703において、先頭の頂点座標でないと判定された場合(ステップS703:No)には、すでに実効始点座標があるか否かを判定する(ステップS711)。具体的には、図形描画装置600は、先頭座標バッファ302にすでに実効始点座標に該当する頂点座標が記憶されているか否かによって判定する。ステップS711において、すでに実効始点座標があると判定された場合(ステップS711:Yes)にはステップS712へと進み、実効始点座標がないと判定された場合には(ステップS711:No)ステップS705へと進む。
ステップS711において、すでに実効始点座標があると判定された場合(ステップS711:Yes)には、入力された頂点座標がクリッピング領域内に含まれるか否かを判定する(ステップS712)。具体的には、図形描画装置600は、入力された頂点座標に対して、クリップ判定部611によって判定する。ステップS712において、入力された頂点座標がクリッピング領域に含まれると判定された場合(ステップS712:No)にはステップS715へ進み、含まれないと判定された場合(ステップS712:Yes)にはステップS713へと進む。
ステップS712において、頂点座標がクリッピング領域内に含まれない(ステップS712:Yes)と判定された場合には、交点座標があるか否かを判定する(ステップS713)。具体的には、図形描画装置600は、入力された頂点座標に対するクリップ判定部611によって判定された判定結果および判定結果バッファ612に記憶された前回頂点座標の判定結果に基づいて、判定する。交点座標があると判定された場合(ステップS713:Yes)にはステップS714へ進み、交点座標がないと判定された場合(ステップS713:No)にはステップS701へ戻る。
ステップS713において、交点座標があると判定された場合(ステップS713:Yes)には、交点座標を算出する(ステップS714)。具体的には、図形描画装置600は、入力された頂点座標と前回頂点座標のうちの少なくともいずれか一方の頂点座標と、境界線500aとに基づいて交点座標を算出する。より具体的には、入力された頂点座標と前回頂点座標とを結んだ線分と境界線500aとの交点座標とを算出する。
ステップS714において、交点座標を算出したのち、交点座標を実効中間頂点として生成する(ステップS715)。具体的には、図形描画装置600は、交点座標算出部613によって算出された交点座標を中間頂点座標生成部322へ出力し、算出された交点座標から中間頂点座標生成部322によって実効中間頂点座標を生成する。
ステップS712およびステップS714において、入力された頂点座標または算出された交点座標から、実効中間頂点座標を生成する(ステップS715)。具体的には、図形描画装置600は、入力された頂点座標または算出された交点座標を中間頂点座標生成部322へ入力することにより、実効中間頂点座標を生成する。より具体的には、入力された頂点座標がクリッピング領域に含まれると判定された場合には、当該頂点座標を実効中間頂点座標として生成し、入力された頂点座標がクリッピング領域内に含まれないと判定された場合には、ステップS714において算出された交点座標を実効中間頂点座標として生成する。
ステップS715において、実効中間頂点座標が生成されたのち、生成した実効中間頂点座標のY座標を記憶する(ステップS716)。具体的には、図形描画装置600は、中間頂点座標生成部322によって生成された実効中間頂点座標のY座標をY座標バッファ325に記憶する。より具体的には、たとえば、実効中間頂点座標が(C1x,C1y)である場合には、実効中間頂点座標(C1x,C1y)のY座標C1yがY座標バッファ325に記憶されることとなる。
ステップS716において、実効中間頂点座標のY座標を記憶したのち、実効中間頂点座標を頂点FIFOに格納する(ステップS717)。具体的には、図形描画装置600は、実効中間頂点座標のY座標をY座標バッファ325に記憶したのち、実効中間頂点座標を頂点FIFO326へ出力し、当該実効中間頂点座標を頂点FIFO326に格納する。より具体的には、たとえば、実効中間頂点座標(C1x,C1y)である場合には、当該実効中間頂点座標(C1x,C1y)が頂点FIFO326に格納されることとなる。
ステップS710およびステップS717において、実効始点座標および実効中間頂点座標が頂点FIFOに格納されたのち、実効始点座標のX座標と実効中間頂点座標のY座標とから仮想頂点座標を生成する(ステップS718)。具体的には、図形描画装置600は、X座標バッファ324に記憶された実効始点座標のX座標と、Y座標バッファ325に記憶された実効中間頂点座標のY座標とから、仮想頂点座標生成部311によって仮想頂点座標を生成する。より具体的には、たとえば、X座標バッファ324に記憶されたX座標がC0xであり、Y座標バッファ325に記憶されたY座標がC1yである場合には、仮想頂点C1’の仮想頂点座標(C0x,C1y)が生成されることとなる。
ステップS718において、仮想頂点座標を生成したのち、生成された仮想頂点座標を頂点FIFOに格納する(ステップS719)。具体的には、図形描画装置600は、X座標バッファ324に記憶されたX座標と、Y座標バッファ325に記憶されたY座標とから仮想頂点座標生成部311によって仮想頂点座標を生成し、当該仮想頂点座標を頂点FIFO326へ出力することにより、当該仮想頂点座標を頂点FIFO326に格納する。より具体的には、たとえば、仮想頂点座標が(C0x,C1y)である場合には、当該仮想頂点座標(C0x,C1y)が頂点FIFO326に格納されることとなる。
ステップS719において、頂点FIFOに格納されている頂点座標から部分図形を描画する(ステップS720)。具体的には、図形描画装置600は、頂点FIFO326に格納された部分図形の作成対象となる連続する2つの頂点座標と、その仮想頂点座標を描画部330へ出力することによって、描画部330により、ステンシルバッファ360のステンシルバッファ領域上に部分図形を描画する。より具体的には、たとえば、頂点FIFO326に格納されている頂点が、C0、C1、C1’である場合には、C0、C1、C1’を頂点に有する部分図形がステンシルバッファ領域100上に描画されることとなる。
ステップS720において、部分図形を描画したのち、すべての頂点座標が入力されたか否かを判定する(ステップS721)。具体的には、図形描画装置600は、頂点種別判定部301によって末尾の頂点座標と判別された頂点座標が入力された場合に、すべての頂点座標が入力されたと判定する。
ステップS721において、すべての頂点座標が入力されたと判定された場合(ステップS721:Yes)には、最後の部分図形を描画する(ステップS722)。最後の部分図形を描画したのち、一連の処理を終了する。具体的には、最後の部分図形は、終点座標生成部323によって生成された終点座標(すなわち、実効始点座標)と、クリッピング領域内に初めて含まれる頂点座標の前回頂点座標と、当該前回頂点座標の仮想頂点座標とに基づいて描画される。すべての頂点座標が入力されていないと判定された場合(ステップS721:No)には、ステップS701に戻り、同様の処理を繰り返す。
以上に説明したように、実施の形態2の図形描画装置600によれば、対象図形がクリッピング領域外の頂点座標を有する場合においても、各種実効頂点座標を算出し、実効頂点座標を用いることにより、実施の形態1と同様の部分図形を描画することができるため、実施の形態1と同様の効果を得ることができる。
(実施の形態3)
つぎに、本発明の実施の形態3について説明する。実施の形態2において、実効始点座標は、クリッピング領域内に初めて含まれる頂点座標と、当該頂点座標における前回頂点座標とに基づいて算出された交点座標を実効始点座標とした。実施の形態3においては、実効始点座標がクリッピング領域に含まれる任意の座標である場合の一例について説明する。なお、上述した実施の形態1および実施の形態2と同一の構成については同一符号とし、説明を省略する。
まず、この発明の実施の形態3にかかる図形描画装置600による対象図形の描画の流れについて説明する。図8−1〜8−6は、この発明の実施の形態3にかかる図形描画装置による対象図形の描画の流れを示す説明図(その1)〜(その6)である。まず、図形描画装置600には、頂点座標ストリームから頂点座標入力インターフェースを介して、頂点座標としてV0〜V2の頂点座標が入力されるが、いずれもクリッピング領域500外である。たとえば、このとき、図形描画装置600は、V0の前に実効始点座標として(V-1x,V-1y)を追加する。(V-1x,V-1y)は、クリッピング領域500に含まれる任意の座標であり、実施の形態3においては、一例として、境界線500a上であり、(V0x,V0y)と同じY座標を有する座標とする。
(V-1x,V-1y)が追加されると、(V-1x,V-1y)を実効始点座標として、実施の形態2と同様の手順で処理をおこなう。すなわち、(V3x,V3y)によって、初めて頂点がクリッピング領域500内となる。このとき、図形描画装置600は、V2とV3とを結んだ線分と、境界線500aとの交点C0の交点座標(C0x,C0y)を算出する。(C0x,C0y)を算出したのち、実効中間頂点座標(C0x,C0y)を生成し、(C0x,C0y)のY座標をY座標バッファ325に記憶する。そして、(V-1x,V-1y)および(C0x,C0y)に基づいて、仮想頂点C0’の仮想頂点座標(V-1x,C0y)を生成する。
すなわち、仮想頂点座標(V-1x,C0y)は、実効始点座標(V-1x,V-1y)とX座標を同じくし、実効中間頂点座標(C0x,C0y)とY座標を同じくする座標である。図形描画装置600は、仮想頂点座標(V-1x,C0y)を生成したのち、V3、V3’、C0’、C0を頂点に有する部分図形を排他的論理和演算に基づいてステンシルバッファ領域100上に描画する(図8−1)。
つぎに、同様にして、図形描画装置600に中間頂点座標(V4x,V4y)が入力される。ここで、(V4x,V4y)はクリッピング領域500外の座標であるため、図形描画装置300は、V3とV4とを結んだ線分と、境界線500aとの交点C1の交点座標(C1x,C1y)を算出する。(C1x,C1y)を算出したのち、実効中間頂点座標(C1x,C1y)を生成し、(C1x,C1y)のY座標をY座標バッファ325に記憶する。そして、実効始点座標(V-1x,V-1y)および実効中間頂点座標(C1x,C1y)に基づいて、仮想頂点C1’の仮想頂点座標(V-1x,C1y)を生成する。
すなわち、仮想頂点座標(V-1x,C1y)は、実効始点座標(V-1x,V-1y)とX座標を同じくし、実効中間頂点座標(C1x,C1y)とY座標を同じくする座標である。図形描画装置600は、仮想頂点座標(V-1x,C1y)を生成したのち、V3、V3’、C1’、C1を頂点に有する部分図形を排他的論理和演算に基づいてステンシルバッファ領域100上に描画する。なお、領域8Aにおいては、偶数個の図形が重複するため、図形が消去される(図8−2)。
つぎに、同様にして、図形描画装置600に中間頂点座標(V5x,V5y)が入力される。ここで、(V5x,V5y)はクリッピング領域500外の座標であるため、図形描画装置600は、V4とV5とを結んだ線分と、境界線500aとの交点C2およびC3の交点座標(C2x,C2y)、(C3x,C3y)をそれぞれ算出する。(C2x,C2y)および(C3x,C3y)を算出したのち、実効中間頂点座標(C2x,C2y)および(C3x,C3y)を生成し、(C2x,C2y)および(C3x,C3y)のY座標をY座標バッファ325に記憶する。そして、(V-1x,V-1y)および(C2x,C2y)および(C3x,C3y)に基づいて、仮想頂点C2’およびC3’の仮想頂点座標(V-1x,C2y)および(V-1x,C3y)をそれぞれ生成する。
すなわち、仮想頂点座標(V-1x,C2y)は実効始点座標(V-1x,V-1y)とX座標を同じくし実効中間頂点座標(C2x,C2y)とY座標を同じくする座標であり、仮想頂点座標(V-1x,C3y)は実効始点座標(V-1x,V-1y)とX座標を同じくし実効中間頂点座標(C3x,C3y)とY座標を同じくする座標である。図形描画装置600は、仮想頂点座標(V-1x,C2y)および(V-1x,C3y)を生成したのち、C2、C2’、C3’、C3を頂点に有する部分図形を排他的論理和演算に基づいてステンシルバッファ領域100上に描画する。なお、領域8Bにおいては、偶数個の図形が重複するため、図形が消去される(図8−3)。
つぎに、同様にして、図形描画装置600に中間頂点座標(V6x,V6y)が入力される。ここで、(V6x,V6y)はクリッピング領域500内の座標であるため、頂点座標がクリッピング領域500外からクリッピング領域500内に流入する。図形描画装置600は、V5とV6とを結んだ線分と、境界線500aとの交点C4の交点座標(C4x,C4y)を算出する。(C4x,C4y)を算出したのち、実効中間頂点座標(C4x,C4y)を生成し、(C4x,C4y)のY座標をY座標バッファ325に記憶する。そして、実効始点座標(V-1x,V-1y)および実効中間頂点座標(C4x,C4y)に基づいて、仮想頂点C4’の仮想頂点座標(V-1x,C4y)を生成する。
すなわち、仮想頂点座標(V-1x,C4y)は、実効始点座標(V-1x,V-1y)とX座標を同じくし、実効中間頂点座標(C4x,C4y)とY座標を同じくする座標である。図形描画装置600は、仮想頂点座標(V-1x,C4y)を生成したのち、C3、C3’、C4’ 、C4を頂点に有する部分図形を排他的論理和演算に基づいてステンシルバッファ領域100上に描画する(図8−4)。
つぎに、実効始点座標(V-1x,V-1y)および中間頂点座標(V6x,V6y)に基づいて、仮想頂点V6’の仮想頂点座標(V-1x,V6y)を生成する。すなわち、仮想頂点座標(V-1x,V6y)は、実効始点座標(V-1x,V-1y)とX座標を同じくし、中間頂点座標(V6x,V6y)とY座標を同じくする座標である。図形描画装置600は、仮想頂点座標(V-1x,V6y)を生成したのち、C4、C4’、V6’、V6を頂点に有する部分図形を排他的論理和演算に基づいてステンシルバッファ領域100上に描画する(図8−5)。
つぎに、図形描画装置600は、最後の頂点座標であるV6の処理が終わった場合、終点座標として、再び、V0を入力する。図形描画装置600は、V0が入力されると、終点座標(V0x,V0y)と中間頂点座標(V6x,V6y)とを結んだ線分と境界線500aとの交点C5の交点座標(C5x,C5y)を算出する。(C5x,C5y)が算出されると、図形描画装置600は、実効中間頂点座標(C5x,C5y)を生成し、C5、V6’、V6を頂点に有する部分図形を排他的論理和演算に基づいてステンシルバッファ領域100上に描画する。なお、領域8Cにおいては、偶数個の図形が重複するため、図形が消去される(図8−6)。
以上に説明したようにして、入力された頂点座標から、当該頂点座標を頂点として有する対象図形のうちのクリッピング領域500内に含まれた領域がステンシルバッファ領域100上に描画される。
実施の形態3においては、まず、最初の処理として、クリッピング領域500内の任意の座標が取得され、取得された任意の座標を先頭の頂点座標として、図形描画装置600に入力される点だけが実施の形態2と異なる点である。すなわち、クリッピング領域500内の任意の座標が取得され、取得された任意の座標を先頭の頂点座標として、図形描画装置600に入力され、以下は、実施の形態2と同一の処理となるために、処理手順の説明は省略する。
取得される任意の座標は、アプリケーションにより決定され、決定された座標を取得することとしてもよいし、図形描画装置600自身により描画がもっとも手順が少なくなると推定した座標を取得することとしてもよい。
以上に説明したように、実施の形態3の図形描画装置600によれば、実施の形態2と同様に、入力された頂点座標から、実効頂点座標を生成するとともに、当該実効頂点座標に対する仮想頂点V1’〜V6’を生成することによって、V0〜V6を頂点として有する対象図形のうちのクリッピング領域500内に含まれた領域が描画されることとなる。
また、実施の形態3の図形描画装置600によれば、実効始点座標としてクリッピング領域500内の最適な座標を設定することにより、対象図形を構築する部分図形の個数を減らすことができ、実施の形態2に比べ、より高速に対象図形を描画することができる。
この発明によれば、連続した2つの頂点および当該頂点座標に対して生成された仮想頂点座標を有する部分図形によって対象図形を構築するため、描画の際に関与する走査線を連続する2つの頂点座標間にある走査線だけに抑えることができるため、VRAMへのランダムアクセスを減らし、描画速度を向上させることができる。
なお、本実施の形態で説明した図形描画方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネットなどのネットワークを介して配布することが可能な媒体であってもよい。