説明

図形描画装置、図形描画方法、及びプログラム

【課題】 少ないリソースやメモリしか使用不可能な環境下にて、高速かつ安定的に動作することが可能な図形描画装置、手法を提供することを目的とする。
【解決手段】 入力となるベクトルデータ群に含まれる処理対象ベクトルの処理順序、データを管理し、管理情報に基づいて、前記ベクトルデータ群から処理対象ベクトルのデータの抽出を行い、抽出されたベクトルデータの処理順の算出を行い、算出された処理順序情報を用いて処理対象点の管理、対象ベクトルの処理の終了の通知を行い、処理対象点の管理情報をもとに、処理対象点の塗りつぶしの可否を判断し、塗りつぶし情報として算出し、算出された塗りつぶし情報を用いて、図形の描画を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は図形の描画装置、描画方法に関する。
【背景技術】
【0002】
任意の多角形を描画する手法として様々な手法が開発されてきている。(1)ポイントベースの手法、(2)ラスターラインベースの手法、(3)トライアングルベースの手法、(4)ステンシルバッファベースの手法などである。
【0003】
(1)は、描画領域に含まれる各点(ピクセル)に関して、描画の判定を行い、ポイント(ピクセル)単位で描画処理を行っていくものである。この際、描画処理の高速化のため、無駄な描画領域を削除したり、各点における描画判定を簡略化したりという様々な工夫が凝らされてきている。さらに、高速化のため、この機能をハードウェア化することも良く行われている。このハードウェア化された装置の1つとして、ラスタライザと呼ばれるものがある(例えば、非特許文献1を参照)。この手法は、シンプルな手法であるが故に非常に安定動作することが特徴であるが、各点毎に描画判定を行う必要があるため、非常に処理コストが大きいという問題点がある。このため、典型的には専用ハードウェア化されることがほとんどである。(2)は、(1)を改良したもので、各点毎、あるいは、それに相当する範囲で描画判定を行うところまでは似ているが、描画する際に、各点における描画部分をまとめ、これを描画したい画面のスキャンライン単位の線の描画に置き換えたものである。こうすることで、描画判定に関しては(1)と同様に処理コストが大きいが、描画処理のコストは小さくなるため、(1)よりも高速化が見込まれる。また、描画判定の部分は、高速なCPUを持つ処理系での処理や専用ハードウェア化などが必要とされるが、描画処理に関しては、汎用的なグラフィックスLSI(GPU)を用いることが可能である。なぜならば、グラフィックスLSIは、線、三角形を高速に描画する機能を持っているからである。このため、(1)よりも汎用性が上がっていると言える。(3)は、描画したい多角形を三角形群に分割し、三角形ベースで描画しようというものである(例えば、非特許文献2を参照)。これは、汎用のグラフィックスLSI、または、高速な三角形描画装置の使用を前提として高速化を図ろうという意図がある。(なぜならば、グラフィックスLSIは、線、三角形を高速に描画する機能を持っているからである。)このため、(1)、(2)の手法よりもより汎用性がある手法である。しかし、三角形分割のために複雑な処理が必要とされるため、この部分の安定性が問題となりうる。また、描画したい多角形が非常に複雑な形状を持っている場合には、三角形分割処理の計算コストが非常に大きくなるという問題もある。また、三角形群をグラフィックスLSIなどを用いて描画することを前提としているため、グラフィックスLSIに十分なリソースが無い場合、使用することができないという問題もある。多角形を三角形群に分割し、これをグラフィックスLSIに投入する必要があるため、比較的メモリなどの使用量が多くなるからである。(4)は、完全に汎用グラフィックスLSIの使用を前提とするもので、グラフィックスLSIの機能として存在しているステンシルバッファという機能を用いて多角形描画を実現するものである(例えば、非特許文献3)。これは、(1)〜(3)のどれよりも高速かつ安定的に多角形描画が可能な方法であるが、グラフィックスLSIの機能をフル活用するため、グラフィックスLSIの多くのリソースを必要とするという問題点が存在する。
【非特許文献1】Renate Kempf and Chris Frazier, “The OpenGL Processing Pipeline”, Chapter 2: Overview of Commands and Routines, OpenGL Reference Manual Second Edition, ISBN 0-201-46140-4, pp.8-16, 1997.
【非特許文献2】M.ドバーグ、M.ファン.クリベルド、M.オーバマーズ、O.シュワルツコップ, “コンピュータ・ジオメトリ”, ISBN 4-7649-0277-X, pp.55-75, 近代科学社, 2000.
【非特許文献3】Jackie Neider, Tom Davis, Mason Woo, “Drawing Filled, Concave Polygons Using the Stencil Buffer”, Chapter 13: Now That You Know, OpenGL Programming Guide, ISBN 0-201-63274-8, pp.398-399, 1993.
【発明の開示】
【発明が解決しようとする課題】
【0004】
本発明は、上記のように、従来の様々な手法に存在していた安定動作、使用リソースの問題点を解消し、かつ、この条件下でなるべく高速動作が可能な図形描画を行う装置、および、手法を提供することを目的とする。
【0005】
具体的には、グラフィックスLSIなどのハードウェアリソースの使用が困難な状況下で、なるべく安定動作が可能なシンプルな手法を用いて、なるべく高速化が可能な図形描画装置および手法を提供することを目的とする。
【課題を解決するための手段】
【0006】
この発明の図形描画装置は、入力となるベクトルデータ群を管理するベクトルデータ群管理手段と、前記ベクトルデータ群管理手段での管理情報に基づいて、入力となるベクトルデータ群から処理対象ベクトルデータを抽出するベクトルデータ抽出手段と、前記ベクトルデータ抽出手段で抽出されたベクトルデータの処理順を算出する処理順序算出手段と、前記処理順序算出手段で算出された処理順序を用いて処理対象点の決定、及び前記ベクトルデータ群管理手段に対象ベクトルの処理の終了の通知を行う対象点管理手段と、前記対象点管理手段で得られる処理対象点の管理情報をもとに、処理対象点の塗りつぶしの可否を判断し、塗りつぶし情報として算出するための塗りつぶし情報算出手段と、前記塗りつぶし情報算出手段によって得られた塗りつぶし情報を用いて、図形を描画するための描画手段を具備することを特徴とする。
【0007】
また、この発明の図形描画方法は、入力となるベクトルデータ群に含まれる処理対象ベクトルの処理順序、データを管理するステップと、管理情報に基づいて、前記ベクトルデータ群から処理対象ベクトルのデータの抽出を行い、抽出されたベクトルデータの処理順の算出を行うステップと、算出された処理順序情報を用いて処理対象点の管理、及び対象ベクトルの処理の終了の通知を行うステップと、処理対象点の管理情報をもとに、処理対象点の塗りつぶしの可否を判断し、塗りつぶし情報として算出するステップと、算出された塗りつぶし情報を用いて、図形の描画を行うステップを含むことを特徴とする。
【0008】
更に、この発明の図形描画装置をコンピュータで機能させるプログラムは、入力となるベクトルデータ群に含まれる処理対象ベクトルの処理順序、データを管理する機能と、管理情報に基づいて、前記ベクトルデータ群から処理対象ベクトルのデータの抽出を行い、抽出されたベクトルデータの処理順の算出を行う機能と、算出された処理順序情報を用いて処理対象点の管理、及び対象ベクトルの処理の終了の通知を行う機能と、処理対象点の管理情報をもとに、処理対象点の塗りつぶしの可否を判断し、塗りつぶし情報として算出する機能と、算出された塗りつぶし情報を用いて、図形の描画を行う機能を含むことを特徴とする。
【発明の効果】
【0009】
本発明によれば、多角形図形の描画を低消費メモリで高速かつ安定的に行う装置、および、手法を提供することができる。
【発明を実施するための最良の形態】
【0010】
以下、図面を参照しながら発明の実施の形態を説明する。
[第1の実施形態]
まず、本発明の第1の実施形態について説明する。
<全体の構成>
図1は、本発明の第1の実施形態に係る図形描画装置の全体構成図である。
本実施形態の図形描画装置は、入力されたベクトルデータ群を管理するためのベクトルデータ群管理部1と、ベクトルデータ群管理部1での管理情報に基づいて、入力されたベクトルデータ群から処理対象となるベクトルデータを取得するためのベクトルデータ抽出部2と、ベクトルデータ抽出部2で取得されたベクトルデータから、処理の開始点および終了点を算出するための開始点・終了点算出部3と、開始点・終了点算出部3で算出された開始点・終了点情報、または/および、塗りつぶし情報算出部7から得られる対象点の処理の終了の通知情報、を用いて処理対象点の決定を行ったり、ベクトルデータ群管理部1に対象ベクトルの処理の終了を通知したりするための対象点管理部4と、対象点管理部4で決定された処理対象点の情報をもとに、処理対象点のピクセル座標位置を算出するための対象点算出部5と、対象点算出部5で算出された処理対象点の座標位置の両脇のピクセルが塗りつぶし対象となるかどうかの判定を行うための対象点判定部6と、対象点判定部6での判定結果をもとに、対象点が、塗りつぶし開始点、塗りつぶし終了点、どちらでも無い点のいずれかであるかを判断するし、それを対象点の座標位置とともに所定の形式で塗りつぶし情報として算出するための塗りつぶし情報算出部7と、塗りつぶし情報算出部7で算出された塗りつぶし情報を塗りつぶし情報保存領域9に登録するための塗りつぶし情報登録部8と、ベクトルデータ抽出部2で取得されたベクトルデータをもとに、図形描画を行うために最小限必要な矩形領域の情報を算出・更新するための描画領域算出部10と、描画領域算出部10で算出された矩形領域を補正して、最終的に描画を行う領域を求めるための描画領域補正部11と、塗りつぶし情報保存領域9に保存された塗りつぶし情報を描画するのに適正なデータとして補正するための描画データ補正部12と、描画領域補正部11で得られた描画領域情報、描画データ補正部12で補正されたデータを用いて、図形を描画するための描画部13から構成される。
【0011】
<ベクトルデータ群管理部>
まず、ベクトルデータ群管理部1について説明する。
<図形描画の説明>
ここで、まず、本実施の形態で扱う図形描画について説明する。
本実施の形態で扱う図形描画とは、多角形を構成するベクトルデータ群、または、それに相当する点データ群で形成される入力データから、それで示される多角形で構成される図形を描画するものである。この際、所定の規則に従って、図形の内部の塗りつぶしを行う。
【0012】
具体的には、図2に示されるような「ベクトル1」〜「ベクトル5」のような「(一筆書きで得られる)多角形」を構成するベクトルデータ群の入力があったとすると、図3,図4に示されるような図形を描画する。図3,図4の差は、多角形の内部の塗りつぶし規則の違いである。図3は、even-odd fillルールと呼ばれる規則に従って、多角形(この例の場合、星形)の内部を塗りつぶした例である。図4は、non-zero fillルールと呼ばれる規則に従って、同様の多角形を塗りつぶした例である。
【0013】
ここで、even-odd fillルール、non-zero fillルールに関して簡単に説明する。Even-odd fillルールとは、領域(閉路)内部の任意の点から任意の方向に半直線を引き(rayを飛ばし)、その半直線を領域のエッジがまたぐ方向に応じてカウンタを増減させた結果、カウンタが奇数になる領域は塗りつぶし、偶数になる領域は塗りつぶさないという規則である。Non-zero fillルールは、同様のカウンタ増減の結果、カウンタが0でない部分は塗りつぶすという規則である。詳しくは、”www.w3.org/TR/SVG/”に説明されているので、そちらを参照して頂きたい。
【0014】
なお、塗りつぶし規則の例として、even-odd fillルール、non-zero fillルールの2つに関して説明したが、これはあくまでも例であり、これに限定されるものではない。任意の塗りつぶし規則を用いることができる。
【0015】
<ベクトルデータ群の説明>
次に、図形描画の入力となるベクトルデータ群、または、それに相当する点データ群について説明する。
本実施の形態で扱うベクトルデータ群とは、2次元(あるいは3次元)の座標値を持つ2つの点データP1(始点),P2(終点)で構成されるベクトルデータV(n) = P2(n) − P1(n)の集合である。ここで、n= 1, ・・・, Nであり、Nはベクトルデータ群を構成するベクトルの個数を示している。また、V(n)は、n番目のベクトルデータ、P1(n),P2(n)は、n番目のベクトルを構成する始点、終点の点データである。本発明で扱うベクトルデータ群では、互いに連続するベクトル同士は、その端点を共有する。つまり、P1(n) = P2(n-1)の関係が成り立つ。このようにして得られるベクトルデータ群は、一筆書きによって得られる多角形図形を形成する(図5参照)。図5は、N=3の例であり、図形として、三角形が形成されている。
【0016】
P2(N) = P1(1)でない場合には、形成される図形は閉じていないが、この場合、P1(N+1)=P2(N), P2(N+1)=P1(1)で表されるN+1番目の点が仮想的に存在するとして、閉図形として扱う(図6参照)。図6の場合、仮想的なV(4)があるとして、四角形の閉図形として扱う。
【0017】
また、ベクトルデータ群によって形成される図形は、一般多角形で構成される任意の形状を取ることが可能で、凸形状だけではなく凹形状や自己交差形状を含んでも構わない(図7参照)。
【0018】
また、点データ群も、ベクトルデータ群と同様に扱うことができる。今、点データ群が、P(n), n = 1 ・・・ Nで表されているとすると、
V(n) = P(n+1) − P(n) n = 1, ・・・, N-1 (1)
【0019】
として得られるV(n)は、ベクトルデータ群となるからである。入力が点データ群であった場合、上記のような変換を行うことで、ベクトルデータ群として扱うことが可能である。
【0020】
<ベクトルデータ群管理部の説明>
ベクトルデータ群管理部1は、上記で説明したような図形描画のための入力として得られるベクトルデータ群を管理するためのものである。
具体的には、ベクトルデータ群管理部1は、入力として得られるベクトルデータ群の中で、現在の処理対象となるベクトルデータがどれであるかの管理を行う。
処理開始時は、ベクトルデータ群の中の1番目のベクトルデータが処理対象として選択される。また、以降は、後述する対象点管理部4から、処理対象となる点データの処理の終了通知を受け、処理対象となるベクトルデータを2番目、3番目、・・・と逐次更新していく。また、処理対象となるベクトルデータが無くなったならば、処理完了の通知を後述する描画部12に送る。
【0021】
以下に詳細なベクトルデータ群管理部1の処理フローを示す(図8)。まず、処理対象ベクトル番号nを1にセットする(S101)。次に、管理対象となるベクトルデータをV(n)とする(S102)。後述するベクトルデータ抽出部2に処理対象となるベクトルデータV(n)を通知する(S103)。次に、後述する対象点管理部4からの終了通知を待ち、終了通知を受けたら、次のステップに進む(S104)。次にステップS105にて、全てのベクトルデータを処理したかの判定を行い、処理していない場合には、ステップS106に、処理した場合には、ステップS107に進む。ステップS106では、処理対象ベクトル番号nの更新を行う。典型的には、nを1つインクリメントし、ステップS102へ戻る。なお、更新は必ずしも連続的に行われる必要はない。何らかの規則に従って、所定のベクトルデータを管理対象とすることもできる。ステップS107では、後述する描画部12に処理完了通知を送る。以上が、典型的な処理フローの内容である。
【0022】
ただし、ベクトルデータ群管理部1は以降の処理で処理対象となるベクトルデータV(n)を管理するものであって、以上の処理フローは一例に過ぎない。任意の選択手法を用いて選択したV(n)を処理対象とすることができる。
【0023】
<ベクトルデータ抽出部>
次に、ベクトルデータ抽出部2について説明する。
ベクトルデータ抽出部2は、ベクトルデータ群管理部1から通知された処理対象のベクトル番号情報を用いて、ベクトルの開始点P1の座標、終了点P2の座標、ベクトルの塗りつぶし色などの属性情報などで構成されるベクトルデータを、入力されたベクトルデータ群の中から取得するためのものである。
【0024】
なお、ベクトルデータとして、座標や色属性の例を説明したが、これに限定されるものではなく、入力として得られるベクトルデータ群に含まれるデータ種別の全て、あるいは、一部を取得することが可能である。
【0025】
取得したベクトルデータは、後述する開始点・終了点算出部3に渡される。
<開始点・終了点算出部>
次に、開始点・終了点算出部3について説明する。
開始点・終了点算出部3は、ベクトルデータ抽出部2から受け取った処理対象のベクトルのデータをもとに、以降の処理の開始点および終了点を算出するためのものである。
【0026】
以降、本実施の形態における図形描画処理を、垂直方向(y軸方向)を基準として行う場合を例として説明を進める。ただし、これはあくまでも一例であり、これに限定されるものではない。水平方向(x軸方向)を基準として行うことも可能であるし、任意の方向を基準として行うことも可能である。任意の方向としては、描画したい図形の主軸方向(分散が最も小さい方向)などを考えることができる。また、方向は2次元に限定されるものではない。
【0027】
開始点・終了点算出部3では、基本的には、ベクトルデータを構成する2点P1(ベクトルの始点),P2(ベクトルの終点)のうち、y座標が小さい方を開始点に、大きい方を終了点として開始点、終了点のy座標を算出する。以下に、詳細な処理フローを示す(図9)。
【0028】
点P1の座標が(x1, y1)、点P2の座標が(x2,y2)であるとする。まず、点P1とP2のy座標の比較を行い、両者が等しいかどうか(y1 = y2かどうか)の判定をする(S201)。等しい場合には、ステップS205に進む。そうでない場合には、ステップS202へ進む。ステップS202では、y1 < y2かどうかの判定を行い、真の場合はステップS204へ、偽の場合は、ステップS203へ進む。
【0029】
ステップS203では、開始点のy座標ys = y2 + 1, 終了点のy座標ye = y1に設定する。同様に、ステップS204では、ys = y1, ye = y2 − 1、ステップS205では、ys = y1, ye = y2と設定する。
【0030】
この様子を模式的に表現したのが図10である。点P1とP2のy座標が等しい場合(図(a))は図示した2通りの可能性があるが、何れもys = ye = y1 (=y2)となる。この場合、開始点と終了点とは同じy座標となる。
【0031】
y1 < y2すなわち、P1のy座標が小さい場合は図中(b)のように、P1のy座標y1を開始点、P2の1つ手前の点P2’のy座標y2 − 1を終了点とする。
【0032】
単にP2を終了点として選ばないのは、P2は、次のベクトルの始点となるため、次のベクトルの処理の際に描画のための処理が行われるため、この段階で終了点に含めてしまうと、処理が2重となり処理コストを考えた際に、効率が低下するためである(図11)。図において、P1(n+1) = P2(n)となるため、このようなことが起こる。
【0033】
同様に、y1 > y2すなわち、P1のy座標が大きい場合は図中(c)のように、P2の1つ手前の点P2’のy座標y2+1を開始点、P1のy座標y1を終了点とする。
【0034】
なお、以上では、描画効率のため、2重に処理される点を終了点のy座標yeとして算出せず、1つ隣りの点を算出する例を示したが、これに限定されるものではない。単に終了点をy座標が大きい方の点のy座標として算出しても構わない。
【0035】
以上で、開始点・終了点のそれぞれのy座標が算出された。開始点・終了点算出部3は、この結果を後述する対象点管理部4に送る。
なお、以上では、y座標が小さい方を開始点、大きい方を終了点とする例を示したが、これに限定されるものではない。逆で、大きい方を開始点、小さい方を終了点としてもよい。
【0036】
また、単純に、ベクトルの始点P1を開始点、終点P2を終了点としても良いし、逆に、P2を開始点、P1を終了点としても良い。
またこれ以外でも、ベクトルデータ全体を通して、開始点、終了点の選び方が同様であって、しかも、算出した開始点、終了点を用いて、後述する以降の処理を一意に行うことが出来る手法であれば何でもよい。また、y座標を基準としているのは、本実施例では上述したように垂直方向を基準とした例を用いて説明しているからであって、これに限定される訳ではない。基準の方向に合わせて、同様の効果となるように適宜変化して構わない。
【0037】
また、以上では、ベクトルデータが取得される例を示したが、上述(<ベクトルデータ群の説明>の項)した通り、入力は点群データでも同様である。入力が点群データであった場合、上述の通りの変換を本開始点・終了点算出部3で行い、ベクトルデータとして扱い、同様の処理を行う。
【0038】
<対象点管理部>
次に、対象点管理部4について説明する。
対象点管理部4は、ベクトルデータ抽出部2で取得した処理対象のベクトルのデータ、および、開始点・終了点算出部3で算出された開始点・終了点データを受け取り、ベクトルデータを点(ピクセル)単位に分割し、処理対象とする点(ピクセル)のデータとして管理するためのものである。
【0039】
具体的には、図12に示す処理フローのように動作する。まず、開始点・終了点算出部3で算出された開始点を処理対象点(処理対象ピクセル)としてセットする(S301)。次に、処理対象点(y座標の値が現在の対象点)を管理対象とする(S302)。次に、ステップS302で管理対象とした点のy座標などの情報を後述する対象点算出部5に通知する(S303)。次に、塗りつぶし情報算出部7からの処理完了の通知を待ち、通知を受けた後に、ステップS305へ進む。ステップS305では、開始点・終了点算出部3で算出された終了点の処理が完了したかどうかを判定し、完了していない場合は、ステップS306へ進む。完了していると判定された場合は、ステップS307へ進む。ステップS306では、管理対象点のy座標の更新を行い、ステップS302に戻る。ステップS307では、対象点管理部4での処理が完了した旨の通知をベクトルデータ群管理部1へ送信する。
【0040】
<対象点算出部>
次に、対象点算出部5について説明する。
対象点算出部5は、ベクトルデータ抽出部2で取得した処理対象のベクトルのデータ、および、対象点管理部4から通知された管理対象点情報を受け取り、管理対象点の座標データを算出するためのものである。
【0041】
ここで、ベクトルデータ抽出部2から得られたベクトルのデータに含まれるベクトルの始点P1および終点P2のデータから、この2点で張られる部分直線の方程式は、以下の式(2)で得ることができる。
【0042】
【数1】

【0043】
ただし、yは、min(y1,y2) <= y <= max(y1,y2)を満たす必要がある。ここで、min(a,b), max(a,b)は、それぞれ、a,bの内の小さな値、大きな値を返す関数である。
【0044】
式(2)を用いることで、対象点管理部4から通知された管理対象点情報に含まれる管理対象点のy座標値をもとに、管理対象点のx座標値を算出することができる。
【0045】
対象点算出部5は、上記で算出した管理対象点のx座標と、対象点管理部4で得られたy座標とを合わせて、管理対象点座標(x,y)として、後述する対象点判定部6に送る。
【0046】
なお、以上では、式(2)を用いて、直線方程式からx座標を算出する手法に関して説明したが、これに限定されるものではない。Bresenhamの線分計算アルゴリズムなど、他の手法を用いて算出することも可能である。また、Bresenhamの線分計算アルゴリズムを使用する場合、先述した対象点管理部4にて、開始点での初期x座標を予め計算しておき、本対象点算出部5にて差分情報のみを算出することで、計算を高速化することも可能である。また、これら以外の手法を用いてx座標の算出を行っても構わない。
【0047】
<対象点判定部>
次に、対象点判定部6について説明する。
対象点判定部6は、対象点算出部5で算出された処理対象点の座標値、および、入力となるベクトル群データを用いて、その両脇の点(ピクセル)が塗りつぶし領域かどうかを判定し、処理対象点の座標値とともに両脇の判定情報を出力する。
【0048】
具体的には、対象点算出部5で算出された処理対象点Pの座標が(x,y)であったとすると、その両脇の点Pleft = (x-1,y), Pright = (x+1,y)の2点に対して、以下で説明する塗りつぶし領域判定を行う。
【0049】
<塗りつぶし領域判定>
塗りつぶし領域判定について説明する。塗りつぶし領域判定は、対象点が所定の規則に従って、塗りつぶし領域であるのか、そうでないのかを判定するものである。以降、塗りつぶし規則として、前述したnon-zero fillルールを例として説明する。
【0050】
図13に、塗りつぶし領域判定のフローチャートを示す。
ステップS401で、まず、カウンター値の初期化(cnt = 0)を行う。
ステップS402では、調査対象となるベクトル番号を初期化する(i = 0)。
ステップS403では、調査ベクトル情報の取得を行う。現在のベクトル番号iを用いて、調査ベクトルV(i)のデータを取得する。
ステップS404では、対象点が調査ベクトルV(i)に含まれるかどうかの判定を行う。判定方法としては、例えば、ベクトルV(i)によって貼られる部分直線に対象点の座標が含まれているか調べればよい。その他の手法を用いて判定しても構わない。含まれている場合には、対象点は塗りつぶし領域と判定され、ステップS415に進む。含まれていない場合には、S405へ進む。
【0051】
ステップS405では、対象点が調査ベクトルに対して上にあるかどうかの判定を行う。上にある場合には、ステップS406へ進む。そうでない場合には、ステップS408へ進む。
【0052】
ステップS406では、対象点に対して、調査ベクトルが左から右に変化するかどうかを判別し、変化する場合には、ステップS410へ、そうでない場合には、ステップS407へ進む。
【0053】
ステップS407では、調査ベクトルが右から左に変化するかどうかを判別し、変化する場合には、ステップS411へ、そうでない場合には、ステップS412へ進む。
【0054】
ステップS408では、対象点に対して、調査ベクトルが右から左に変化するかどうかを判別し、変化する場合には、ステップS410へ、そうでない場合には、ステップS409へ進む。
【0055】
ステップS409では、調査ベクトルが左から右に変化するかどうかを判別し、変化する場合には、ステップS411へ、そうでない場合には、ステップS412へ進む。
【0056】
ステップS410では、カウンターの値を1つ増加させる(cnt = cnt+1)。
ステップS411では、カウンターの値を1つ減少させる(cnt = cnt-1)。
ステップS412では、全てのベクトルに関して、以上の調査が終了したかの判定を行い、終了していない場合にはS413へ、終了した場合には、S414へ進む。
ステップS413では、調査ベクトル番号の更新を行い(i = i+1)、ステップS403へ戻る。
ステップS414では、カウンター値(cnt)から塗りつぶし判定を行う。具体的には、カウンター値が非ゼロならば、塗りつぶし領域として判定し、そうでない場合は、塗りつぶし領域ではないと判定する。
【0057】
ステップS415では、以上で判定した塗りつぶし領域か否かの判定結果を通知して終了する。
以上は、non-zero fillルールにおける塗りつぶし判定処理の一例である。この例では、対象点の位置に立って、ベクトルデータ群から構成される多角形を各ベクトルデータ毎に順次眺めていって、自分の体が1回転するかどうかを調べている。1回転する部分では、上記のカウンター値が非ゼロ値となり、塗りつぶし領域として判定される。
【0058】
なお、以上で説明した判定手法はあくまでも一例であり、これに限定されるものではない。対象点を通る直線を引いて、それがベクトルデータ群と何度横切るかを調べる方法など、これ以外の判定方法を用いることができる。
【0059】
また、以上では、non-zero fillルールを例として説明したが、塗りつぶし規則はこれに限定されるものではない。Even-odd fillルールやその他の規則など使用することが可能である。規則が変わった場合には、塗りつぶし可否の判定方法も別途変わるが、それに対しても、上記に準じる方法でも、それ以外の方法でも用いることが可能である。
【0060】
<両脇点の判定結果の出力>
対象点判定部6は、以上で説明した「塗りつぶし領域判定」を用いて、対象点の両脇の点Pleft = (x-1,y), Pright = (x+1,y)の2点に対する塗りつぶし判定結果が得られた。この結果を対象点座標情報とともに出力する。
【0061】
<塗りつぶし情報算出部>
次に、塗りつぶし情報算出部7について説明する。
塗りつぶし情報算出部7は、対象点判定部6から得られた処理対象点の座標値、および、その両脇の点(ピクセル)の塗りつぶし判定情報をもとに、対象点がそのスキャンラインにおいて、塗りつぶしに関与する点であるかどうかの判定を行い、関与する点であった場合には、その情報を生成するためのものである。
【0062】
ここで、スキャンラインとは、対象点が含まれる行、つまり対象点座標が(x1,y1)であった場合、y=y1で示される行であると定義する。
<スキャンライン毎の図形描画処理>
ここで、まず、スキャンライン毎の図形描画処理に関して説明しておく。スキャンライン毎の図形描画処理とは、描画をスキャンライン単位の処理として、スキャンライン毎に、図形の塗りつぶし領域を複数のラインの描画で行う処理である。
【0063】
例えば、図14のような多角形図形があったとする。この描画を考えた場合、図15のように、スキャンライン毎のライン描画処理に分割して描画することが可能である。図15は、説明のため、多少誇張して描いているし、各ラインの間も説明のために便宜的に空けてあるが、実際にはこれらは、ピクセル単位の精度で描かれるものである。
【0064】
ここで、図16に示されるあるy座標の1スキャンライン部分を考えてみる。すると、多角形図形の描画処理は、複数のラインの描画(図16の場合、2つのラインの描画)処理に置き換えられることが分かる。ラインの描画には、ラインの描画開始点と終了点のみあれば十分であるため、つまり、図16における点P1,P2,P3,P4のみの情報があれば、図形の描画が可能であることが分かる。
【0065】
ここで、図16のP1,P3は、ラインの描画開始点であるため、以降、ラインIN点と呼ぶ。また、P2,P4は、ラインの描画終了点であるため、以降、ラインOUT点と呼ぶ。
【0066】
スキャンライン単位での図形描画を考えた場合、このラインIN点とラインOUT点の算出を行えば良いと言える。
<両脇点の判定結果からの対象点のラインIN点・ラインOUT点判定>
対象点判定部6で判定された対象点(x,y)の両脇の点Pleft = (x-1,y), Pright = (x+1,y)の2点に対する塗りつぶし判定結果を用いて、対象点がラインIN点であるか、ラインOUT点であるか、それ以外か、の判定を行う。
【0067】
両脇の結果は以下の4通りとなる。
(1) 両脇とも偽。つまり、(空欄)※(空欄)
(2) 左が真、右が偽。つまり、(塗り)※(空欄)
(3) 左が偽、右が真。つまり、(空欄)※(塗り)
(4) 両脇とも真。つまり、(塗り)※(塗り)
ここで、※は、該当点(x,y)を示す。また、(空欄)は塗りつぶさない領域、(塗り)は塗りつぶし領域を示す。
今、多角形図形の塗りつぶし処理を対象点が含まれるスキャンライン単位で考える。
(1)の場合、両脇(Pleft,Pright双方)が塗りつぶさない領域であるため、対象点※は、そのラインでの塗りつぶしに関与しない点である。つまり、ラインIN点でもラインOUT点でもない。
【0068】
(2)の場合、対象点※の左側(Pleft)が塗りつぶし領域で、右側(Pright)が塗りつぶさない領域ということで、対象点※は、そのラインにおける塗りつぶし領域の終了点、すなわちラインOUT点とみなすことができる。つまり、対象点※の左側に存在するどこかの点から塗りつぶし領域が始まり、対象点※が塗りつぶし領域の終了位置となる訳である。
【0069】
(3)の場合、対象点※の左側(Pleft)が塗りつぶさない領域で、右側(Pright)が塗りつぶす領域ということで、対象点※は、そのラインにおける塗りつぶし領域の開始点、すなわちラインIN点とみなすことができる。つまり、対象点※から塗りつぶし領域が始まり、対象点※の右側に存在するどこかの点が塗りつぶし領域の終了位置となる訳である。
【0070】
(4)の場合、対象点※は、両脇(Pleft,Pright双方)が塗りつぶし領域であることから、対象点※は、塗りつぶし領域に含まれる点であるとみなすことができる。つまり、対象点※の左側に存在するどこかの点から塗りつぶし領域が始まり、対象点※の右側に存在するどこかの点が塗りつぶし領域の終了位置となり、ラインIN点でもラインOUT点でもない点であると言える。
【0071】
<算出した塗りつぶし情報の出力>
以上で説明した通り、塗りつぶし情報算出部7では、対象点の塗りつぶし情報、つまり、対象点(座標(x1,y1))があるスキャンライン(y=y1であるスキャンライン)において(1)ラインIN点、(2)ラインOUT点、(3)どちらでもない、という情報が得られる。これを後述する塗りつぶし情報登録部8に出力する。
【0072】
<塗りつぶし情報登録部>
次に、塗りつぶし情報登録部8について説明する。
塗りつぶし情報登録部8は、塗りつぶし情報算出部7で得られた処理対象点の塗りつぶし情報を塗りつぶし情報記憶領域9に登録するためのものである。
<塗りつぶし情報記憶領域の説明>
ここで、塗りつぶし情報記憶領域9は塗りつぶし情報を保持するための任意の記憶手段である。例えば、本実施例を実現する装置が保持している内部メモリなどで構成される。
【0073】
ただし、これに限定されるものではなく、塗りつぶし情報を保持することができるものであれば、任意の手段を用いることが可能である。また、塗りつぶし情報記憶領域9は、本実施例を実現する装置の内部に存在することが限定されるものではなく、脱着可能なメモリ装置(USBメモリ機器、SDメモリカードなど)や磁気記憶メディア(CD−R,DVD−Rなど)、任意の通信手段(有線LAN、無線LAN、W−CDMAなどの携帯電話を用いた通信など)を通した先にある記憶装置(NAS装置、他の機器に内蔵されたHDDなど)などでも構わない。
【0074】
塗りつぶし情報記憶領域9に登録する塗りつぶし情報としては、典型的には、対象点座標、それが(1)ラインIN点(2)ラインOUT点(3)そちらでもない、のどれに相当するか、である。ただし、これに限定されるものではなく、最低限これを含む任意の情報を登録するようにして構わない。
【0075】
塗りつぶし情報記憶領域9での記憶手法は様々な手法が考えられる。ここでは、以下でその一手法に関して説明するが、これはあくまでも一例であり、これに限定されるものではない。
【0076】
図17は塗りつぶし情報記憶領域9での記憶手法の一例を示す。図17の場合、各スキャンラインに対して、ラインIN点とラインOUT点の2つをそれぞれ記憶可能なスタック(可変領域)を用意し、それを全スキャンライン分(1080ライン分)用意する例を示している。
【0077】
全スキャンライン分とは、最終的に描画したい領域のスキャンライン総数を示す。例えば、フルハイビジョンの描画領域の場合、解像度は1920×1080となるので、1080ライン分ということになる。
【0078】
スタックには、それぞれラインIN点とラインOUT点と判定された点のx座標が保存される。図17で、xi##(n), xo##(n)は、それぞれ、保存されている、スキャンライン##でのラインIN点、ラインOUT点と判定された点のx座標を示している。
【0079】
<塗りつぶし情報登録部の動作>
例えば、塗りつぶし情報算出部7からスキャンライン番号が1078の対象点(対象点座標が(xs,1078)であるような点)に対して、ラインINであるとの塗りつぶし情報を得た場合、塗りつぶし情報登録部8では、その情報を塗りつぶし情報記憶領域9に登録する。この際、図17の例では、スキャンライン番号が1078のラインIN点のスタックには、xi1078(n)までのn+1個の情報が既に登録されているため、この末尾のn+2番目の情報として、対象点のx座標であるxsの値を登録する。
【0080】
なお、以上では、登録方法の一例を示したが、これに限定されるものではない。あくまでも実施の一形態であり、これ以外の登録方法でも構わない。例えば、上記では末尾に追加する例を示したが、先頭に追加してもよいし、任意の位置に任意の条件(例えば座標の昇順など)で登録を行っても構わない。
【0081】
<描画領域算出部>
次に、描画領域算出部10について説明する。
描画領域算出部10は、ベクトルデータ抽出部2から得られる処理対象ベクトルのデータをもととして、図形描画を行うための領域情報を算出するためのものである。
【0082】
例えば、描画した図形を表示する画面の範囲が1920×1080の解像度の場合、描画領域として、最大で1920×1080の領域が必要となる。しかし、通常の場合、実際に多角形図形が存在する領域は、1920×1080の領域の内の一部の領域である。例えば、図18の例では、1920×1080の領域の中央部分にのみ図形が存在している。この場合、図19に示すように、図形を包含する最小矩形領域(座標(x0,y0)から、高さh、幅wの領域)の部分のみ図形が存在しているため、この矩形領域部分のみを図形の描画領域とすればよい。このようにすることで、画面全体を描画領域とするよりも描画領域を限定することが可能となり、描画速度の向上が見込まれる。
【0083】
描画領域算出部10は、このような目的のために存在し、ベクトルデータ抽出部2から得られる処理対象ベクトルのデータが含まれる最小矩形領域の情報を算出し、それを基として、図形描画領域情報の更新を行う。
【0084】
本実施の形態の以上で説明してきたように、垂直方向(y軸方向)を基準とした場合、図形描画は、y軸方向のスキャンライン単位で行うため、図形の含まれる最小矩形情報のうち、y軸方向のデータのみが重要となる。すなわち、矩形領域のy軸方向の下限値(図19におけるy0)と矩形領域のy軸方向の上限値(図19におけるy0+h)の値のみが重要である訳である。そこで、描画領域算出部10では、この下限値(以降y_minと呼ぶ)と上限値(以降y_maxと呼ぶ)を算出する(図20)。
【0085】
算出のフローチャートを図21に示す。ステップS501で、まず、y_min, y_maxの初期値の設定を行う。次に、ステップS502で、ベクトルデータ抽出部2から得られたベクトルデータの取得を行う。次に、ステップS503で、ベクトルの始点のy座標をy0にセットする。ステップS504で、y_min > y0かどうかの判定を行い、真の場合は、ステップ505へ行き、ステップS505にてy_minにy0の値を設定してステップS506へ、偽の場合は、そのままS506へ進む。同様にステップS506にて、y_max < y0の判定を行い、真の場合は、ステップS507にてy_maxにy0を設定してステップS508へ、偽の場合はそのままステップS508へ進む。ステップS508にて、全てのベクトルに関して処理が終了したかの判定を行い、偽の場合は、ステップS502へ戻る。真の場合は、処理を終了する。これにより、y_min, y_maxの値を得ることができる。
【0086】
なお、以上で説明したのは、あくまでも実施の一形態であり、これに限定されるものではない。他の手法を用いて描画図形のy座標の上限値・下限値を算出してもよい。
【0087】
また、以上では、y座標のみを算出しているが、これに限定されるものではなく、同様の手段にて、x座標の情報を算出して、合わせて出力してもよい。また、上限値・下限値として出力するのではなく、下限値と領域の高さなど、情報量として同等の情報であれば、表現形態は問わない。
【0088】
<描画領域補正部>
次に、描画領域補正部11について説明する。
描画領域補正部11は、描画領域算出部10から得られる描画領域情報を補正するためのものである。入力となるベクトルデータ群によって構成される図形の全体が必ずしも描画領域に入っているとは限らない。
【0089】
図22にこの例を示す。図22は、図形の一部が描画領域外にある例である。この場合、y_min < 0となっているため、図形のこの部分は描画されない。この際には、y_min = 0に補正する必要がある。描画領域補正部11では、このような補正を行う。
【0090】
具体的には、y_min < 0の場合に、y_min = 0とする。また、y_max >= 描画領域のy座標の上限(図22の例の場合には、1080)の場合には、y_max = 描画領域のy座標の上限値と補正する。
【0091】
<描画データ補正部>
次に、描画データ補正部12について説明する。
描画データ補正部12は、ベクトルデータ群管理部1からのベクトルデータ群の処理終了の通知を受けて、塗りつぶし情報記憶領域9に記憶された描画のための情報を読み込み、これを後述する描画部13で描画するために適切なデータとなるように補正するためのものである。
【0092】
図17に示されるように、ベクトルデータ群管理部1からのベクトルデータ群の処理終了の通知を受けた時点では、描画したい図形を構成する全てのベクトルに含まれる点(ピクセル)に対して、ラインIN点、ラインOUT点の塗りつぶし情報が得られている。
【0093】
しかし、これらは、上記塗りつぶし情報登録部8で説明した手法を用いた場合、ベクトルの処理順にスタックの先頭から積まれていくため、この出現順序は様々である。これは、ラインの描画コストを考えた場合効率が悪い。
【0094】
また、描画したい図形の一部が描画領域よりも外にある場合には、ラインIN点あるいはラインOUT点が描画領域の外となることがある(図23)。この場合、ラインIN点から描画領域の左端までのラインの描画は実際の描画領域に反映されないため無駄である。これは、処理装置の速度の低下を招く。
【0095】
また、図形の形状が複雑な場合、同じラインIN点・OUT点を複数のベクトルが通過することがあるため、データの重複が起こりうる。この場合、同じ直線を複数回描画することは無駄である。また、ラインIN点・OUT点の対で表現される直線の領域が交差することがある。この場合は、複数の直線を1つにまとめることが可能である。こうすることによって、直線の描画回数を減らすことができて速度上昇に繋がる。
【0096】
描画データ補正部12は、これらの問題を解消するためのもので、
1.ラインIN点・ラインOUT点を昇順(あるいは降順)にソートする
2.描画範囲外のデータを描画範囲端に修正する。具体的には、ラインIN点、ラインOUT点のx座標が負値の場合は0に、描画幅値を超えている場合には、描画幅値とする。好ましくは、対応するラインIN点、ラインOUT点が両方とも描画範囲外であったならば、不要データとしてスタックから削除する。
【0097】
3.冗長なラインIN点、ラインOUT点データを削除する。具体的には、ラインIN点、ラインOUT点データに重複がある場合には、それを削除する。また、好ましくは、対となるラインIN点、ラインOUT点データによって構成される直線に包含関係のある複数の直線となるデータが存在した場合、包含される直線を構成するデータを削除する。
【0098】
以上の処理により、補正されたデータでは、先頭から同じ位置にあるラインIN点・ラインOUT点を対応点として、直線(ライン)描画を行っていくだけで、対象スキャンラインにおいて、描画したい図形のうち描画範囲内にある部分を構成する部分が、画面左側から順に描かれて行くことになる。
【0099】
<描画部>
最後に、描画部13について説明する。
描画部13は、描画データ補正部12から得られた描画データデータをスキャンライン毎に直線(ライン)描画によって描画していくものである。この際、描画領域補正部11から得られた描画範囲(具体的には、描画開始スキャンラインと描画終了スキャンライン)の情報を用いて、描画処理範囲を限定することで、描画の高速化を行う。
【0100】
図24に描画部13の処理フローチャートを示す。
スキャンライン番号mのn番目のラインINデータをline_in(m,n)、ラインOUTデータをline_out(m,n)とする。また、スキャンライン番号mに含まれるデータの要素数をn_elmtとする。また、描画領域補正部11から得られた描画開始スキャンライン番号をm0、終了スキャンライン番号をm1とする。
【0101】
まず、ステップS601で、描画対象スキャンライン番号として、m0をセットする。次に、ステップS602で、処理対象データ番号nの初期化と、要素数n_elmtの算出を行う。次に、ステップS603で、L0 = line_in(m,n), L1 = line_out(m,n)の値の取得を行う。次に、ステップS604で、L0, L1で形成されるライン(直線)の実際の描画を行う。これにより、画面にL0,L1を両端とする直線が描画される。そして、ステップS605で、全ての要素について終了したかの判定を行い、終了していない場合には、ステップS606にて、処理点の更新(n=n+1)を行い、ステップS603に戻る。終了した場合には、ステップS607へ進む。ステップS607では、描画終了スキャンラインm1までの処理が完了したかの判定を行い、終了していない場合には、ステップS608にて、処理スキャンラインの更新(m=m+1)を行い、ステップS602へ戻る。終了している場合には、処理を終える。
【0102】
なお、ラインの実際の描画は、ライン描画専用のHWを用いてもよいし、汎用のグラフィックス処理LSI(GPU、Graphics Processing Unit)などを用いてもよいし、その他の手段を用いてソフトウェア的に処理しても構わない。
【0103】
以上により、図15で示されたようにスキャンライン単位の描画が逐次行われ、最終的に、図14で示されるような多角形図形の描画が完了する。
なお、以上で示した手法はあくまでも実施の一形態であり、これに限定されるものではない。
<第1の実施形態による効果>
以上で説明した本発明の第1の実施形態によれば、入力されるベクトルデータ群によって構成される図形の複雑さに依存して描画処理が複雑になることはない。例えば、三角形分割を用いた描画手法(非特許文献2参照)では、入力された図形に複雑な自己交差があった場合、これを1つの閉ループで構成される単純多角形群に分割して処理する必要がある。このため、図形の複雑さに依存して、分割処理が非常に多数回適用されることになり、以降の処理が複雑となる。これは、不具合(バグ)の大きな要因の1つとなりうる。入力図形が非常に複雑となった場合、予期しない形状の入力がありえ、この際に上記分割処理が上手く動作しない可能性が出てくるからである。つまり、図形の複雑さに比例して処理量が増加するような手法は安定度に欠けるといえる。一方、本発明の第1の実施形態によれば、処理はベクトルデータ単位で行っており、この処理内容は、図形の形状に依らない。このため、図形の複雑さに比例して処理量が増加するようなことはない。このため、本発明の第1の実施形態による手法は、非常に安定した手法と言うことができる。
【0104】
また、本発明の第1の実施形態による手法は、描画処理が実行される前段階に、ラインIN、ラインOUTのデータ群のみを記憶すれば良い。これは、非常に小さなデータ量しか必要としないものであり、メモリの使用量は少ない。一方、三角形分割の手法は、描画処理前に、様々な前処理を必要とする(詳細に関しては、非特許文献2などを参照のこと)ため、非常に多くの中間データを記憶しておく必要がある。描画処理に関しても、三角形単位で行うため、ライン単位である本発明の第1の実施形態による手法よりもメモリ使用量が多くなる。また、ステンシルバッファを用いた手法(非特許文献3など)は、描画処理のためにステンシルバッファという特殊なメモリ領域を必要とする。これは、基本的には、描画領域と同等の領域が必要となる。また、描画処理自体も画面単位で行うため、非常に多くのメモリを使用する必要がある。本発明の第1の実施形態による手法は、メモリ使用量の観点から、これらの手法に対するメリットが大きい。
【0105】
また、本発明の第1の実施形態による手法は、描画処理としてライン描画が可能な装置を用意すれば良いため、複雑な専用回路を必要とせず、簡単な回路または、汎用のグラフィックスLSIを用いて実現可能であるという観点から、使用リソースに対するメリットも大きい。
【0106】
さらに、本発明の第1の実施形態による手法は、上述してきたような構成を取ることにより、ポイントベースの手法や従来のスキャンラインベースの手法と比べて、高速に図形描画が可能である。
【0107】
以上より、本発明の第1の実施形態による手法によれば、従来技術に存在していた少リソースでの使用が困難であったり、安定性に欠けたり、高速性に欠けたりする問題点を解消し、少ないリソースやメモリしか使用不可能な環境下にて、高速かつ安定的に動作することが可能な図形描画装置、および、手法を提供することが可能となる。
【0108】
[第1の実施形態の変形例1]
図25に本発明の第1の実施形態の変形例1に係る図形描画装置の全体構成図を示す。本発明の第1の実施形態の変形例1は、第1の実施例に、ベクトルデータ群補正部14が追加された形となっている。
【0109】
<ベクトルデータ群補正部>
ベクトルデータ群補正部14について説明する。ベクトルデータ群補正部14は、入力されたベクトルデータ群を補正するためのものである。
ベクトルデータ群に、ゼロベクトルのデータが含まれていた場合、このデータは除去することが可能である。
また、連続する2つ以上のベクトルの方向が同じ場合、つまり、
V(n) / |V(n)| = V(n+1) / |V(n+1)| = ・・・ = V(n+m) / |V(n+m)|
(m = 1, 2, ・・・)
という関係が成り立つ場合、これらのベクトルは、1つのベクトルとしてマージすることが可能となる。つまり、V(n)の終点を上記の関係におけるV(n+m)の終点に置き換え、V(n+1),・・・,V(n+m)のデータを削除することが可能である。
【0110】
さらに、連続するベクトルが逆の方向を持っている場合も同様にマージ可能であり、連続するベクトルで貼られるベクトルの新たな両端点を算出し、V(n)をそのベクトルに置き換え、マージされた残りのベクトルは削除することが可能である。
【0111】
ベクトルデータ群補正部14は、このような冗長な表現となっているベクトル群データの補正を行う。この補正により、ベクトルデータ群の総数を削減することが可能となり、以降の処理のスピードアップに繋がる。
【0112】
なお、以上では、冗長な表現の一例を示したが、これに限定されるものではない。ベクトルデータ群によって構成される多角形図形の形状を変えることなく、ベクトルデータ群の総数を削減することが可能な変形は、全て用いることが可能である。
【0113】
本発明の第1の実施形態の変形例1の以降の処理に関しては、第1の実施形態において、入力であるベクトルデータ群として説明した部分を適宜、ベクトルデータ群補正部14によって補正された後のベクトルデータ群と読み替えれば同様である。
【0114】
以上で説明した以外は、第1の実施形態と同様の動作である。
[第1の実施形態の変形例2]
図26は、本発明の第1の実施形態の変形例2に係る図形描画装置の全体構成図である。
変形例2に係る図形描画装置は、第1の実施形態の図形描画装置における描画データ補正部12の代わりに、塗りつぶし情報記憶領域9に記憶されているデータを用いて、塗りつぶし情報登録部8で得られた登録情報を逐次補正しながら、塗りつぶし情報記憶領域9のデータを更新するための新たな描画データ補正部15が追加されている。また、第1の実施形態の図形描画装置における描画データ補正部12に接続されていた部分は、直接描画部13に接続されている。
【0115】
描画データ補正部15の動作は、基本的には、第1の実施形態の図形描画装置における描画データ補正部12と同様である。異なる部分は、第1の実施形態の図形描画装置における描画データ補正部12では、塗りつぶし情報記憶領域9に蓄積されているデータに対して後から補正を行ったのに対し、描画データ補正部15では、塗りつぶし情報記憶領域9のデータを参照しつつ、塗りつぶし情報登録部8で得られた登録情報を補正しながら塗りつぶし情報記憶領域9に蓄積していく、つまり、登録データを逐次補正しながら塗りつぶし情報記憶領域9に保存して行く(同時に、塗りつぶし情報記憶領域9に既に蓄積されたデータも更新される)という点である。
【0116】
描画部13は、ベクトルデータ群管理部1からのベクトルデータ群の処理終了の通知を受けて処理を開始するという点以外は、第1の実施形態と全く同様である。
[第1の実施形態の変形例3]
図27は、本発明の第1の実施形態の変形例3に係る図形描画装置の全体構成図である。
第1の実施形態との違いは、描画データ補正部12が、塗りつぶし情報記憶領域9と描画部13の間の存在するのではなく、描画部13にのみ接続されているという点である。
【0117】
この場合、描画部13での、各スキャンラインにおける処理の前処理として、描画データ補正部12を呼び出し、描画データ補正部12にて対象スキャンラインのデータの補正を行い、この結果を再び描画部13で受け取り、処理を続ける。具体的には、図24におけるステップS603の処理の前に、上記の処理を入れればよい。描画データ補正部12にて行う補正手法は、第1の実施形態での説明と全く同様である。
【0118】
第1の実施形態との違いは、第1の実施形態では、「全てのデータの補正」→「全てのデータの描画」というシーケンシャルな処理であったのに対し、本変形例は、スキャンライン毎に、「データの補正」→「描画」を繰り返すという点である。
【0119】
[第1の実施形態の変形例4]
図28は、本発明の第1の実施形態の変形例4に係る図形描画装置の全体構成図である。
図1で表される第1の実施形態の塗りつぶし情報算出部7と塗りつぶし情報登録部8の間に、新たに、塗りつぶし情報補正部16が追加される形となっている。
塗りつぶし情報補正部16は、塗りつぶし情報算出部7で得られた処理対象点の塗りつぶし情報を補正し、塗りつぶし情報登録部8に渡すためのものである。
具体的には、塗りつぶし情報補正部16では、ラインIN点・ラインOUT点の位置の補正を行う。例えば、あるベクトルに対して、図29のようなラインOUT点が得られたとする。この場合、図30に示したように、ラインOUT点までをそのスキャンラインにおける図形の塗りつぶし領域とするか、図31に示したように、一つスキャンラインの上の点(n-1)におけるラインOUT点よりも一つ手前の点までを塗りつぶし領域にするか、などというような、複数の塗りつぶし手法が考えられる。
【0120】
これは、多角形図形を描画する際の、多角形の縁部分の描画のルールによって変化する。塗りつぶし情報補正部16は、この描画ルールに従って、塗りつぶし情報算出部7で得られた処理対象点のラインIN点・ラインOUT点の座標値の補正を行う。
【0121】
補正方法は描画ルールによって変化するが、図30の例の場合、上下のスキャンラインの情報を用いて算出する。上下のどちらを使うかは、ベクトルの方向により決定する。
【0122】
塗りつぶし情報補正部16は補正したラインIN点、ラインOUT点のデータを塗りつぶし情報登録部8に渡し、塗りつぶし情報登録部8では、第1の実施形態のところで説明したのと同様に処理を継続する。
【0123】
なお、ここでは、補正方法の一例を示したが、これに限定されるものではない。描画ルールに合致するような任意の補正方法を用いて処理を行う。
以上の各実施形態やその変形例は、適宜組み合わせて実施することが可能である。
本願発明の実施例における処理をコンピュータで実行可能なプログラムで実現し、このプログラムをコンピュータで読みとり可能な記憶媒体として実現することも可能である。
【0124】
なお、本願発明における記憶媒体としては、磁気ディスク、フロッピー(登録商標)ディスク、ハードディスク、光ディスク(CD−ROM、CD−R、DVD等)、光磁気ディスク(MO等)、半導体メモリ等、プログラムを記憶でき、かつコンピュータまたは組み込みシステムが読みとり可能な記憶媒体であれば、その記憶形式は何れの形態であってもよい。
【0125】
また、記憶媒体からコンピュータや組み込みシステムにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているOS(オペレーションシステム)や、データベース管理ソフト、ネットワーク等のMW(ミドルウェア)等が本実施形態を実現するための各処理の一部を実行してもよい。
【0126】
さらに、本願発明における記憶媒体は、コンピュータあるいは組み込みシステムと独立した媒体に限らず、LANやインターネット等により伝達されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。
【0127】
また、記憶媒体は1つに限られず、複数の媒体から本実施形態における処理が実行される場合も、本発明における記憶媒体に含まれ、媒体の構成は何れの構成であってもよい。
【0128】
なお、本願発明におけるコンピュータまたは組み込みシステムは、記憶媒体に記憶されたプログラムに基づき、本実施形態における各処理を実行するためのものであって、パソコン、マイコン等の1つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であってもよい。
【0129】
また、本願発明におけるコンピュータとは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本願発明の機能を実現することが可能な機器、装置を総称している。
【0130】
なお、本発明は、上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。さらに、上記実施形態には種々の段階の発明は含まれており、開示される複数の構成要件における適宜な組み合わせにより、種々の発明が抽出され得る。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題(の少なくとも1つ)が解決でき、発明の効果の欄で述べられている効果(の少なくとも1つ)が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【図面の簡単な説明】
【0131】
【図1】本発明の第1の実施形態に係る図形描画装置の構成例を概略的に示す図。
【図2】ベクトルデータ群を説明するための図。
【図3】図形描画に関して説明した図。
【図4】図形描画に関して説明した図。
【図5】多角形図形に関して説明した図。
【図6】閉じていない多角形図形に関して説明した図。
【図7】多角形図形に関して説明した図。
【図8】ベクトルデータ群管理部の処理フローを説明した図。
【図9】開始点・終了点算出部の処理フローを説明した図。
【図10】開始点・終了点算出の様子を模式的に説明した図。
【図11】連続するベクトルに共通する点が2重に処理される様子を説明した図。
【図12】対象点管理部の処理フローを説明した図。
【図13】塗りつぶし領域判定のフローチャート図。
【図14】スキャンライン毎の図形描画処理を説明した図。
【図15】スキャンライン毎の図形描画処理を説明した図。
【図16】スキャンライン毎の図形描画処理を説明した図。
【図17】塗りつぶし情報記憶領域を説明した図。
【図18】描画領域に関して説明した図。
【図19】描画領域に関して説明した図。
【図20】描画領域に関して説明した図。
【図21】描画領域算出のフローチャート図。
【図22】描画領域の補正に関して説明した図。
【図23】描画データの補正に関して説明した図。
【図24】描画部の処理フローチャート図。
【図25】本発明の第1の実施形態の変形例1に係る図形描画装置の構成例を概略的に示す図。
【図26】本発明の第1の実施形態の変形例2に係る図形描画装置の構成例を概略的に示す図。
【図27】本発明の第1の実施形態の変形例3に係る図形描画装置の構成例を概略的に示す図。
【図28】本発明の第1の実施形態の変形例4に係る図形描画装置の構成例を概略的に示す図。
【図29】塗りつぶし情報の補正に関して説明した図。
【図30】塗りつぶし情報の補正に関して説明した図。
【図31】塗りつぶし情報の補正に関して説明した図。
【符号の説明】
【0132】
1・・・ベクトルデータ群管理部
2・・・ベクトルデータ抽出部
3・・・開始点・終了点算出部
4・・・対象点管理部
5・・・対象点算出部
6・・・対象点判定部
7・・・塗りつぶし情報算出部
8・・・塗りつぶし情報登録部
9・・・塗りつぶし情報記憶領域
10・・・描画領域算出部
11・・・描画領域補正部
12・・・描画データ補正部
13・・・描画部
14・・・ベクトルデータ群補正部
15・・・描画データ補正部
16・・・塗りつぶし情報補正部

【特許請求の範囲】
【請求項1】
入力となるベクトルデータ群を管理するベクトルデータ群管理手段と、
前記ベクトルデータ群管理手段での管理情報に基づいて、入力となるベクトルデータ群から処理対象ベクトルデータを抽出するベクトルデータ抽出手段と、
前記ベクトルデータ抽出手段で抽出されたベクトルデータの処理順を算出する処理順序算出手段と、
前記処理順序算出手段で算出された処理順序を用いて処理対象点の決定、及び前記ベクトルデータ群管理手段に対象ベクトルの処理の終了の通知を行う対象点管理手段と、
前記対象点管理手段で得られる処理対象点の管理情報をもとに、処理対象点の塗りつぶしの可否を判断し、塗りつぶし情報として算出するための塗りつぶし情報算出手段と、
前記塗りつぶし情報算出手段によって得られた塗りつぶし情報を用いて、図形を描画するための描画手段を具備することを特徴とする図形描画装置。
【請求項2】
入力となるベクトルデータ群を管理するベクトルデータ群管理手段と、
前記ベクトルデータ群管理手段での管理情報に基づいて、入力となるベクトルデータ群から処理対象ベクトルデータを抽出するベクトルデータ抽出手段と、
前記ベクトルデータ抽出手段で抽出されたベクトルデータの処理順を算出する処理順序算出手段と、
前記処理順序算出手段で算出された処理順序を用いて処理対象点の決定、及び前記ベクトルデータ群管理手段に対象ベクトルの処理の終了の通知を行う対象点管理手段と、
前記対象点管理手段で得られる処理対象点の管理情報をもとに、処理対象点の塗りつぶしの可否を判断し、塗りつぶし情報として算出するための塗りつぶし情報算出手段と、
対象点の塗りつぶし情報を保存するための塗りつぶし情報保存手段と、
前記塗りつぶし情報算出手段で算出された塗りつぶし情報を前記塗りつぶし情報保存手段に登録するための塗りつぶし情報登録手段と、
前記ベクトルデータ抽出手段で抽出されたベクトルデータをもとに、最終的に描画を行う領域を求めるための描画領域算出手段と、
前記描画領域算出手段で得られた描画領域情報、および、前記塗りつぶし情報保存手段に保存された塗りつぶし情報を用いて、図形を描画するための描画手段を具備することを特徴とする図形描画装置。
【請求項3】
入力となるベクトルデータ群を管理するためのベクトルデータ群管理手段と、
前記ベクトルデータ群管理手段での管理情報に基づいて、入力となるベクトルデータ群から処理対象ベクトルデータを抽出するベクトルデータ抽出手段と、
前記ベクトルデータ抽出手段で抽出されたベクトルデータから、処理の開始点および終了点を算出する開始点・終了点算出手段と、
前記開始点・終了点算出手段で算出された処理開始点・終了点情報を用いて処理対象点の決定、及び前記ベクトルデータ群管理手段に対象ベクトルの処理の終了の通知を行う対象点管理手段と、
前記対象点管理手段で得られる処理対象点の管理情報をもとに、処理対象点のピクセル座標位置を算出する対象点算出手段と、
前記対象点算出手段で算出された処理対象点の座標位置の両脇のピクセルの塗りつぶし判定を行う対象点判定手段と、
前記対象点判定手段での判定結果をもとに、対象点の塗りつぶし情報を算出する塗りつぶし情報算出手段と、
対象点の塗りつぶし情報を保存する塗りつぶし情報保存手段と、
前記塗りつぶし情報算出手段で算出された塗りつぶし情報を前記塗りつぶし情報保存手段に登録する塗りつぶし情報登録手段と、
前記ベクトルデータ抽出手段で抽出されたベクトルデータをもとに、図形描画領域を算出・更新する描画領域算出手段と、
前記描画領域算出手段で算出された描画領域を補正して、最終的に描画を行う領域を求める描画領域補正手段と、
前記塗りつぶし情報保存手段に保存された塗りつぶし情報を描画するのに適正なデータとして補正する描画データ補正手段と、
前記描画領域補正手段で得られた描画領域情報、前記描画データ補正手段で補正されたデータを用いて、図形を描画する描画手段を具備することを特徴とする図形描画装置。
【請求項4】
入力となるベクトルデータ群のベクトルデータを補正し、冗長なベクトルデータのマージ、削除を行うベクトルデータ群補正手段と、
前記ベクトルデータ群補正手段から得られるベクトルデータ群を管理するベクトルデータ群管理手段と、
前記ベクトルデータ群管理手段での管理情報に基づいて、前記ベクトルデータ群補正手段から得られるベクトルデータ群から処理対象ベクトルデータを抽出するベクトルデータ抽出手段と、
前記ベクトルデータ抽出手段で抽出されたベクトルデータから、処理の開始点および終了点を算出する開始点・終了点算出手段と、
前記開始点・終了点算出手段で算出された処理開始点・終了点情報を用いて処理対象点の決定、及び前記ベクトルデータ群管理手段に対象ベクトルの処理の終了の通知を行う対象点管理手段と、
前記対象点管理手段で得られる処理対象点の管理情報をもとに、処理対象点のピクセル座標位置を算出する対象点算出手段と、
前記対象点算出手段で算出された処理対象点の座標位置の両脇のピクセルの塗りつぶし判定を行う対象点判定手段と、
前記対象点判定手段での判定結果をもとに、対象点の塗りつぶし情報を算出する塗りつぶし情報算出手段と、
対象点の塗りつぶし情報を保存する塗りつぶし情報保存手段と、
前記塗りつぶし情報算出手段で算出された塗りつぶし情報を前記塗りつぶし情報保存手段に登録する塗りつぶし情報登録手段と、
前記ベクトルデータ抽出手段で抽出されたベクトルデータをもとに、図形描画領域を算出・更新する描画領域算出手段と、
前記描画領域算出手段で算出された描画領域を補正して、最終的に描画を行う領域を求める描画領域補正手段と、
前記塗りつぶし情報保存手段に保存された塗りつぶし情報を描画するのに適正なデータとして補正する描画データ補正手段と、
前記描画領域補正手段で得られた描画領域情報、前記描画データ補正手段で補正されたデータを用いて、図形を描画する描画手段を具備することを特徴とする図形描画装置。
【請求項5】
入力となるベクトルデータ群を管理するベクトルデータ群管理手段と、
前記ベクトルデータ群管理手段での管理情報に基づいて、入力となるベクトルデータ群から処理対象ベクトルデータを抽出するベクトルデータ抽出手段と、
前記ベクトルデータ抽出手段で抽出されたベクトルデータから、処理の開始点および終了点を算出する開始点・終了点算出手段と、
前記開始点・終了点算出手段で算出された処理開始点・終了点情報を用いて処理対象点の決定、及び前記ベクトルデータ群管理手段に対象ベクトルの処理の終了の通知を行う対象点管理手段と、
前記対象点管理手段で得られる処理対象点の管理情報をもとに、処理対象点のピクセル座標位置を算出する対象点算出手段と、
前記対象点算出手段で算出された処理対象点の座標位置の両脇のピクセルの塗りつぶし判定を行う対象点判定手段と、
前記対象点判定手段での判定結果をもとに、対象点の塗りつぶし情報を算出する塗りつぶし情報算出手段と、
対象点の塗りつぶし情報を保存する塗りつぶし情報保存手段と、
前記塗りつぶし情報算出手段で算出された塗りつぶし情報を前記塗りつぶし情報保存手段に登録する塗りつぶし情報登録手段と、
前記塗りつぶし情報保存手段に保存された塗りつぶし情報を用いて、前記塗りつぶし情報登録手段から得られる登録情報を、描画するのに適正なデータとして補正し、前記塗りつぶし情報保存手段に保存された塗りつぶし情報を更新する描画データ補正手段と、
前記ベクトルデータ抽出手段で抽出されたベクトルデータをもとに、図形描画領域を算出・更新する描画領域算出手段と、
前記描画領域算出手段で算出された描画領域を補正して、最終的に描画を行う領域を求める描画領域補正手段と、
前記描画領域補正手段で得られた描画領域情報、前記塗りつぶし情報登録手段に保存されたデータを用いて、図形を描画する描画手段を具備することを特徴とする図形描画装置。
【請求項6】
入力となるベクトルデータ群を管理するベクトルデータ群管理手段と、
前記ベクトルデータ群管理手段での管理情報に基づいて、入力となるベクトルデータ群から処理対象ベクトルデータを抽出するベクトルデータ抽出手段と、
前記ベクトルデータ抽出手段で抽出されたベクトルデータから、処理の開始点および終了点を算出する開始点・終了点算出手段と、
前記開始点・終了点算出手段で算出された処理開始点・終了点情報を用いて処理対象点の決定、及び前記ベクトルデータ群管理手段に対象ベクトルの処理の終了の通知を行う対象点管理手段と、
前記対象点管理手段で得られる処理対象点の管理情報をもとに、処理対象点のピクセル座標位置を算出する対象点算出手段と、
前記対象点算出手段で算出された処理対象点の座標位置の両脇のピクセルの塗りつぶし判定を行う対象点判定手段と、
前記対象点判定手段での判定結果をもとに、対象点の塗りつぶし情報を算出する塗りつぶし情報算出手段と、
対象点の塗りつぶし情報を保存する塗りつぶし情報保存手段と、
前記塗りつぶし情報算出手段で算出された塗りつぶし情報を前記塗りつぶし情報保存手段に登録する塗りつぶし情報登録手段と、
前記ベクトルデータ抽出手段で抽出されたベクトルデータをもとに、図形描画領域を算出・更新する描画領域算出手段と、
前記描画領域算出手段で算出された描画領域を補正して、最終的に描画を行う領域を求める描画領域補正手段と、
前記描画領域補正手段で得られた描画領域情報、前記塗りつぶし情報保存手段に保存されたデータを用いて、図形を描画する描画手段と、
前記描画手段と連携して動作し、描画手段から取得した描画データを適正なデータとして補正した後、再び描画手段へ補正したデータを戻す描画データ補正手段を具備することを特徴とする図形描画装置。
【請求項7】
入力となるベクトルデータ群を管理するベクトルデータ群管理手段と、
前記ベクトルデータ群管理手段での管理情報に基づいて、入力となるベクトルデータ群から処理対象ベクトルデータを抽出するベクトルデータ抽出手段と、
前記ベクトルデータ抽出手段で抽出されたベクトルデータから、処理の開始点および終了点を算出する開始点・終了点算出手段と、
前記開始点・終了点算出手段で算出された処理開始点・終了点情報を用いて処理対象点の決定、及び前記ベクトルデータ群管理手段に対象ベクトルの処理の終了の通知を行う対象点管理手段と、
前記対象点管理手段で得られる処理対象点の管理情報をもとに、処理対象点のピクセル座標位置を算出する対象点算出手段と、
前記対象点算出手段で算出された処理対象点の座標位置の両脇のピクセルの塗りつぶし判定を行う対象点判定手段と、
前記対象点判定手段での判定結果をもとに、対象点の塗りつぶし情報を算出する塗りつぶし情報算出手段と、
前記塗りつぶし情報算出手段で算出された塗りつぶし情報を所定の描画規則に従って補正する塗りつぶし情報補正手段と、
対象点の塗りつぶし情報を保存する塗りつぶし情報保存手段と、
前記塗りつぶし情報補正手段で補正された塗りつぶし情報を前記塗りつぶし情報保存手段に登録する塗りつぶし情報登録手段と、
前記ベクトルデータ抽出手段で抽出されたベクトルデータをもとに、図形描画領域を算出・更新する描画領域算出手段と、
前記描画領域算出手段で算出された描画領域を補正して、最終的に描画を行う領域を求める描画領域補正手段と、
前記塗りつぶし情報保存手段に保存された塗りつぶし情報を描画するのに適正なデータとして補正する描画データ補正手段と、
前記描画領域補正手段で得られた描画領域情報、前記描画データ補正手段で補正されたデータを用いて、図形を描画する描画手段を具備することを特徴とする図形描画装置。
【請求項8】
前記対象点管理手段は、前記塗りつぶし情報算出手段から得られる対象点の処理の終了の通知情報を用いて処理対象点の決定を行うことを特徴とする請求項1乃至請求項7記載の図形描写装置。
【請求項9】
入力となるベクトルデータ群に含まれる処理対象ベクトルの処理順序、データを管理するステップと、
管理情報に基づいて、前記ベクトルデータ群から処理対象ベクトルのデータの抽出を行い、
抽出されたベクトルデータの処理順の算出を行うステップと、
算出された処理順序情報を用いて処理対象点の管理、及び対象ベクトルの処理の終了の通知を行うステップと、
処理対象点の管理情報をもとに、処理対象点の塗りつぶしの可否を判断し、塗りつぶし情報として算出するステップと、
算出された塗りつぶし情報を用いて、図形の描画を行うステップを含むことを特徴とする図形描画方法。
【請求項10】
前記通知を行うステップは、対象点の処理の終了通知情報を用いて処理対象点の管理、対象ベクトルの処理の終了の通知を行うことを特徴とする請求項9記載の図形描画方法。
【請求項11】
コンピュータを図形描画装置として機能させるためのプログラムであって、
入力となるベクトルデータ群に含まれる処理対象ベクトルの処理順序、データを管理する機能と、
管理情報に基づいて、前記ベクトルデータ群から処理対象ベクトルのデータの抽出を行い、
抽出されたベクトルデータの処理順の算出を行う機能と、
算出された処理順序情報を用いて処理対象点の管理、及び対象ベクトルの処理の終了の通知を行う機能と、
処理対象点の管理情報をもとに、処理対象点の塗りつぶしの可否を判断し、塗りつぶし情報として算出する機能と、
算出された塗りつぶし情報を用いて、図形の描画を行う機能を含みコンピュータに実現させるためのプログラム。
【請求項12】
前記通知を行う機能は、対象点の処理の終了通知情報を用いて処理対象点の管理、対象ベクトルの処理の終了の通知を行うことを特徴とする請求項11記載のプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate

【図30】
image rotate

【図31】
image rotate


【公開番号】特開2007−264988(P2007−264988A)
【公開日】平成19年10月11日(2007.10.11)
【国際特許分類】
【出願番号】特願2006−88704(P2006−88704)
【出願日】平成18年3月28日(2006.3.28)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】