(57)【要約】【課題】メモリ容量を削減し、処理時間を向上させることのできる頂点管理方式を適用した画像描画装置を提供する。【解決手段】頂点情報を格納するメモリを頂点格納用RAM1個とする。頂点格納用RAMは、クリッピング前の初期頂点を格納する領域と、クリッピングによって生じた頂点を格納する新頂点格納領域とからなる。各頂点情報に対応して、その頂点が基準の頂点か否かを示す先頭フラグと、その頂点が有効な頂点か否かを示す有効フラグと、頂点のつながりを示すチェーンポインタとを設ける。また、新頂点が発生した場合の格納領域のアドレスを示す空きポインタを設ける。【選択図】図６
2010198144.tif 000002
【特許請求の範囲】
【請求項１】
3次元図形をクリッピング処理を行う画像描画装置において、
該3次元図形の頂点、及び、該クリッピング処理によって発生あるいは消滅する頂点の情報を格納する第1の格納手段と、
該第1の格納手段の格納領域のそれぞれに対応して、頂点の有効・無効を示す有効フラグと、頂点のつながりであるチェーンを構成する頂点のうち、次に読み出す頂点情報の該第1の格納手段の格納アドレスを示すチェーンポインタと、該チェーンを構成する最初の頂点であるか否かを示す先頭フラグと、該クリッピング処理により新たに発生する新頂点を書き込む該第1の格納手段の格納アドレスを示す空きポインタとを格納する第2の格納手段と、
該クリッピング処理により頂点が発生した場合に、該空きポインタの示す格納アドレスに該発生した頂点の情報を書き込み、対応する該有効フラグを有効と設定すると共に、該先頭フラグ、該チェーンポインタ、該空きポインタを更新し、該クリッピング処理により頂点が消滅した場合には、該消滅した頂点に対応する該有効フラグを無効に設定すると共に、該先頭フラグ、該チェーンポインタを更新する管理手段と、
を備えることを特徴とする画像描画装置。
【請求項２】
前記空きポインタの示す格納アドレスは、前記第１の格納手段の格納領域において、頂点情報が格納されておらず、かつ、対応する有効フラグが無効となっている一番小さいアドレス値とすることを特徴とする請求項１に記載の画像描画装置。
【請求項３】
前記クリッピング処理によって発生・消滅する頂点及び該クリッピング処理によって変化しない頂点によって構成される図形は、前記有効フラグが有効となっている頂点のチェーン構成により表現されることを特徴とする請求項１に記載の画像描画装置。
【請求項４】
3次元図形を描画するに当たりクリッピング処理を行う、該3次元図形の頂点、及び、該クリッピング処理によって発生あるいは消滅する頂点の情報を格納する第1の格納手段と、  該第1の格納手段の格納領域のそれぞれに対応して、頂点の有効・無効を示す有効フラグと、頂点のつながりであるチェーンを構成する頂点のうち、次に読み出す頂点情報の該第1の格納手段の格納アドレスを示すチェーンポインタと、該チェーンを構成する最初の頂点であるか否かを示す先頭フラグと、該クリッピング処理により新たに発生する新頂点を書き込む該第1の格納手段の格納アドレスを示す空きポインタとを格納する第2の格納手段とを備える画像描画装置における頂点管理方法であって、
該クリッピング処理により頂点が発生した場合に、該空きポインタの示す格納アドレスに該発生した頂点の情報を書き込み、対応する該有効フラグを有効と設定すると共に、該先頭フラグ、該チェーンポインタ、該空きポインタを更新し、該クリッピング処理により頂点が消滅した場合には、該消滅した頂点に対応する該有効フラグを無効に設定すると共に、該先頭フラグ、該チェーンポインタを更新する
ことを特徴とする頂点管理方法。
【請求項５】
コンピュータに、
3次元図形の頂点、及び、クリッピング処理によって発生あるいは消滅する頂点の情報を格納する第1の格納手段と、
該第1の格納手段の格納領域のそれぞれに対応して、頂点の有効・無効を示す有効フラグと、頂点のつながりであるチェーンを構成する頂点のうち、次に読み出す頂点情報の該第1の格納手段の格納アドレスを示すチェーンポインタと、該チェーンを構成する最初の頂点であるか否かを示す先頭フラグと、該クリッピング処理により新たに発生する新頂点を書き込む該第1の格納手段の格納アドレスを示す空きポインタとを格納する第2の格納手段と、
該クリッピング処理により頂点が発生した場合に、該空きポインタの示す格納アドレスに該発生した頂点の情報を書き込み、対応する該有効フラグを有効と設定すると共に、該先頭フラグ、該チェーンポインタ、該空きポインタを更新し、該クリッピング処理により頂点が消滅した場合には、該消滅した頂点に対応する該有効フラグを無効に設定すると共に、該先頭フラグ、該チェーンポインタを更新する管理手段と、
からなる構成を実現させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像描画装置に関する。
【背景技術】
【０００２】
一連の描画アルゴリズムの中に、ViewVolimeClip処理(以下、VCLiP処理)がある。これは、いわば3次元のクリッピング処理であり、Xmin, Xmax, Ymin, Ymax, Zmin, Zmax, Wminの7つの面に対して行われる。Xminは、描画範囲のX軸方向の最小値であり、Xmaxは、X軸方向の最大値である。Yminは、描画範囲のY軸方向の最小値であり、Ymaxは、Y軸方向の最大値である。Zminは、描画範囲のZ軸方向の最小値であり、Zmaxは、Z軸方向の最大値である。Wminは、描画範囲の覗き込むカメラの位置から描画される空間の先端までの距離を示し、常に正の値である。
【０００３】
また、一つの図形に対してVCLiPを行う場合、ある面に対して図形を形成する全ての辺をクリッピングし、ある面での一通りのクリッピングが終了したならば、次の面で全辺をクリッピング処理するという手順を繰り返す。
【０００４】
このVCLiP処理の過程において、新たな頂点が生成されたり、今まであった頂点が消滅したりする。三角形に対してVCLiPが発生した場合、VCLiP処理後の図形の多くは多角形となるが、三角形が図形の基本処理単位であるためこの多角形を三角形に区切る必要がある。この時、基準となる頂点を常に共有する形で三角形を描画していく「TriangleFan」を形成するように頂点読み出しの順序を決定する。具体的には、ある頂点を基準に多角形を構成する頂点を時計回り(或いは、その逆)の順番で読み出すことになる。有効頂点を順序どおり読み出すためには、頂点管理が必要となる。
【０００５】
従来の技術では、この頂点管理方法にダブルバッファ方式を用いていた。
図１にVCLiP処理の概要を示す。
図１において、カメラ10から３次元図形を見た画面を得る場合、３次元図形を投影面であるWindow11に投影して表示する。ViewVolume12は、投影面に図形が描かれる範囲を示す。ViewVolumeClipは、ViewVolume12からはみ出た部分を削除する処理である。今、X軸が横軸で、Y軸が縦軸で、Z軸が奥行きとなっている。したがって、ViewVolume12は、上下、左右、前後の所定の場所で削除された形になっている。Wminは、図１には、描かれていないが、カメラ10のレンズ部分から前方の、どの位置に投影面が見えるかを表すものである。通常は、Wminは、1.0の値を取る。Wminの値が大きくなると、Window11に投影される図形は小さくなり(遠くに見える)、Wminの値が小さくなると、Window11に投影される図形は大きくなる(近くに見える)。このようにして規定されたViewVolume12に含まれる図形のみをWindow11に投影して、描画する。
【０００６】
図２にTriangleFanのイメージを示す。
TriangleFanでは、多角形を三角形に分割する際、1つの頂点をすべての三角形が共有するように分割する。図２においては、頂点V0が共有される頂点である。この頂点V0から時計周りに生成された頂点を順番付ける。図２の場合、頂点の順番は、V0->V1->V2->V3->V4->V5である。そして、頂点V0と、この順番で示される連続した2頂点とで三角形を構成する。
【０００７】
図３にViewVolumeClip処理手順のイメージを示す。
図３では、XminとXmaxでViewVolumeClip処理を行う場合を示している。三角形V0-V1-V2をクリッピングする場合を説明する。まず、Xminでクリッピングを行う。頂点の順番は、V0から時計回りに順番が付けられる。これに従い、辺の順番も、辺V0-V1が1番目で、辺V1-V2が2番目で、辺V2-V0が三番目である。この順番に、各辺がXmin面と交差するか否かを判断する。図２（ａ）では、辺V0-V1が点A1でXmin面と交差し、辺V1-V2が点A2でXmin面と交差している。このクリッピングにより、三角形V0-V1-V2は、四角形V0-A1-A2-V2となる。頂点の順番は、やはりV0から時計回りに与える。今の場合、頂点の順番は、V0->A1->A2->V2である。
【０００８】
次に、図３（ｂ）に示されるように、Xmax面でクリッピング処理を行う。クリッピング処理の順番は、辺V0-A1とXmax面、辺A1-A2とXmax面、辺A2-V2とXmax面、辺V2-V0とXmax面となる。この結果、辺A2-V2が点A3でXmax面と交差し、辺V2-V0が点A4でXmax面と交差している。頂点の順番は、時計回りに、V0->A1->A2->A3->A4である。
【０００９】
図４に三角形におけるViewVolumeClip処理イメージを示す。
図４（ａ）の三角形をXmin面でクリッピングするとする。図４（ａ）の三角形の頂点の順番は、時計回りにV0->V1->V2である。図４（ｂ）に示されるように、辺V0-V1と辺V1-V2がXmin面と交差して、新たに点A1,A2が生成されている。辺の処理の順番は、図３で説明したとおりである。したがって、頂点の順番は、V0->A1->A2->V2である。次に、この頂点の順番に従って、頂点V0を共有するように、三角形を構成する。これをTriangleFanを形成するという。すると、三角形V0-A1-A2と三角形V0-A2-V2が形成される。
【００１０】
図５に従来技術(ダブルバッファ方式)の処理イメージを示す。
図５においては、仮に、バッファは、10頂点分の頂点データを格納できるとしている。バッファは、BUF_1とBUF_2の2つを設けるダブルバッファ方式である。図５（ａ）の初期状態では、BUF_1にV0,V1,V2の３つの頂点情報が格納されている。図４（ｂ）のように、クリッピング処理により、新たに頂点A1,A2が生成されたとする。図５（ｂ）のように、まず、V0はそのままなので、BUF_1からBUF_2に頂点V0の情報を転写する。次に、頂点V1が削除されて、頂点A1と頂点A2が発生したので、頂点V1の情報を転写する代わりに、頂点A1,A2の情報をBUF_2に追加する。次に、頂点V2は、そのままなので、頂点A2の情報の次に、頂点V2の情報を転写する。このように、1面のクリッピング処理中に、他方のバッファに頂点情報の追加、転写を行う。そして、各面のクリッピング処理ごとにバッファを切り替えながら、以上のような処理を繰り返す。このような処理により、すべてのクリッピングが終わると、最終的な図形の頂点が時計回りの方向の順番に、バッファの上から配列されるようになる。
【００１１】
特許文献１には、3次元モデルデータのクリッピング処理を高速且つ低コストで行う技術が開示されている。
特許文献２には、無効なパケットを即座に破棄するネットワーク装置が開示されている。
【００１２】
特許文献３には、3次元クリップの判定処理を高速に行う技術が開示されている。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００４−１０２８４１号公報
【特許文献２】特開平１０−３２２３４７号公報
【特許文献３】特開２００１−２４３４９４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
従来のダブルバッファ方式では、処理は比較的簡単で済む反面、メモリを2面持つ必要があるために、メモリ容量が余計に多く必要となる。また、メモリ間でのデータの受け渡しが頻繁に行われるために、処理時間が余計にかかってしまう。
【００１５】
本発明の課題は、メモリ容量を削減し、処理時間を向上させることのできる頂点管理方式を適用した画像描画装置を提供することである。
【課題を解決するための手段】
【００１６】
本発明の一側面における画像描画装置は、3次元図形をクリッピング処理を行う画像描画装置において、該3次元図形の頂点、及び、該クリッピング処理によって発生あるいは消滅する頂点の情報を格納する第1の格納手段と、該第1の格納手段の格納領域のそれぞれに対応して、頂点の有効・無効を示す有効フラグと、頂点のつながりであるチェーンを構成する頂点のうち、次に読み出す頂点情報の該第1の格納手段の格納アドレスを示すチェーンポインタと、該チェーンを構成する最初の頂点であるか否かを示す先頭フラグと、該クリッピング処理により新たに発生する新頂点を書き込む該第1の格納手段の格納アドレスを示す空きポインタとを格納する第2の格納手段と、該クリッピング処理により頂点が発生した場合に、該空きポインタの示す格納アドレスに該発生した頂点の情報を書き込み、対応する該有効フラグを有効と設定すると共に、該先頭フラグ、該チェーンポインタ、該空きポインタを更新し、該クリッピング処理により頂点が消滅した場合には、該消滅した頂点に対応する該有効フラグを無効に設定すると共に、該先頭フラグ、該チェーンポインタを更新する管理手段とを備える。
【発明の効果】
【００１７】
本発明によれば、メモリ容量を削減し、処理時間を向上させることのできる頂点管理方式を適用した画像描画装置を提供することができる。
【図面の簡単な説明】
【００１８】
【図１】VCLiP処理の概要を示す図である。
【図２】TriangleFanのイメージを示す図である。
【図３】ViewVolumeClip処理手順のイメージを示す図である。
【図４】三角形におけるViewVolumeClip処理イメージを示す図である。
【図５】従来技術(ダブルバッファ方式)の処理イメージを示す図である。
【図６】本発明の実施形態を示す図である。
【図７】三角形の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その１）である。
【図８】三角形の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その２）である。
【図９】三角形の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その３）である。
【図１０】三角形の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その４）である。
【図１１】三角形の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その５）である。
【図１２】三角形の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その６）である。
【図１３】三角形の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その７）である。
【図１４】三角形の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その８）である。
【図１５】三角形の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その９）である。
【図１６】三角形の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その１０）である。
【図１７】三角形の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その１１）である。
【図１８】三角形の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その１２）である。
【図１９】三角形の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その１３）である。
【図２０】直線の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その１）である。
【図２１】直線の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その２）である。
【図２２】直線の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その３）である。
【図２３】直線の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その４）である。
【図２４】直線の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その５）である。
【図２５】直線の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その６）である。
【図２６】直線の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その７）である。
【図２７】直線の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その８）である。
【図２８】直線の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その９）である。
【図２９】直線の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その１０）である。
【図３０】直線の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その１１）である。
【図３１】直線の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図（その１２）である。
【図３２】本発明の実施形態の画像描画装置のブロック構成図である。
【発明を実施するための形態】
【００１９】
本発明の実施形態においては、シングルバッファを用いて、有効な頂点データを順次チェーンでつないでいくことで頂点管理を行うようにする。
図６に本発明の実施形態を示す。
【００２０】
図６の実施形態においては、頂点（頂点の座標値）を格納するための頂点格納用RAM２０、頂点の有効・無効を示す有効フラグ２２、チェーン構成の先頭を示す先頭フラグ２１、チェーンのつながり先を示す(次に読み出す有効頂点のポインタを示す)チェーンポインタ２３、VCLiP処理により生成された新頂点を格納する場所を示す空きポインタ２４により構成する。
【００２１】
有効フラグ２２、先頭フラグ２１、チェーンポインタ２３に関しては、頂点格納用RAM２０に格納できる頂点分を必要とし、空きポインタ２４は全体で1つ必要とする。また、頂点格納用RAM２０は、元の図形を形成する頂点を格納する初期頂点格納領域３０、VCLiP処理により生成された新頂点を格納する新頂点格納領域３１とに分かれる。
【００２２】
チェーンポインタ２３は、頂点格納用RAM２０の領域分、空きポインタ２４は新頂点格納領域３１の領域分のアドレス管理ができればよい。最後の頂点のチェーンポインタは、チェーンポインタで表すことの出来る最大値、すなわち、フルマークを設定するようにする。
【００２３】
VCLiP処理により新たに頂点が生成された場合、その新頂点は空きポインタ２４が示すアドレスに書き込みを行う。また、VCLiP処理により頂点が消滅した場合は、消滅した頂点の有効フラグ２２を有効を示す「１」から無効を示す「０」に設定することにより、その領域の頂点を無効とし、空き領域の一つとして管理する。
【００２４】
1回のVCLiP処理(図形を形成する1辺を1つの面でクリップする)にて、新頂点の発生、または既存頂点の消滅、或いはその両方が発生した場合には、有効頂点のチェーン構成の更新を行う。新頂点の発生、既存頂点の消滅が発生しなかった場合には有効頂点のチェーン構成の更新は行わない。
【００２５】
以上の処理を1回のVCLiP処理毎に行い、全てのVCLiP処理が終了するまでこの処理を繰り返す。
先頭フラグは、TriangleFanを構成する場合に、すべての三角形に共通となる頂点を示すフラグである。この頂点は、最初に読み出される。最初に読み出す頂点には、先頭フラグに「１」を立て、その他は、「０」としておく。
【００２６】
上記の処理を繰り返すことで、全てのVCLiP処理が終了した時に有効フラグ２２、先頭フラグ２１が立っているアドレスの頂点が、チェーンを構成する最初の頂点となり、その頂点からチェーンポインタ２３を順次たどっていくことで、多角形を構成する頂点を時計回りの順番で読み出せるようになる。
【００２７】
図７〜図１９は、三角形の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図である。
図７は、図８〜図１９の説明に用いる三角形を説明する図である。図形を形成する頂点の順番は、時計回りとし、辺を構成する最初の頂点をP0、後の頂点をP1とする。したがって、図７の場合、頂点の順番は、V0->V1->V2である。辺V0-V1の場合、V0がP0で、V1がP1である。辺V1-V2の場合、V1がP0で、V2がP1である。辺V2-V0の場合、V2がP0で、V0がP1である。
【００２８】
クリップ処理の判定基準は以下の通りである。クリップ位置が最小値側の場合、クリップ枠＞座標値が成り立つ場合、その座標値の点は枠外であるとし、クリップ枠≦座標値が成り立つ場合、その座標値の点は枠内であるとする。クリップ位置が最大値の場合、クリップ枠＜座標値が成り立つ場合、その座標値の点は枠外であるとし、クリップ枠≧座標値が成り立つ場合、その座標値の点は枠内であるとする。
【００２９】
以下のフローの説明においては、先頭ポインタをFST、有効フラグをEN、チェーンポインタをNEXT、空きポインタをEMPと名づける。
図８のフローにおいて、ステップS10において、2頂点（P0、P1）の枠内、枠外判定を行う。これは、上記で説明した判定基準で行う。P0、P1は、頂点を時計回りに順序付けた場合に、当該辺を示す場合の最初の点がP0であり、後の点がP1である。ステップS11において、P0とP1が共に枠内か否かを判断する。ステップS11の判断がYesの場合には、ステップS14に進む。ステップS14においては、全クリッピング処理が終わったか否かを判断する。ステップS14の判断がYesの場合には、処理を終了する。ステップS14の判断がＮｏの場合には、ステップS15において、クリップポイントの更新を行う。クリップポイントの更新とは、例えば、Xminでクリップ処理をしていたなら、次のXmaxでのクリップ処理を始めるために設定するという意味である。クリッピング処理を行う面の順番は、従来技術で説明した通りである。クリップポイントの更新を行ったら、ステップS10に戻る。
【００３０】
ステップS11の判断がＮｏの場合には、ステップS12において、P0が枠内で、P1が枠外か否かを判断する。ステップS11の判断がYesの場合には、図９のフローに進む。ステップS11の判断がＮｏの場合には、ステップS13において、P0が枠外で、P1が枠内であるか否かを判断する。ステップS13の判断がYesの場合には、図１０のフローに進む。ステップS13の判断がＮｏの場合には、図１１のフローに進む。
【００３１】
図１２及び図１３は、P0,P1共に枠内である場合の処理の様子を示した図である。図１２では、頂点格納用RAMは、アドレス００〜１３０までの格納領域が格納され、初期頂点格納領域に、V0〜V2の頂点情報が格納されている。V0〜V2は、有効な頂点であるので、有効フラグENに「１」が設定されている。頂点V0には、先頭ポインタFSTに「１」が設定され、基準の頂点であることが示されている。頂点V0のチェーンポインタNEXTには、アドレス「１０」が設定されている。これは、頂点V1の格納領域のアドレスである。頂点V1のチェーンポインタNEXTには、アドレス「２０」が設定されている。これは、頂点V2の格納領域のアドレスである。頂点V2のチェーンポインタNEXTには、この頂点が最後の頂点であることを示すフルマーク（FF）が設定されている。また、空きポインタEMPには、新頂点格納領域の最初のアドレス「３０」が格納されている。
【００３２】
今、辺V0-V1を処理しているとし、図１３のように、Xminより座標値の大きい部分に、V0,V1がある場合は、何も処理をしない。
図９のフローは、P0が枠内、P1が枠外の場合の処理のフローである。すなわち、辺P0-P1がクリップ枠と交差し、新頂点が発生する場合である。ステップS20において、EMP（空きポインタ）に指定されたアドレスに新頂点Axを書き込み、有効フラグENを「１」に設定する。ステップS21において、空きポインタEMP指定のアドレスのチェーンポインタNEXTに、P0のチェーンポインタP0.NEXTを代入する。これにより、EMPで指定されたアドレスに格納された新頂点AxのチェーンポインタNEXTに、P0が持っていたチェーンポインタが代入されることになる。ステップS22において、P0のチェーンポインタP0.NEXTに、空きポインタEMPを代入する。これにより、P0から、新たに生成された新頂点Axへのポインタが設定される。そして、ステップS23において、空きポインタEMPの値を新頂点格納領域内の有効フラグENが「０」となっている一番小さいアドレスの値に変更して、図８のステップS14に戻る。
【００３３】
図１４及び図１５は、P0が枠内で、P1が枠外である場合の処理の様子を示した図である。図１４は、図１２と同様で、初期状態を示している。図１５では、P0をV0、P1をV1として、V0とV1の間にXminが来ている。この場合、図１５の（１）のように、空きポインタEMPで示されるアドレスに新頂点A1を格納すると共に、対応する有効フラグを「１」に設定する。そして、（２）に示されるように、V0のチェーンポインタNEXTの「１０」を新頂点A1のチェーンポインタNEXTに設定する。次に、（３）に示されるように、頂点V0のチェーンポインタNEXTに空きポインタEMPの「３０」を設定する。そして、（４）に示されるように、空きポインタEMPに、新頂点格納領域の次のアドレス「４０」が設定される。
【００３４】
図１０のフローは、P0が枠外、P1が枠内の場合のフローである。この場合も、P0とP1の間に、新頂点が発生する場合である。図９とは、頂点のうち、どちらが枠内で、どちらが枠外かが入れ替わった場合である。ステップS25において、空きポインタEMP指定のアドレスに新頂点Axを書き込む。そして、頂点Axの有効フラグENを「１」に設定する。ステップS26において、空きポインタEMP指定のアドレス、すなわち、頂点Axの先頭フラグFSTと、チェーンポインタNEXTに、P0の先頭ポインタP0.FSTとP0のチェーンポインタP0.NEXTの値を代入する。ステップS27において、P0の有効フラグENを「０」（無効）に設定する。ステップS28において、P0のFSTが「０」か否かを判断する。これは、P0が基準の頂点であったか否かを判断するものである。ステップS28の判断がＮｏの場合には、すなわち、頂点P0が基準の頂点であった場合には、P0の先頭フラグP0.FSTを「０」とする。すなわち、P0は枠外で、削除されてしまうので、新頂点を基準の頂点とし、P0の先頭フラグを「０」にするものである。ステップS28の判断がYesの場合には、ステップS30において、P0を指しているチェーンポインタNEXTを空きポインタEMPの値に変更する。すなわち、P0を指しているチェーンポインタを新頂点を指し示すように付け替える。そして、ステップS31において、空きポインタEMPの値を、新頂点格納領域内の有効フラグENが「０」となっている一番小さなアドレス値に変更し、図８のステップS14に戻る。
【００３５】
図１６及び図１７は、P0が枠外で、P1が枠内の場合の処理の様子を説明する図である。図１６は、図１２と同様で、処理の前の初期状態を示している。図１７に示されるように、P0をV0、P1をV1として、V0が枠外になる場合である。（１）に示されるように、空きポインタEMPのアドレス「３０」に新頂点A1を格納し、有効フラグENを１に設定する。次に、（２）に示されるように、V0の先頭フラグFSTとチェーンポインタNEXTの値を、A1の先頭フラグFSTとチェーンポインタNEXTに代入する。次に、（３）に示されるように、V0の有効フラグENを無効「０」にする。次に、（４）に示されるように、V0の先頭フラグFSTを「０」にする。そして、（５）に示されるように、空きポインタEMPの値を新頂点格納領域の次の空きアドレスの値に書き換える。
【００３６】
図１１は、P0,P1共に枠外である場合のフローである。ステップS35において、P0の有効フラグENを「０」にする。ステップS36において、P0のチェーンフラグNEXTが最大値（フルマーク）になっているか否かを判断する。ステップS36の判断がYesの場合には、ステップS39において、P0を指しているチェーンポインタNEXTを最大値（フルマーク）に変更し、ステップS40に進む。すなわち、削除されるP0が最後の頂点だったので、その手前の頂点を最後の頂点に設定しなおすものである。ステップS40では、P0の先頭フラグFSTが「０」か否かを判断する。ステップS40の判断がYesの場合には、そのまま、図８のステップS14に戻る。ステップS40の判断がＮｏの場合には、ステップS41に進む。ステップS36の判断がＮｏの場合には、ステップS37において、P0の先頭フラグFSTが「０」か否かを判断する。ステップS37の判断がYesの場合には、ステップS38において、P0を指しているチェーンポインタNEXTにP0のチェーンポインタP0.NEXTを代入して、図８のステップS14に戻る。これは、P0が削除されるので、P0を飛ばして、次の頂点にチェーンをつなげる意味である。ステップS37の判断がＮｏの場合には、ステップS41に進む。
【００３７】
ステップS41では、P0のチェーンポインタが指しているアドレスの先頭フラグFSTに、P0の先頭フラグP0.FSTを代入する。これは、P0の先頭か否かのステータスを次の頂点に引き継ぐ意味である。ステップS42において、P0の先頭フラグP0.FSTを「０」とし、図８のステップS14に戻る。
【００３８】
図１８及び図１９は、P0,P1共に枠外の場合の処理の様子を説明する図である。図１８は、図１２と同様で、処理の前の初期状態を示している。ここでは、V0がP0で、V1がP1である。図１９に示すように、V0,V1共に枠外である。(1)に示されるように、V0の有効フラグENを「０」にする。次に、（２）に示されるように、V0のチェーンポインタが示すアドレス「１０」の頂点V1の先頭フラグFSTに、V0のFSTを代入する。そして、（３）に示されるように、V0のFSTを「０」にする。
【００３９】
ここで、枠外なのは、V0,V1両方であるが、処理されているのは、V0のみである。これは、上記フローにおいて、辺V1-V2を処理するときに、V1が処理されるので、問題は生じないからである。
【００４０】
図２０〜図３１は、直線の場合を例に取った、本実施形態の有効頂点のチェーン構成を構築する際のアルゴリズムを説明する図である。
図２１〜図３１では、図２０に示されるような直線を用いて処理を説明する。図２０の直線においては、頂点の順番は、V0->V1であり、辺V0-V1において、V0がP0であり、V1がP1である。また、先頭フラグは、FSTとし、有効フラグは、ENとし、チェーンポインタはNEXTとし、空きポインタは、EMPとする。
【００４１】
クリップの枠内、枠外判定は、以下のようにする。クリップの位置が最小値側の場合には、クリップ枠＞座標値が成り立つ座標の点については、枠外と判定し、クリップ枠≦座標値が成り立つ座標の点については、枠内と判定する。また、クリップ位置が最大値側の場合には、クリップ枠＜座標値が成り立つ座標の点については、枠外と判定し、クリップ枠≧座標値が成り立つ座標の点については、枠内と判定する。
【００４２】
図２１は、クリッピング処理の主フローである。ステップS50において、2頂点（P0,P1）の枠内、枠外判定を行う。ステップS51において、P0,P1共に枠内であるか否かを判断する。ステップS51の判断がYesの場合には、ステップS55において、全クリッピング処理が終了したか否かを判断する。ステップS55の判断がYesの場合には、処理を終了する。ステップS55の判断がＮｏの場合には、ステップS56に進み、クリップポイントの更新をする。クリップポイントの更新は、図８で説明したとおりである。クリップポイントの更新が終わると、ステップS50に戻る。
【００４３】
ステップS51の判断がＮｏの場合には、ステップS52において、P0が枠内でP1が枠外か否かを判断する。ステップS52の判断がYesの場合には、図２２のフローに進む。ステップS52の判断がＮｏの場合には、ステップS53において、P0が枠外で、P1が枠内か否かを判断する。ステップS53の判断がYesの場合には、図２３のフローに進む。ステップS53の判断がＮｏの場合には、ステップS54において、P0、P1両方の有効フラグENを「０」とする。これは、ステップS53の判断がＮｏの場合には、P0,P1共に、枠外であることを意味するからである。ステップS54の次は、ステップS55に進む。
【００４４】
図２４及び図２５は、P0,P1共に、枠内である場合の処理の様子を説明する図である。図２４は、処理前の初期状態を示す。図２４においては、P0がV0で、P1がV1である。頂点格納用RAMの初期頂点格納領域には、V0とV1のデータが格納されている。アドレス「００」には、V0が格納される。先頭フラグFSTは、V0が先頭の頂点であるので、「１」に設定されている。V0は、有効な頂点であるので、有効フラグENが「１」に設定され、チェーンポインタNEXTには、次の頂点V1が格納されているアドレス「１０」が設定されている。また、空きポインタには、新頂点格納領域の最初のアドレス「３０」が格納されている。アドレス「１０」の頂点V1の先頭フラグFSTは、V1が最初の頂点ではないので、「０」に設定されている。V1の有効フラグENは、V1が有効な頂点であるので、「１」に設定されている。そして、V1のチェーンポインタNEXTは、V1が最後の頂点であるので、フルマーク（FF）に設定されている。
【００４５】
P0,P1共に枠内の場合には、何も処理を行わないので、図２５においては、図２４と比較して何も変化は無い。
次に、P0が枠内、P1が枠外の場合を説明する。この場合には、図２２のフローにしたがって処理を行う。
【００４６】
図２２において、ステップS60では、空きポインタEMP指定のアドレスに新頂点Axを書き込み、新頂点Axの有効フラグENを「１」に設定する。ステップS61において、空きポインタEMP指定の新頂点Axの先頭フラグ、チェーンポインタNEXTに、P1の先頭ポインタFSTとP1のチェーンポインタNEXTを代入する。これは、P1が削除されるので、新頂点AxをP1の代わりとするためである。ステップS62において、P1の有効フラグENを「０」とする。ステップS63において、P0のチェーンポインタNEXTに、空きポインタEMPの値、すなわち、新頂点Axが格納されているアドレスの値を代入する。ステップS64において、空きポインタEMPの値を、新頂点格納領域内の有効フラグENが「０」となっている一番小さいアドレス値に変更して、図２１のステップS55に戻る。
【００４７】
図２６及び図２７は、P0が枠内、P1が枠外の場合の処理の様子を説明する図である。図２６は、処理前の初期状態で、図２４と同様である。図２７では、Xmin面がV0とV1の間にあり、V1が削除され、新頂点A1が生成されている。まず、（１）にあるように、空きポインタEMPの示すアドレス「３０」に頂点A1を格納し、有効フラグENを「１」に設定する。次に、（２）に示されるように、V1の先頭フラグFSTとチェーンポインタNEXTをA1の先頭フラグFSTとチェーンポインタNEXTに代入する。ここでは、A1の先頭フラグFSTに「０」が、チェーンポインタNEXTに「FF」が代入されている。次に、（３）に示されるように、V1の有効フラグENを「０」に設定する。そして、（４）に示されるように、V0のチェーンポインタに、空きポインタEMPの値を代入する。最後に、（５）に示されるように、空きポインタEMPの値を、新頂点格納領域の、有効フラグENが「０」となっているアドレスのうち、一番小さいアドレス値「４０」に書き換える。
【００４８】
次に、P0が枠外で、P1が枠内の場合について説明する。この場合には、図２３のフローを実行する。
図２３において、ステップS65では、空きポインタEMP指定のアドレスに新頂点Axを書き込み、有効フラグENを「１」に設定する。ステップS66において、空きポインタEMP指定のアドレス、すなわち、新頂点Axのアドレスの先頭フラグFSTとチェーンポインタNEXTに、P0の先頭フラグFSTとP0のチェーンポインタNEXTを代入する。これは、P0が削除されてしまうので、新頂点AxにP0の代わりをさせることを意味する。ステップS67において、空きポインタEMP指定以外のアドレスの先頭フラグFSTをすべて「０」とする。今の場合、P0が先頭の頂点であるので、他の頂点データの先頭フラグを「０」にする意味である。ステップS68において、P0の有効フラグENを「０」とする。ステップS69において、空きポインタEMPの値を新頂点格納領域の有効フラグENが「０」となっているアドレスのうち、一番小さいアドレス値に変更して、図２１のステップS55に戻る。
【００４９】
図２８及び図２９は、P0が枠外で、P1が枠内である場合の処理の様子を説明する図である。図２８は、処理前の初期状態を示し、図２４と同様である。
図２９に示されるように、（１）では、空きポインタEMPの示すアドレスに、新頂点A1を格納し、対応する有効フラグENを「１」にする。次に、（２）では、空きポインタEMPが指定するアドレス、すなわち、新頂点A1が格納されているアドレスの先頭フラグFSTとチェーンポインタNEXTに、V0の先頭ポインタFSTとチェーンポインタNEXTを代入する。次に、（３）では、空きポインタEMP指定のアドレス、すなわち、新頂点A1のアドレスに対応する先頭フラグFST以外の先頭フラグFSTを全部「０」に設定する。次に、（４）に示されるように、V0の有効フラグENを「０」に設定し、（５）において、空きポインタEMPの値を、新頂点格納領域の、有効フラグENが「０」となっているアドレスのうち、もっとも小さいアドレスに書き換える。
【００５０】
図３０及び図３１は、P0,P1共に枠外にある場合の処理の様子を示す図である。図３０は、処理前の初期状態で、図２４と同様である。図３１に示されるように、この場合には、単純に、頂点V0とV1の有効フラグENを「０」に設定するのみである。
【００５１】
以上の実施形態では、1面でのクリッピング処理を例に挙げているが、複数面のクリッピング処理が発生しても、このアルゴリズムに従って処理を行うことで、有効な頂点データに対してチェーン構成を構築することが出来る。
【００５２】
ViewVolumeClip処理において、有効な頂点データに対してチェーン構成を構築することで、シングルバッファでの新頂点管理が可能となり、処理速度向上、面積削減効果が大いに期待できる。
【００５３】
図３２は、本発明の実施形態の画像描画装置のブロック構成図である。
画像描画装置45は、頂点処理部46、図形処理部47、及び、描画処理部48からなる。頂点処理部46は、更に、頂点入力処理部49、ViewVolumeClip処理部50、及び、透視変換部51からなる。図形処理部47は、Triangle Setup部と、Line Setup部からなる。画像描画装置45に頂点情報が入力されると、頂点入力処理部49が、頂点を順序づけて、ViewVolumeClip処理部50に渡す。ViewVolumeClip処理部50は、頂点情報にクリッピング処理を施す。クリッピング処理が施された後、頂点情報は、透視変換部51に送られる。透視変換部51では、3次元図形の重なり具合を調べ、後ろ側にある図形は、前の図形に隠されて見えなくなるように、図形データを処理する。図形処理部47では、Triangle Setup部において、三角形の辺の傾きなどの情報の取得など、三角形を図形的に解析する。Line Setup部では、直線の傾きなどの情報の取得など、直線を図形的に解析する。図形処理部47の出力は、描画処理部48に渡され、図形の描画が行われ、描画データは、外部メモリに送られる。
【００５４】
ViewVolumeClip処理部50では、頂点情報が入力されると、VCLiP判定部57において、頂点がクリップ枠の枠内か、枠外かが判定される。新頂点算出部52では、クリッピングによって発生する新頂点の情報を演算する。演算された新頂点は、新頂点管理部55において、管理される。前述の実施形態のチェーンポインタの更新等は、新頂点管理部55によって行われる。頂点格納メモリ56は、図６の頂点格納用RAM20に対応する。先頭フラグ、有効フラグ、チェーンポインタ、及び、空きポインタは、管理用レジスタ54に格納される。新頂点算出部52で算出された新頂点は、新頂点管理部55を通して頂点格納メモリ56に格納され、全てのクリッピング処理が終了した時点で、基準頂点から順番に頂点転送部53に送られ、ここから、頂点出力として、外部に送出される。
【００５５】
上記実施形態のほかに、以下の付記を開示する。
（付記１）
3次元図形を描画するに当たりクリッピング処理を行う画像描画装置において、
該3次元図形の頂点、及び、該クリッピング処理によって発生あるいは消滅する頂点の情報を格納する第1の格納手段と、
該第1の格納手段の格納領域のそれぞれに対応して、頂点の有効・無効を示す有効フラグと、頂点のつながりであるチェーンを構成する頂点のうち、次に読み出す頂点情報の該第1の格納手段の格納アドレスを示すチェーンポインタと、該チェーンを構成する最初の頂点であるか否かを示す先頭フラグと、該クリッピング処理により新たに発生する新頂点を書き込む該第1の格納手段の格納アドレスを示す空きポインタとを格納する第2の格納手段と、
該クリッピング処理により頂点が発生した場合に、該空きポインタの示す格納アドレスに該発生した頂点の情報を書き込み、対応する該有効フラグを有効と設定すると共に、該先頭フラグ、該チェーンポインタ、該空きポインタを更新し、該クリッピング処理により頂点が消滅した場合には、該消滅した頂点に対応する該有効フラグを無効に設定すると共に、該先頭フラグ、該チェーンポインタを更新する管理手段と、
を備えることを特徴とする画像描画装置。
(付記２)
前記空きポインタの示す格納アドレスは、前記第１の格納手段の格納領域において、頂点情報が格納されておらず、かつ、対応する有効フラグが無効となっている一番小さいアドレス値とすることを特徴とする付記１に記載の画像描画装置。
（付記３）
前記クリッピング処理によって発生・消滅する頂点及び該クリッピング処理によって変化しない頂点によって構成される図形は、前記有効フラグが有効となっている頂点のチェーン構成により表現されることを特徴とする付記１に記載の画像描画装置。
（付記４）
前記チェーンを構成する最初の頂点が、前記クリッピング処理によって消滅し、新頂点が発生した場合には、前記先頭フラグに、該新頂点が該チェーンを構成する最初の頂点である旨の設定を行うことを特徴とする付記１に記載の画像描画装置。
（付記５）
前記チェーンを構成する頂点のうち、最後の頂点に対応するチェーンポインタの示すアドレス値は、該チェーンポインタが表現可能な最大値であることを特徴とする付記１に記載の画像描画装置。
（付記６）
前記クリッピング処理により、前記チェーンの後ろの頂点が消滅し、新頂点が発生した場合には、該チェーンの前の頂点に対応するチェーンポインタの示す格納アドレスを、該新頂点の格納アドレスに書き換えることを特徴とする付記１に記載の画像描画装置。
（付記７）
前記クリッピング処理により、前記チェーンの前の頂点が消滅し、新頂点が発生した場合には、該新頂点に対応するチェーンポインタの示す格納アドレスを、該消滅した頂点のチェーンポインタの格納アドレスとすることを特徴とする付記１に記載の画像描画装置。
（付記８）
3次元図形を描画するに当たりクリッピング処理を行う、該3次元図形の頂点、及び、該クリッピング処理によって発生あるいは消滅する頂点の情報を格納する第1の格納手段と、  該第1の格納手段の格納領域のそれぞれに対応して、頂点の有効・無効を示す有効フラグと、頂点のつながりであるチェーンを構成する頂点のうち、次に読み出す頂点情報の該第1の格納手段の格納アドレスを示すチェーンポインタと、該チェーンを構成する最初の頂点であるか否かを示す先頭フラグと、該クリッピング処理により新たに発生する新頂点を書き込む該第1の格納手段の格納アドレスを示す空きポインタとを格納する第2の格納手段とを備える画像描画装置における頂点管理方法であって、
該クリッピング処理により頂点が発生した場合に、該空きポインタの示す格納アドレスに該発生した頂点の情報を書き込み、対応する該有効フラグを有効と設定すると共に、該先頭フラグ、該チェーンポインタ、該空きポインタを更新し、該クリッピング処理により頂点が消滅した場合には、該消滅した頂点に対応する該有効フラグを無効に設定すると共に、該先頭フラグ、該チェーンポインタを更新する
ことを特徴とする頂点管理方法。
（付記９）
コンピュータに、
3次元図形を描画するに当たりクリッピング処理を行う画像描画装置において、
該3次元図形の頂点、及び、該クリッピング処理によって発生あるいは消滅する頂点の情報を格納する第1の格納手段と、
該第1の格納手段の格納領域のそれぞれに対応して、頂点の有効・無効を示す有効フラグと、頂点のつながりであるチェーンを構成する頂点のうち、次に読み出す頂点情報の該第1の格納手段の格納アドレスを示すチェーンポインタと、該チェーンを構成する最初の頂点であるか否かを示す先頭フラグと、該クリッピング処理により新たに発生する新頂点を書き込む該第1の格納手段の格納アドレスを示す空きポインタとを格納する第2の格納手段と、
該クリッピング処理により頂点が発生した場合に、該空きポインタの示す格納アドレスに該発生した頂点の情報を書き込み、対応する該有効フラグを有効と設定すると共に、該先頭フラグ、該チェーンポインタ、該空きポインタを更新し、該クリッピング処理により頂点が消滅した場合には、該消滅した頂点に対応する該有効フラグを無効に設定すると共に、該先頭フラグ、該チェーンポインタを更新する管理手段と、
からなる構成を実現させるプログラム。
【符号の説明】
【００５６】
１０      カメラ
１１      Window
１２      ViewVolume
２０      頂点格納用RAM
２１      先頭フラグ
２２      有効フラグ
２３      チェーンポインタ
３０      初期頂点格納領域
３１      新頂点格納領域
４５      画像描画装置
４６      頂点処理部
４７      図形処理部
４８      描画処理部
４９      頂点入力処理部
５０      ViewVolumeClip処理部
５１      透視変換部
５２      新頂点算出部
５３      頂点転送部
５４      管理用レジスタ
５５      新頂点管理部
５６      頂点格納メモリ
５７      VCLiP判定部
【図２】
2010198144.tif 000003
【図６】
2010198144.tif 000004
【図７】
2010198144.tif 000005
【図８】
2010198144.tif 000006
【図９】
2010198144.tif 000007
【図１０】
2010198144.tif 000008
【図１１】
2010198144.tif 000009
【図１２】
2010198144.tif 000010
【図１３】
2010198144.tif 000011
【図１４】
2010198144.tif 000012
【図１８】
2010198144.tif 000013
【図２０】
2010198144.tif 000014
【図２１】
2010198144.tif 000015
【図２２】
2010198144.tif 000016
【図２３】
2010198144.tif 000017
【図２４】
2010198144.tif 000018
【図２５】
2010198144.tif 000019
【図２６】
2010198144.tif 000020
【図２８】
2010198144.tif 000021
【図３０】
2010198144.tif 000022
【図１】
2010198144.tif 000023
【図３】
2010198144.tif 000024
【図４】
2010198144.tif 000025
【図５】
2010198144.tif 000026
【図１５】
2010198144.tif 000027
【図１６】
2010198144.tif 000028
【図１７】
2010198144.tif 000029
【図１９】
2010198144.tif 000030
【図２７】
2010198144.tif 000031
【図２９】
2010198144.tif 000032
【図３１】
2010198144.tif 000033
【図３２】
2010198144.tif 000034