描画装置および方法
【課題】オブジェクトの状況に応じて適したレンダリング方法を選択することができる。
【解決手段】ベクタデータを記憶する第1記憶手段104と、ベクタデータがレンダリングされる曲面モデルおよびベクタデータ定義位置を記憶する第2記憶手段101と、ベクタ定義空間上に少なくとも1つのプリミティブデータを生成する第1生成手段105と、ベクタ定義空間での曲面モデルを構成する要素とベクタデータとの関係を判定してモデル制御情報を得る判定手段102と、モデル制御情報を参照してベクタデータを再定義して再定義曲面モデルを得、再定義曲面モデルを構成する複数の要素が同一平面上にあるかどうかを判定する制御手段103と、複数の要素が同一平面上にある場合、平面に合わせてラスタデータを生成する第2生成手段109と、複数の要素が同一平面上にない場合、曲面に合わせてラスタデータを生成する第3生成手段107と、を具備する。
【解決手段】ベクタデータを記憶する第1記憶手段104と、ベクタデータがレンダリングされる曲面モデルおよびベクタデータ定義位置を記憶する第2記憶手段101と、ベクタ定義空間上に少なくとも1つのプリミティブデータを生成する第1生成手段105と、ベクタ定義空間での曲面モデルを構成する要素とベクタデータとの関係を判定してモデル制御情報を得る判定手段102と、モデル制御情報を参照してベクタデータを再定義して再定義曲面モデルを得、再定義曲面モデルを構成する複数の要素が同一平面上にあるかどうかを判定する制御手段103と、複数の要素が同一平面上にある場合、平面に合わせてラスタデータを生成する第2生成手段109と、複数の要素が同一平面上にない場合、曲面に合わせてラスタデータを生成する第3生成手段107と、を具備する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、本発明はベクタ図形を描画する描画装置および方法に関する。
【背景技術】
【0002】
点や直線、曲線、四角形、楕円などの幾何学的な図形要素を組み合わせることによって構成される画像のことをベクタグラフィックスと呼ぶ。これに対し、点(ピクセルあるいはドット)の配列によって構成される画像のことをラスタグラフィックスと呼ぶ。
【0003】
一般に、ディスプレイに表示される画像やプリンタで印刷される画像はラスタグラフィックスである。これらの機器でベクタグラフィックスを扱う際には、これをラスタグラフィクスへ変換する処理(ラスタライズ)が必要になる。ラスタライズの処理コストは高く、複雑なベクタグラフィックスを高速にラスタライズするためには高性能な計算機が必要とされる。その反面、ベクタグラフィックスは表示の都度、適切な解像度のラスタグラフィックスを生成することができるため、画像の拡大や縮小、変形によって輪郭線などの画質が損なわれることがない。そのため、イラストや図面などの輪郭線が明瞭な人工的な画像はベクタグラフィックスとして扱われることが多い。一方、写真などの自然画像はラスタグラフィックスとして扱われることが多い。
【0004】
ベクタグラフィックスの最も身近な利用例はフォントである。初期の計算機ではCPU性能の制約からラスタ形式のフォント(ビットマップフォント)が使われているが、解像度ごとにフォントデータを保持しなければならなかったため多くの記憶容量を必要としている。その後のCPU性能の向上に伴い、現在の計算機では、解像度に依存しないベクタ形式のフォント(アウトラインフォント)データを保持しておき、ディスプレイやプリンタに見合った適切な解像度のフォントをその都度生成することにより、少ない記憶容量で常に高品質なフォントを表示できる。しかし現在でも、携帯電話やカーナビゲーションシステムなどに内蔵されるCPUは処理能力が比較的低く、ベクタグラフィックスのラスタライズに要する演算コストを低減することが課題になっている。
【0005】
近年、この課題を解決するためにGPU(グラフィックスプロセッサユニット)が活用されている。GPUを利用し、直線と曲線で構成される図形をラスタライズするための手法が既に提案されている(例えば、特許文献1参照)。
【0006】
また、図形の幾何形状が動的に変化しても高速にラスタライズが可能な手法も公知である(例えば、特許文献2参照)。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2006−106705号公報
【特許文献2】特開2007−241878号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、ベクタ図形を曲面上に描画する場合には、処理の負担が増大し高速に描画処理を行うことができない問題がある。
本発明は、ベクタ図形を曲面上に描画する場合であっても、再分割処理等による処理負担の増加を低減し高速に描画処理を行うことのできる描画装置および方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
上述の課題を解決するため、本発明に係る描画装置は、ベクタ形式の図形に対応するベクタデータを記憶している第1記憶手段と、前記図形を描画するガイドとしての曲面モデルと、該曲面モデルに対応する、前記ベクタデータがレンダリングされることが可能な領域を示すベクタデータ定義位置とを記憶する第2記憶手段と、前記ベクタデータを輪郭線解析することにより直線輪郭および曲線輪郭のいずれか1以上に対応するデータを含むプリミティブデータを、前記曲面モデルが定義される空間は独立して前記図形を定義するとともに出力するラスタデータのピクセルの属性値を決定するために参照されるベクタ定義空間に生成する第1生成手段と、前記ベクタデータ定義位置と、前記曲面モデルとを参照して、曲面モデルに含まれる要素ごとに同一平面上にあるかどうかを判定し、曲面とみなせる曲面モデルである第1モデルまたは平面とみなせる曲面モデルである第2モデルのどちらか一方の判定結果を得る第1判定手段と、前記第1判定手段により前記第1モデルであると判定された場合、該第1モデルと前記プリミティブデータとを参照して、出力するラスタデータのピクセルの属性値を生成する第2生成手段と、前記第1判定手段により前記第2モデルであると判定された場合、該第2モデルと前記プリミティブデータとを参照して、前記ラスタデータのピクセルの属性値を生成する第3生成手段と、を具備することを特徴とする。
【発明の効果】
【0010】
本発明の描画装置および方法によれば、再分割処理等による処理負担の増加を低減し高速に描画処理を行うことができる。
【図面の簡単な説明】
【0011】
【図1】本実施形態に係る描画装置を示すブロック図。
【図2】ベクタ図形の一例を示す図。
【図3】ベクタデータ図形の一例を示す図。
【図4】三角形のうち、凸領域が図形を表す場合((a))と、凹領域が図形を表す場合((b))を示す図。
【図5】直線輪郭((a))と曲線輪郭から定義される三角形の集合((b))の一例を示す図。
【図6】描画制御用プリミティブの1つがある曲面モデル要素と交差している状態((a))、またはある曲面モデル要素がある描画制御用プリミティブに含まれている状態((b))を示す図。
【図7】図1の曲面ベクトルレンダリング部および図1の平面ベクトルレンダリング部を示すブロック図。
【図8】図1のモデル制御情報算出部の動作の一例を示すフローチャート。
【図9A】図1の入力モデル制御部の処理前の文字のイメージを示す図。
【図9B】図1の入力モデル制御部の処理後の文字のイメージの一例を示す図。
【図9C】図1の入力モデル制御部の処理後の文字のイメージの別例を示す図。
【図10】比較例におけるラスタライズの処理手順を示すフローチャート。
【図11】細分割された曲線輪郭から定義される三角形の集合((b))と、それに伴い更新された直線輪郭((a))の一例を示す図。
【図12】三角形分割された直線輪郭の一例を示す図。
【図13】比較例におけるラスタライズされた直線輪郭((a))および曲線輪郭から定義される三角形の集合((b))の一例を示す図。
【図14】比較例における生成されたラスタデータの一例を示す図。
【図15】直線輪郭の一例を示す図。
【図16】比較例における直線輪郭から生成された三角形データの一例を示す図。
【図17】比較例における直線輪郭から生成された三角形の点番号の一例を示す図。
【発明を実施するための形態】
【0012】
以下、図面を参照しながら本発明の実施形態に係る描画装置および方法について詳細に説明する。
本実施形態に係る描画装置の構成について図1を参照して詳細に説明する。
本実施形態に係る描画装置100は、モデル記憶部101、モデル制御情報算出部102、入力モデル制御部103、ベクタデータ記憶部104、描画制御用プリミティブ生成部105、描画制御用プリミティブ記憶部106、曲面ベクトルレンダリング部107、平面ベクトルレンダリング部109、および提示部108を含む。
ベクタデータ記憶部104は、任意の図形を表すベクタ形式の図形データであるベクタデータを記憶している。描画制御用プリミティブ生成部105は、所望のベクタ図形に対応するベクタデータを読み込み、ベクタデータを描画するために利用する描画制御用プリミティブデータをベクタ定義空間に生成し、描画制御用プリミティブデータを描画制御用プリミティブ記憶部106に記憶する。
【0013】
モデル記憶部101は、曲面モデル(複数の曲面モデル要素)とベクタデータ定義位置とを対応付けて記憶している。モデル制御情報算出部102は、モデル記憶部101から所望の曲面モデルを抽出し、描画制御用プリミティブ記憶部106から所望の描画制御用プリミティブデータを抽出し、曲面モデル要素ごとに曲面ベクトルレンダリング部107および平面ベクトルレンダリング部109のどちらか一方へ描画制御用プリミティブデータを出力するかどうかの判定結果を示すモデル制御情報を算出する。入力モデル制御部103は、モデル制御情報と、モデル制御情報算出部102が受け取ったものと同じ曲面モデルおよびベクタデータ定義位置とを受け取り、曲面ベクトルレンダリング部107および平面ベクトルレンダリング部109のどちらか一方に出力してレンダリングする曲面モデルを再定義曲面モデルと再定義し、さらに、再定義曲面モデルが同一平面上に定義されているかどうかを判定する。ここで、要素とは曲面モデルを構成する多角形を指し、例えば三角形や長方形を用いる事ができる。
【0014】
曲面ベクトルレンダリング部107は、再定義曲面モデル要素が同一平面上に定義されていないと判定された場合に、描画制御用プリミティブデータおよび再定義曲面モデルを受け取り、最終的な出力とするラスタデータを生成する。平面ベクトルレンダリング部109は、再定義曲面モデル要素が同一平面上に定義されていると判定された場合に、描画制御用プリミティブデータおよび再定義曲面モデルを受け取り、最終的な出力とするラスタデータを生成する。提示部108は、受け取ったラスタデータをスクリーンに表示する。
【0015】
[ベクタデータ記憶部104]
ベクタデータ記憶部104は、1種類以上のベクタ図形に対応する1以上のベクタデータを記憶している。ベクタデータは、ラスタライズされる任意のベクタ形式の図形(ベクタ図形と呼ぶ。ベクタ図形の一例を図2に示す)を表すベクタ形式の図形データであり、ラスタライズされる領域を含む任意の図形を示す、始点、制御点、および終点の座標と、ベクタ図形の種類(例えばフォント、絵)と、ベクタ図形を構成する各点(始点、制御点、および終点)の接続関係と、内部のラスタライズされる領域を示す情報とを含む。また、直線および曲線のどちら側を図形の内部とするかの情報を直線および曲線ごと定義していなくとも、直線および曲線のどちら側を内部領域とするかをあらかじめ決めておけばベクタデータの輪郭線解析と同時に内部領域を定義することができる。ベクタ図形の一例を図2に示し、図2のベクタ図形に対応するベクタデータに含まれる各点と各点との接続関係を図3に示す。
なお、ベクタデータは上記の形式に限定されるものではなく、色情報やアルファ値などのグラフィックスの分野において一般的に利用される他のデータを含んでもよい。
【0016】
[描画制御用プリミティブ生成部105]
描画制御用プリミティブ生成部105は、ベクタデータ記憶部104に記憶されているベクタデータを参照して、描画を行うベクタデータを抽出し、抽出したベクタデータから描画制御用プリミティブデータをベクタ定義空間に少なくとも1つ生成する。ベクタ定義空間は、曲面モデルが定義される空間とは独立した空間であって、独自の位置座標(またはテクスチャ座標)などでレンダリング対象のベクタデータが定義される空間のうちのある範囲で定義されるものである。ベクタ定義空間は、例えば各軸が0から1までの範囲で定義される2次元空間である。また、ベクタ定義空間は、後述するレンダリング部107、109が出力するラスタデータのピクセルの属性値を決定するために参照される空間である。ピクセルの属性値とは、ベクタ定義空間での位置座標、各ピクセルの色情報、および透明度などを示す通常複数の値である。ラスタデータは、最終的に提示部108に提示される画像の解像度と同じ解像度をもつ画像データである。曲面モデルについては後述のモデル記憶部101において詳細に説明する。
描画制御用プリミティブデータとは、ベクタデータを曲面モデルに描画するために利用するデータであり、例えば三角形、凸多角形を形成する点座標およびある点座標を結ぶ線を含むデータである。また、描画制御用プリミティブデータが表す描画制御用プリミティブは、ベクタデータの始点、制御点、および終点とを解析することによって生成される図形であり、例えば三角形群が挙げられるが、他にも凸多角形群を含む場合もある。なお、本実施形態では描画制御用プリミティブが三角形群と多角形群を含んでいる場合を例に説明を行う。図3では、図形の直線あるいはパラメトリック曲線の端点を黒丸で表し、パラメトリック曲線の制御点を白丸で表している。
描画制御用プリミティブ生成部105は、ベクタデータを輪郭線解析した結果、曲線輪郭(例えば図5(b))と直線輪郭(例えば図15)とに対応するデータを含む描画制御用プリミティブデータを生成する。描画制御用プリミティブデータは、ベクタ図形を再現する上でベクタデータと等価である。曲線輪郭から生成される描画制御用プリミティブは、曲線輪郭のパラメトリック曲線の始点と終点、および制御点の3点を結んで定義される多角形(ここでは三角形)の集合である。各三角形はパラメトリック曲線に外接しており、曲線は必ず三角形の内部に存在する。図3の例では、図3に含まれる始点と終点、および制御点の3点を結んで定義される三角形の集合である。また、曲線輪郭から定義される三角形は、図4(b)に示すように内部に定義されている曲線の凸領域を表すもの(凸曲線輪郭と称する)と、図4(a)に示すように凹領域を表すもの(凹曲線輪郭と称する)の2種類で構成される。なお、曲線輪郭から定義される三角形については、三角形の内側にあるピクセルのうち、曲線の凸領域に属するピクセルのみがラスタライズされる。
【0017】
直線輪郭は、制御点を無視してベクタデータに含まれる直線および曲線の始点と終点を線分で結ぶことによって得られる多角形と定義される。この直線輪郭は、例えば具体的には後述する図15に示す図形となる。さらにこの直線輪郭について三角化を行う。具体的には直線輪郭を構成する多角形の複数の頂点のうち、任意の1つの頂点(ピボットという)を選択する。そして、ピボットと他の全ての頂点を直線で結び、連結する2つの頂点が1つの三角形の辺となるように、ピボットを1つの頂点とする複数の三角形を生成する。これら複数の三角形を直線輪郭から生成される描画制御用プリミティブとする。ここで連結する2つの頂点とは、多角形の辺によって結ばれている2つの頂点のことを意味する。
このようにベクタデータから描画制御用プリミティブデータを生成するより詳しい方法は例えば上記特開2007−241878号公報で示されているため、ここでの詳細な説明は省略する。
【0018】
しかしながら、描画制御用プリミティブデータの生成方法はこれに限定されるものではなく、例えば、曲線輪郭から定義される三角形は、上述したように凹曲線輪郭と、凸曲線輪郭の2種類で構成される。直線輪郭は、例えばこの2種類の曲線輪郭に応じて定義されてもよい。この場合、直線輪郭は、凸曲線輪郭では制御点を無視して始点と終点との2点を結び、凹曲線輪郭では始点と制御点と終点との3点をこの順番に結び、これらの線分を連結して得られる多角形の輪郭の集合である。このように結んだ直線輪郭の例としては、図5(a)が挙げられる。図5(a)から分かるように、直線輪郭を構成する多角形は1つとは限らない(この例では3つの多角形で構成される)。また、各多角形は自己交差や穴を含むことがある。
この場合、図形(例えば三角形)の内部のラスタライズされる領域を示す情報は、例えば2種類の上述した曲線輪郭で決定される。この2種類の曲線輪郭によって、始点、制御点、および終点で決まる曲線で区切られる、三角形内部の領域のうち、どちらの領域がラスタライズされる領域であるかを示すことができる。
【0019】
描画制御用プリミティブデータは、上述したように、ベクタ定義空間に定義される。この場合、描画制御用プリミティブデータがベクタ定義空間が定義される範囲に全て含まれ、かつ三角形群を覆う最小の矩形が最も大きくなるように三角形の正規化を行う。具体的には、矩形が描画制御用プリミティブを全て覆う最小の長方形であり、各辺がベクタ定義空間のいずれかの軸と平行で、なおかつ2辺が垂直に交差している長方形であって、その長方形の2辺のうち長い方の辺がベクタ定義空間に収まる最も長い長さになるように拡大するさいの倍率を決定したうえで、その長方形の縦横比を維持したまま拡大し、正規化することができる。この手法とは異なり、例えば、描画制御用プリミティブ生成部105で生成された描画制御用プリミティブデータがベクタ定義空間に全て含まれ、かつ矩形の各辺がベクタ定義空間のいずれかの軸と平行な最小の長方形を考え、その長方形の縦横比を維持したまま、その長方形をベクタ定義空間に含まれる範囲で拡大した際の倍率で正規化することもできる。しかしながらこの方法に限定するものではなく、グラフィックスの分野で一般的な他の正規化方法を用いてもよい。
【0020】
[描画制御用プリミティブ記憶部106]
描画制御用プリミティブ記憶部106は、描画制御用プリミティブ生成部105から描画制御用プリミティブデータを受け取って記憶する。
【0021】
[モデル記憶部101]
モデル記憶部101は、各頂点にパラメータを含む複数の曲面モデル要素を含む曲面モデルと、この曲面モデルに対応するベクタデータ定義位置とを記憶している。曲面モデル要素は、辺の数が3以上で構成される多角形で示され、例えば三角形である。複数の曲面モデル要素の集合によって曲面モデルを表現する。ベクタデータ定義位置は、プリミティブデータに基づいてベクタ図形を再現するために曲面モデルのどの位置にベクタデータをレンダリングするかを示す。すなわち、ベクタデータ定義位置は、ベクタ定義空間で定義された領域が曲面モデルのどの領域にレンダリングされるかを示す。ここでの曲面モデルは、ベクタ図形を描画するガイドとして使用される。また、モデル記憶部101には、曲面モデル要素により構成される曲面モデルが複数記憶されていてもよい。
【0022】
この曲面モデル要素の各頂点には、ベクタ定義空間での対応位置を示すパラメータが定義されているものとする。このパラメータは例えば、テクスチャ座標の利用が考えられる。このパラメータにより、曲面が表される空間における曲面モデル要素の位置座標と、ベクタ定義空間におけるベクタデータ定義位置とが対応しているため、ベクタ定義空間における曲面モデル要素(ここでは三角形)を定義することができ、ベクタ定義空間にあるレンダリング対象のベクタデータと曲面モデル要素とのベクタ定義空間での位置関係を容易に判定することができる。さらに、曲面モデル要素が三角形の場合には、三角形を生成する3頂点によってある曲面モデル要素の法線ベクトルを決定することができる。
【0023】
なお、保存されるデータはこれらのみに限定されない。レンダリングの際の視点の位置や視線方向を表すカメラパラメータや並行投影または投視投影のどちらで投影するかなど、グラフィックスの分野でレンダリングの際に一般的に用いられる他の情報がモデル記憶部101に記憶されていてもよい。この場合、曲面モデルが表される空間における曲面モデル要素ごとの、透明度、色を含む情報も上述したパラメータに含まれる。
本実施形態では、曲面モデル要素が三角形で構成されている場合を例に説明する。これを一般的な多角形に適用する場合には、例えば、多角形を三角形の集合に分割する方法がある。分割方法については、例えば“M.ドバーグ、M.ファン.クリベルド、M.オーバマーズ、O.シュワルツコップ 共著、浅野哲夫 訳:コンピュータ・ジオメトリ 計算機科学:アルゴリズムと応用、近代科学社”に記載の方法を用いることが可能である。
【0024】
[モデル制御情報算出部102]
モデル制御情報算出部102は、モデル記憶部101から所望の曲面モデルおよびベクタデータ定義位置を抽出し、描画制御用プリミティブ記憶部106から所望の描画制御用プリミティブデータを抽出し、曲面モデル要素ごとに最終的な入力曲面モデル要素とするかどうかを判定して、曲面モデル要素ごとにベクタ図形との関係を示す判定結果であるモデル制御情報を算出する。
ここで、モデル制御情報の判定方法について図6を用いて詳細に説明する。
モデル記憶部101に記憶されている曲面モデル要素(ここでは、三角形である多角形2の内部領域601)と、描画制御用プリミティブ記憶部106に記憶されている描画制御用プリミティブデータが表す描画制御用プリミティブに含まれる任意の図形(ここでは、三角形である多角形1の内部領域602)とについて、ベクタデータ定義位置にある曲面モデル要素ごとに以下の判定を行う。
(a)互いの三角形が交差している状態であるかどうか
(b)一方の三角形がもう一方の三角形の内部領域に完全に含まれる状態であるかどうか(例えば、図6では多角形2の内部領域603が多角形1の内部領域604に完全に含まれている)
上記2点をそれぞれの三角形について個別に判定する。この判定手法は、例えば“中前栄八郎、西田友是:3次元コンピュータグラフィックス、pp63−72、昭晃堂”に記載の手法を用いることができるため、ここでの詳細な説明は省略する。また、このときの判定はベクタ定義空間でおこなわれる。判定を行うには、曲面モデルを構成する三角形がベクタ定義空間でどの様に定義されるかを調べる。曲面モデル要素ごとの頂点はベクタ定義空間での対応位置を示すパラメータを保持しているため、ベクタ定義空間での曲面モデル要素をそれぞれ定義することができる。なお、このときのベクタ定義空間は2次元の空間である。
以上の判定の結果、互いの三角形が交差したか、または一方の三角形がもう一方の三角形の内部領域に完全に含まれる場合には最終的な判定結果を「真」として、それ以外の場合は「偽」として、ベクタデータ定義位置にある曲面モデル要素ごとにこの「真」「偽」の判定結果がモデル制御情報として入力モデル制御部103に出力される。つまり、モデル制御情報が「真」の曲面モデル要素は、ベクタデータが描かれる領域を含む曲面モデル要素であるといえるため、これを最終的な入力曲面モデル要素とする。このモデル制御情報は、例えば曲面モデル要素ごとの「真」「偽」の判定を、フラグを用いて示して、曲面モデル要素ごとのフラグを入力モデル制御部103に出力してもよい。
なお、判定は必ずしも以上に挙げた手順である必要はなく、曲面モデル要素(多角形2の内部領域601、603)が描画制御用プリミティブに含まれる任意の図形(多角形1の内部領域602、604)と交差するか、または曲面モデル要素と描画制御用プリミティブに含まれる任意の図形のどちらか一方が、もう一方の内部領域に完全に含まれる状態になっているかの判定ができればよい。すなわち、モデル制御情報算出部102は、ベクタ定義空間での曲面モデル要素の占める領域と描画制御用プリミティブが占める領域とが重なっているかどうかの判定ができればよい。また、用途によっては簡易な判定で置き換えてもよい。例えば、曲面モデル要素ごとの頂点が描画制御用プリミティブに含まれる任意の図形の内部領域に含まれるかどうかを調べる。これにより曲面モデル要素と描画制御用プリミティブとの位置関係の判定を、通常の判定に比べて高速に判定することが可能になる。
なお、モデル制御情報算出部102で判定に用いた、モデル記憶部101に格納されている曲面モデルについては書き換えをおこなわない。
また、モデル制御情報算出部102は、モデル記憶部101から所望の曲面モデルおよびベクタデータ定義位置を受け取るときに、受け取った曲面モデルおよびベクタデータ定義位置と同じデータを入力モデル制御部103へ送るように、モデル記憶部101へ指示する。
【0025】
[入力モデル制御部103]
入力モデル制御部103は、モデル制御情報算出部102から曲面モデル要素ごとの判定結果を示すモデル制御情報を受け取り、モデル記憶部101から、モデル制御情報算出部102が受け取ったものと同じ曲面モデルおよびベクタデータ定義位置を受け取り、モデル制御情報に含まれる判定結果が「真」である曲面モデル要素を含む新たな曲面モデルを再定義するとともに、再定義された曲面モデル(以下、再定義曲面モデルという)を構成する要素である曲面モデル要素(以下、再定義曲面モデル要素)ごとに、再定義曲面モデルに含まれる全ての再定義曲面モデル要素が同一平面上に定義されているかどうかを判定する。再定義曲面モデル要素は、モデル記憶部101から受け取った曲面モデルのうち、モデル制御情報に含まれる判定結果が「真」である曲面モデル要素を抽出して曲面を構成したものであるので、再定義曲面モデル要素を次のレンダリング処理への入力とする。よって、モデル制御情報算出部102で算出されたモデル制御情報に含まれる判定結果が「偽」の曲面モデル要素については以降の処理がおこなわれなくなる。すなわち、入力モデル制御部103は、判定結果が「真」である曲面モデル要素を再定義曲面モデル要素とする。
【0026】
また、入力モデル制御部103は、再定義曲面モデルに対しては、再定義曲面モデルが平面であるか、つまり再定義曲面モデルに含まれる全ての再定義曲面モデル要素が同一平面上にあるかどうかの判定を行う。平面部分の判定は、例えば、曲面モデルが定義される空間における再定義曲面モデルに含まれる再定義曲面モデル要素の法線ベクトルの方向が全て、ほぼ同一であるかどうかを調べることで判定可能である。法線ベクトルの方向が全てほぼ同一であるかどうかは以下の手順で判定することができる。なお、以下で扱う法線ベクトルは、全て単位ベクトルとなるように長さが調整されているものとする。
1)再定義曲面モデルから任意の再定義曲面モデル要素を1つ選び出し、その法線ベクトルを基準となる法線ベクトルVbとして定義する。
2)上記「1)」で選択した再定義曲面モデル要素以外の再定義曲面モデル要素の法線ベクトルとVbとの内積を求め、その値が1.0に近い値をとるかを判定する。近い値かどうかの判定は、例えば、求めた内積と1.0との値の差が、あらかじめユーザによって定義された閾値以内の値であるかどうかを判定する。
3)上記「2)」の判定を全ての再定義曲面モデル要素に対してそれぞれ行い、求めた全ての内積が閾値以内の場合には、再定義曲面モデルが平面を構成するとして、再定義曲面モデルを平面ベクトルレンダリング部109に出力する。それ以外の場合、すなわち求めた内積と1.0との値の差が閾値を超える再定義曲面モデル要素が存在した場合は、再定義曲面モデルが平面を構成しないとして、再定義曲面モデルを曲面ベクトルレンダリング部107に出力する。なお、法線ベクトルは、モデル記憶部101に記憶されている曲面モデルごとに予め計算してモデル記憶部101に記憶し、入力モデル制御部103においてその法線ベクトルの値を参照して曲面モデルが平面であるかどうかの判定をおこなってもよいし、入力モデル制御部103が曲面モデル要素の各頂点の位置座標からこの曲面モデル要素の法線ベクトルを計算してもよい。
【0027】
[曲面ベクトルレンダリング部107]
曲面ベクトルレンダリング部107は、描画制御用プリミティブ記憶部106から描画制御用プリミティブデータを受け取り、入力モデル制御部103から、平面を構成しないと判定された再定義曲面モデルを受け取り、再定義曲面モデルと描画制御用プリミティブデータとから最終的な出力とするラスタデータを生成して提示部108へ送る。曲面ベクトルレンダリング部107が描画制御用プリミティブ記憶部106から受け取る描画制御用プリミティブデータについては、例えばモデル制御情報算出部102が描画制御用プリミティブ記憶部106から描画制御用プリミティブデータを抽出する際に、描画制御用プリミティブ記憶部106が同じ描画制御用プリミティブデータを曲面ベクトルレンダリング部107および平面ベクトルレンダリング部109へ渡す。他の例として、モデル制御情報算出部102が直接、描画制御用プリミティブ記憶部106から抽出した描画制御用プリミティブデータを曲面ベクトルレンダリング部107および平面ベクトルレンダリング部109に渡してもよい。さらに他の例として、入力モデル制御部103が、再定義曲面モデルが同一平面上にないと判定した場合には、この判定結果をモデル制御情報算出部102に返し、モデル制御情報算出部102が描画制御用プリミティブデータを曲面ベクトルレンダリング部107に渡し、再定義曲面モデルが同一平面上にあると判定した場合には、この判定結果をモデル制御情報算出部102に返し、モデル制御情報算出部102が描画制御用プリミティブデータを平面ベクトルレンダリング部109に渡してもよい。
【0028】
次に、曲面ベクトルレンダリング部107に含まれる各ブロックの動作について詳細に説明する。
曲面ベクトルレンダリング部107は、図7の左側の図に示すように描画用パラメータ算出部701、描画属性制御情報算出部202、ラスタデータ生成部703、およびラスタデータ記憶部704を含む。
【0029】
[描画用パラメータ算出部701]
描画用パラメータ算出部701は、入力モデル制御部103から、平面を構成しないと判定された再定義曲面モデルを受け取り、後述する手法で描画用パラメータを算出する。描画用パラメータとは、曲面モデル(ここでは、再定義曲面モデル)をスクリーンに投影した際にそれぞれの曲面モデル要素(ここでは、再定義曲面モデル要素)が占めるピクセルごとに、ベクタ定義空間における位置座標、色情報および透明度を含む情報を示すパラメータである。
描画用パラメータ算出部701は、再定義曲面モデルに加え、さらに必要であればカメラパラメータや投影方法を読み込む。この場合、描画用パラメータ算出部701は、後述のラスタデータ生成部703で生成されるラスタデータの各ピクセルが、ベクタ定義空間のどの位置に対応するかを表すパラメータ、およびどのような色が定義されていればよいかを算出する。これにより、各ピクセルのベクタ定義空間での位置座標(以下、対応位置という)、各ピクセルの色情報、および透明度などのピクセルの属性情報(以下、ピクセル属性情報という)が決定され、これを描画用パラメータとする。すなわち、描画用パラメータ算出部701はピクセルごとに描画用パラメータを算出する。
【0030】
なお本実施形態では、ベクタ定義空間における独自の位置座標として例えばテクスチャ座標を用いる。テクスチャ座標を利用する場合、描画用パラメータ算出部701は、グラフィックスの分野で一般的に用いられるテクスチャマッピングの手法を用いて曲面モデルとベクタ定義空間との対応を計算し、ベクタ定義空間での位置を算出できる。
各ピクセルの対応位置(例えばテクスチャ座標)、各ピクセルの色情報、および透明度をどのようにして算出するかについては、曲面モデルをレンダリングする際のレンダリング方法と同様の方法で行うことができる。例えば、曲面モデルを微細な三角形面の集合で近似し、各ピクセル属性情報がどの三角形面で決定されるかを計算することで求めることが可能である。この計算方法は三角形面をレンダリングする際のピクセル属性情報の決定方法と同じであり、グラフィックスの分野では一般的な方法であるため説明は省略する。また、曲面モデルからのピクセル属性情報の決定方法はこれに限るものではない。例えば、各ピクセルから、レンダリングする際の視線の方向に半直線を延ばし、曲面モデルと半直線の交点部分の対応位置(例えばテクスチャ座標)、色情報、透明度などをピクセル属性情報とする。また、この方法に限定するものでもなく、ピクセルごとにピクセル属性情報が算出可能な他の方法を用いてもよい。
またベクタ定義空間に対応する描画用パラメータは、上記の形式に限定されるものではなく、グラフィックスの分野において一般的に利用される他のデータを用いるか、あるいは含んでもよい。また、例えば、あらかじめ決定される式にパラメータとして代入されるような、独自に定義した値であってもよい。また、曲率など曲面モデルから算出されるパラメータを利用してこのパラメータを変更したものを含んでもよい。
【0031】
[描画判定情報算出部702]
描画判定情報算出部702は、描画制御用プリミティブ記憶部106から描画制御用プリミティブデータを受け取り、描画用パラメータ算出部701から描画用パラメータを受け取り、描画判定情報を算出する。描画判定情報とは、ベクタデータが形成する閉領域に各ピクセルの対応位置が含まれるかどうかを判定するための情報であり、ここでは後述する描画判定変数である。この対応位置の判定方法としては、例えば、以下の方法が挙げられる。
【0032】
1)描画制御用プリミティブデータに含まれる任意の図形データ(ここでは三角形とする)を1つ読み込む。
2)この図形データ、またはこの図形データの一部分が、描画用パラメータ算出部701で算出された各ピクセルの対応位置を含むかどうかを調べる。
3)対応位置がこの図形データの内部領域に含まれれば描画判定変数を1とする。
ここで、描画判定変数とは、出力用のラスタデータにピクセルを書き込むかどうかを判定する変数である。また、読み込んだ描画制御用プリミティブが、直線輪郭から生成された三角形の場合と曲線輪郭から生成された三角形の場合とで判定の処理が異なる。
直線輪郭から生成された三角形の場合は、各ピクセルの対応位置が三角形の内部に含まれていれば描画判定変数に1を加算する。
一方、曲線輪郭から生成された三角形の場合、描画制御用プリミティブ生成部105での生成ルールによって処理が異なる。第1の条件は、各ピクセルの対応位置が三角形の内部に含まれていれば「真」というものであり、生成ルールによらず共通の条件である。第2の条件は描画制御用プリミティブデータの生成ルールによって異なる。直線輪郭が、制御点を無視してベクタデータに含まれる直線および曲線の始点と終点を線分で結ぶことにより生成される場合、曲線の凸領域内に各ピクセルの対応位置が含まれていれば「真」となる。また、2種類の曲線輪郭により、直線輪郭の生成の際に制御点を含むかどうか切り替える場合、すなわち凸曲線輪郭では制御点を無視して始点と終点との2点を結び、凹曲線輪郭では始点と制御点と終点との3点をこの順番に結び、これらの線分を連結して直線輪郭を生成する場合、凸曲線(曲線の凸領域が図形を表す曲線)の凸領域、あるいは凹曲線(曲線の凹領域が図形を表す曲線)の凹領域の、どちらかに含まれていれば三角形の一部に含まれるものとして「真」となる。これらの2つの条件が「真」である場合に、描画判定変数に1を加算する。なお、ここでは1を加算しているが、奇数であれば1でなくてもよい。
【0033】
上記1)から3)を、全ての描画制御用プリミティブデータに含まれる全ての図形データ(ここでは三角形)について判定されるまで繰り返すことにより、各ピクセルの対応位置が、描画制御用プリミティブまたは描画制御用プリミティブの一部に含まれると判定された回数が得られる。本実施形態ではこの描画判定変数を描画判定情報とする。
例えば、描画制御用プリミティブが3つの直線輪郭から生成された三角形で構成されており、各ピクセルの対応位置がそのうちの2つの三角形の内部に相当する場合、描画判定変数は2となる。また、ベクタデータが色情報やアルファ値などの情報を保持しており、必要であれば、併せて各ピクセルの対応位置での色情報やアルファ値を算出してもよい。
【0034】
[ラスタデータ生成部703]
ラスタデータ生成部703は、描画判定情報算出部702から描画判定情報(描画判定変数)および描画用パラメータを受け取り、ピクセル属性情報を用いて画面表示用のラスタデータに書き込みを行うかどうか、すなわち描画するかどうかをピクセルごとに決定して、ラスタデータを生成する。ラスタデータ生成部703は、ピクセルの描画判定変数が奇数である場合に、対応位置に対応するピクセルの属性値を描画用パラメータに基づいて生成し、ラスタデータにピクセルを書き込む。このとき、ベクタデータから算出された色情報やアルファ値があれば、すでに算出されているピクセル属性情報の色情報やアルファ値などの該当する部分をベクタデータから算出された値で置き換える、またはすでに算出されているピクセル属性情報の色情報やアルファ値とブレンドするなどの処理を行ってもよい。描画判定変数が奇数であるとは、直線輪郭から生成された描画制御用プリミティブデータ、および曲線輪郭から生成された描画制御用プリミティブデータに定義されている曲線の図形内部側の領域を全てラスタライズした場合に、そのピクセルが奇数回書き込まれるということと等しくなる。これを上記特開2007−241878号公報で示されているステンシルデータの生成に置き換えて考えると、ステンシルデータのビット反転が奇数回おこなわれ、0以外の値となり、図形内部と判定されることと等しくなる。これは、上記特開2007−241878号公報のステンシルデータと同様の結果を得ることができる。
【0035】
[ラスタデータ記憶部704]
ラスタデータ記憶部704は、ラスタデータ生成部703からラスタデータを受け取って記憶し、提示部108へ送る。ただし、ラスタデータの構成はこの形式に限定されるものではなく、グラフィックスの分野において一般的に利用される他のデータを含んでもよい。
【0036】
[平面ベクトルレンダリング部109]
平面ベクトルレンダリング部109は、描画制御用プリミティブ記憶部106から描画制御用プリミティブデータを参照して抽出し、入力モデル制御部103から、平面を構成すると判定された再定義曲面モデルを受け取り、再定義曲面モデルと描画制御用プリミティブデータとから最終的な出力とするラスタデータを生成して提示部108へ送る。
次に、平面ベクトルレンダリング部109に含まれる各ブロックの動作について詳細に説明する。
平面ベクトルレンダリング部109は、図7の右側の図に示すようにステンシルデータ生成部705、および平面レンダリング結果データ生成部706を含む。
【0037】
[ステンシルデータ生成部705]
ステンシルデータ生成部705は、描画制御用プリミティブ記憶部106から描画制御用プリミティブデータを受け取り、入力モデル制御部103から平面を構成すると判定された再定義曲面モデルを受け取り、描画制御用プリミティブデータの描画制御用プリミティブの内部のピクセルをラスタライズすることによってステンシルデータを生成する。生成されたステンシルデータを、平面レンダリング結果データ生成部706へ送る。
ステンシルデータとは、最終的に提示部108に提示する解像度と同じ解像度を持つ画像データである。ステンシルデータの各ピクセルには数ビット程度の数値が割り当てられており、毎フレーム全ての描画に先立って各ピクセルが0に初期化される。
ステンシルデータ生成部705は、描画制御用プリミティブ記憶部106に記憶されている直線輪郭から生成された描画制御用プリミティブデータおよび曲線輪郭から生成された描画制御用プリミティブデータを読み込みラスタライズする。
【0038】
具体的には、例えば、直線輪郭から生成された描画制御用プリミティブデータについては、各描画制御用プリミティブの内部領域にあるピクセルをラスタライズする。曲線輪郭から生成された描画制御用プリミティブについては、その三角形の内側にあるピクセルのうち、曲線の凸領域に属するピクセルをラスタライズする。このとき、ラスタライズされたピクセルに対応するステンシルデータのピクセル値を、各三角形についてビット反転する。この手法に関しては、例えば、特開2007−241878号公報の手法を適用することができる。
【0039】
また、例えばラスタライズ方法としては、非ゼロ規則に基づいたラスタライズを行うことが考えられる。このとき、ラスタライズされたピクセルのうち描画制御用プリミティブである三角形を構成する各点を、時計回りしたときの三角形に含まれるピクセルの値をインクリメント(+1)し、反時計回りしたときの三角形に含まれるピクセルの値をデクリメント(−1)する。直線輪郭から生成された描画制御用プリミティブについては、各描画制御用プリミティブの内部領域にある全てのピクセルがラスタライズされる。曲線輪郭から生成された描画制御用プリミティブについては、その三角形の内側にあるピクセルのうち、曲線の凸領域に属するピクセルのみがラスタライズされる。
【0040】
[平面レンダリング結果データ生成部706]
平面レンダリング結果データ生成部706は、ステンシルデータ生成部705からステンシルデータを受け取り、ステンシルデータを参照しながら出力とするラスタデータを生成し、提示部108へ送る。出力するラスタデータは、再定義曲面モデルをスクリーンに投影した際に再定義曲面モデルが占めるピクセルをラスタライズすることにより生成する。ただし、これらのピクセルのうち、ラスタライズされるのはそのピクセル値が0以外である場所に限られる。
このラスタデータは、最終的に提示部108に提示する解像度と同じ解像度を持つ画像データであり、ラスタデータの各ピクセルには複数の色成分(例えば、RGBA)ごとに数ビット程度の数値が割り当てられている。
【0041】
[提示部108]
提示部108は、曲面ベクトルレンダリング部107または平面ベクトルレンダリング部109からラスタデータを受け取り、必要に応じてスクリーンに表示を行う。
【0042】
なお、平面ベクトルレンダリング部109および曲面ベクトルレンダリング部107で出力される結果は、ビットマップやJPEG、GIFなどのグラフィックス分野で一般的に用いられる画像形式でラスタデータ記憶部704に保存されてもよいし、ネットワークを通じて出力結果、あるいは保存されたデータが転送されてもよい。
さらに図1では、モデル記憶部101とベクタデータ記憶部104および描画制御用プリミティブ記憶部106を異なるブロックとして表記しているが、これらは単一のメモリ上にまとめて構成してもよいし、異なる複数のメモリ上に分割して構成してもよい。
また本実施形態では、ベクタ定義空間は例えば各軸が0から1までの範囲で定義される2次元の空間であるとするが、ベクタ定義空間はこの形式に限定されるものではない。各軸が0から1以外の範囲で定義されてもよい。
また、モデル制御情報算出部102は、描画制御用プリミティブ記憶部106から受け取った描画制御用プリミティブデータと、モデル記憶部101から受け取った曲面モデルとに対して、ベクタデータ定義位置にある曲面モデル要素ごとに最終的な入力曲面モデル要素とするかどうかの判定をおこなわなくてもよい。この場合、モデル制御情報算出部102は、受け取った曲面モデル要素全てを再定義曲面モデル要素とするようにモデル制御情報を設定して、入力モデル制御部103に送る。このとき、入力モデル制御部103は、このモデル制御情報を参照して、モデル記憶部101から受け取った曲面モデル要素について再定義曲面モデル要素を定義する。すなわち、この場合はモデル記憶部101から受け取った曲面モデル要素全てが再定義曲面モデル要素として定義される。入力モデル制御部103は、この再定義曲面モデル要素に対して同一平面にあるかどうかを判定する。これにより、曲面モデル要素と描画制御用プリミティブとの交差、および内包の判定分の処理コストを減らすことができる。
【0043】
以上に示した実施形態によれば、ベクタデータをレンダリングする際に、曲面モデルが同一平面上に定義されているかをベクタデータ単位で判定して、コストの低い平面レンダリングが利用できる場合にはそちらを利用するように切り換えることで、レンダリング対象に曲面レンダリングを用いる必要があるオブジェクトと平面レンダリングでよいオブジェクトが混在している場合でも、オブジェクトの状況に応じて適したレンダリング方法を選択することが可能であり、ベクタデータをレンダリングする際の処理効率を向上させる。
【0044】
(第1の変形例)
本変形例では、モデル制御情報算出部102において三角形が交差、および一方の三角形がもう一方の三角形の内部領域に完全に含まれる状態になっているかを判定する際に、曲面モデル要素とベクタデータとで判定を行うことが上記実施形態とは異なる。上記実施形態では曲面モデル要素に対し描画制御用プリミティブを判定対象としているため、ベクタデータ単位でレンダリング方法を選択する場合にベクタデータの形状によっては余分な領域が判定対象となることがある。本変形例では、曲面モデル要素に対しベクタ図形の輪郭線を判定対象としているので、ベクタデータにあわせて三角形を選択することができる。以下に、上記実施形態とは異なる動作を行うブロックのみ説明する。
【0045】
描画制御用プリミティブ生成部105は、描画制御用プリミティブデータとともにベクタデータを描画制御用プリミティブ記憶部106へ送る。
描画制御用プリミティブ記憶部106は、描画制御用プリミティブ生成部105から受け取った描画制御用プリミティブデータおよびベクタデータを記憶する。
【0046】
モデル制御情報算出部102は、モデル記憶部101から所望の曲面モデルおよびベクタデータ定義位置を抽出し、描画制御用プリミティブ記憶部106から所望のベクタデータを抽出し、曲面モデル要素ごとに判定を行い、曲面モデル要素ごとの判定結果を示すモデル制御情報を入力モデル制御部103へ送る。なお、モデル制御情報算出部102は、ベクタデータ記憶部104からベクタデータを受け取ってもよい。
判定方法としては、ベクタデータに含まれる制御点、始点、および終点の接続関係を示すベクタデータ図形(例えば図3)の輪郭線を追跡した場合に出現する、制御点を含む全ての点で構成される多角形と曲面モデル要素とが交差しているかどうか、または、この多角形と曲面モデル要素とについて、一方がもう一方の内部領域に完全に含まれる状態になっているかどうかを判定する。なお、描画制御用プリミティブ記憶部106からこの多角形を得てもよい。例えば、曲線輪郭から定義される描画制御用プリミティブ(三角形)と直線輪郭で示される描画制御用プリミティブ(多角形)を上述した判定に用いる多角形として同様の判定を行ってもよい。上述した判定の具体的な判定方法については、例えば“中前栄八郎、西田友是:3次元コンピュータグラフィックス、pp63−72、昭晃堂”に記載されている方法を用いることができるため、ここでの詳細な説明は省略する。
しかしながら、判定方法はこれに限定されるものではなく、曲面モデルがベクタ定義空間に占める領域が、ベクタ図形(例えば図2の図形)が占める領域と重なるかどうかを調べることができればよい。互いに交差している場合と、ベクタデータ図形(例えば図3の図形)の輪郭線を追跡してできる多角形または曲面モデル要素のどちらか一方が、もう一方に含まれている場合とを区別する必要は無く、また描画制御用プリミティブデータが定義されているため、例えば図8に示すフローチャートのような方法でも判定が可能である。
【0047】
はじめにステップS801では、曲面モデルからまだ判定がおこなわれていない曲面モデル要素(一般には多角形。例えば三角形。)を選択する。次に、ステップS802では、曲面モデル要素の各頂点のベクタ定義空間での位置を描画判定情報算出部702の対応位置として、上記の描画判定情報算出部702の説明と同様の手順で描画判定変数を算出する。描画判定変数が奇数であれば曲面モデル要素の一部は必ずベクタデータ図形の内部領域にあるため、モデル制御情報は「真」となりステップS806に進む。描画判定変数が偶数の場合は、ステップS803に進む。
ステップS803では、ベクタデータ図形の各頂点、制御点のいずれかが曲面モデル要素の内部領域に1つでも含まれるかどうかを調べる。ベクタデータ図形の各頂点、制御点のいずれかが曲面モデル要素の内部領域に1つでも含まれていればモデル制御情報は「真」となりステップS806に進む。ベクタデータ図形の各頂点、制御点のいずれも曲面モデル要素の内部領域に含まれていない場合は、ステップS804に進む。ステップS804では、曲線輪郭から定義される三角形を構成する各稜線または直線輪郭を構成する各稜線と、曲面モデル要素を構成する稜線とが交差しているかどうかを調べる。交差していればモデル制御情報は「真」となりステップS806に進む。それ以外の場合はステップS805に進み、モデル制御情報は「偽」となる。
ステップS807では、曲面モデルに含まれる全ての曲面モデル要素について判定をおこなったかどうかを調べ、全ての曲面モデル要素について判定をおこなったのであれば終了し、まだ判定されていない曲面モデルが存在するのであれば、ステップS801に戻り、上述した処理を同様に行う。
【0048】
以上の処理により、入力モデル制御部103において本実施形態および第1の変形例を適用したイメージについて図9Aから図9Cを参照して説明する。
図9Aは「次」という文字に対しレンダリング処理を行う前の、制御処理をおこなっていない状態を示し、図9Bおよび図9Cはそれぞれ、実施形態適用後および第1の変形例適用後の制御処理をおこなった状態を示す。図9Aに示す制御処理前の状態よりも図9Bに示す実施形態適用後のほうがレンダリングを行うデータが削減されていることがわかる。さらに、図9Cに示す第1の変形例適用後はベクタ図形の輪郭線と曲線輪郭から生成された描画制御用プリミティブの稜線を判定対象としているため、「次」の文字を構成するベクタデータに合わせてレンダリングを行うことができ、大幅なデータ削減が可能である。
【0049】
また、より処理コストと削減される三角形とのバランスを考慮する場合は、S802、およびS804の処理を変更できる。S802では、曲面モデル要素の各頂点のベクタ定義空間での位置を描画判定情報算出部702の対応位置として、上記の描画判定情報算出部702の説明と同様の手順で描画判定変数を算出する。ただし、この時の判定には直線輪郭から生成された描画制御用プリミティブを用いる。描画判定変数が奇数であれば曲面モデルの一部は必ず直線輪郭で囲まれた多角形の内部にあるため、モデル制御情報は「真」となる。描画判定変数が偶数の場合、さらに、対応位置が曲線輪郭から生成された描画制御用プリミティブの内部に1つでも含まれるかを調べる。含まれている場合、モデル制御情報は「真」となる。モデル制御情報が「真」の場合にはステップS806に進む。モデル制御情報が「偽」の場合にはステップS803に進む。それ以外の場合は「偽」となる。S803は前記した処理と同様の処理を行う。S804では、描画制御用プリミティブの各稜線と曲面モデルを構成する稜線とが交差しているかどうかを調べる。交差していればモデル制御情報は「真」となりステップS806に進む。それ以外の場合はステップS805に進み、モデル制御情報は「偽」となる。
【0050】
以上に示した第1の変形例によれば、ベクタデータの輪郭線を判定対象としているため、ベクタデータにあわせて三角形を選択することができる。そのため、レンダリング方法の選択の精度や判定速度が向上する。
【0051】
(第2の変形例)
上記実施形態では、入力モデル制御部103において、モデル制御情報が「真」の曲面モデルに含まれる全ての曲面モデル要素が、同一平面上に定義されているかどうかによって、曲面ベクトルレンダリング部107と平面ベクトルレンダリング部109のどちらに曲面モデルを入力するかを決定している。よって、平面と見なせる部分と曲面と見なせる部分が混在している曲面モデルについては、同一平面上にない曲面モデルとして判定する必要がある。本変形例では、平面と見なせる部分と曲面と見なせる部分が混在する曲面モデルについても、平面と見なせる曲面モデルと曲面と見なせる曲面モデルとを分離してそれぞれ別のレンダリング方法を適用する。
【0052】
[入力モデル制御部103]
入力モデル制御部103は、モデル記憶部101から曲面モデルおよびベクタデータ定義位置を受け取り、モデル制御情報算出部102から曲面モデル要素ごとの判定結果を示すモデル制御情報を受け取り、曲面モデルを構成する曲面モデル要素が同一平面上にあるかどうかを判定し、平面とみなせる曲面モデルと、曲面とみなせる曲面モデルとに分類する。以下に、本変形例での曲面モデルの分類方法について説明する。
まず、曲面モデルから任意の曲面モデル要素(三角形)Tcを選択する。次に、この曲面モデル要素に隣接する曲面モデル要素がそれぞれTcと同一平面上に定義されているかを調べる。同一平面上に無い場合には、その曲面モデル要素については処理を終了とする。同一平面上にある場合には、その曲面モデル要素はTcのグループに属するものとし、さらにその曲面モデル要素と隣接する曲面モデル要素について、Tcと同一平面上に定義されているかを調べる。これを全ての曲面モデル要素についての処理が終了するまで再帰的に行う。処理が終了した後、曲面モデルの中にまだグループに属していない曲面モデル要素が有る場合、それらの曲面モデル要素の中から任意の曲面モデル要素を再度選択し、前記の手順を繰り返す。これを、曲面モデル要素全てが処理されるまで繰り返す。
【0053】
以上の処理をおこなった結果、モデル制御情報が「真」の曲面モデル要素は、0個以上の平面と見なせる曲面モデル要素のグループと、その他の曲面モデル要素、つまり曲面と見なされる曲面モデル要素とに分類される。このうち、平面と見なせるグループの曲面モデル要素を平面ベクトルレンダリング部109に送り、その他の曲面モデル要素を曲面ベクトルレンダリング部107に送る。
【0054】
以上に示した第2の変形例によれば、曲面モデルのうちベクタデータが含まれる曲面モデル要素が部分的に平面と見なせる場合に、平面部分と曲面部分とを分離して別のレンダリング方法を適用することで、ベクタデータのレンダリング効率を向上させる。
【0055】
(比較例)
以下、本発明の実施形態との比較例として、特開2006−106705号公報および特開2007−241878号公報に記載された技術について説明する。
ベクタグラフィックスのラスタライズに要する演算コストを低減するため、GPU(グラフィックスプロセッサユニット)が活用されていることについては既に述べた。GPUを利用して、図2に示すような、直線と曲線で構成されるベクタ図形をラスタライズするための上記特開2006−106705号公報の手法をまず説明する。
【0056】
このラスタライズ手法のフローチャートを図10に示す。この図から分かるように、上記特開2006−106705号公報の手法の処理は、CPUによる前処理とGPUによる主処理の大きく2段階の処理から成る。最初に、CPUによってベクタ形式の図形が三角形の集まりに分解され、その後、GPUによって各三角形がラスタライズされる。GPUの処理単位は三角形であり、図2のような直線と曲線で構成されるベクタ図形を直接扱うことができないため、このような2段階の処理に分かれている。
最初のステップS1001では、HDDやRAMなどの記憶媒体からベクタデータを読み込み、その輪郭線を解析する処理がおこなわれる。例えば、図2のベクタ図形を表すベクタ形式のデータは、図3に示すベクタデータ図形に示されるような点と直線を含む。この図3では、図形の直線あるいはパラメトリック曲線の端点を黒丸で表し、パラメトリック曲線の制御点を白丸で表している。ステップS1001では、このようなベクタデータ図形を解析して、図5に示すような2種類の輪郭線データを生成する。
本明細書では、上述したように、図5(a)の輪郭線データを「直線輪郭」と表記し、図5(b)の輪郭線データを「曲線輪郭から定義される三角形」と表記している。また、以下では描画制御用プリミティブデータを三角形データ、描画制御用プリミティブを三角形として説明する。
図10のフローチャートの説明に戻る。ステップS1002では、前のステップで生成された曲線輪郭から定義される三角形に重なりがあるか調べる処理がおこなわれる。その結果、重なりが見つかった場合はステップS1003に進み、重なっている2つの三角形のうちの面積の大きい方を細分割する処理がおこなわれる。
この処理の影響で直線輪郭にも変更が生じるため、次のステップS1004では、直線輪郭を更新する処理がおこなわれる。その後、ステップS1002に戻って再び重なりがあるか調べ、重なりがなければステップS1005に進む。曲線輪郭から定義される三角形に重なりが残っている限り、ステップS1002からS1004の処理が繰り返される。
【0057】
例えば図5(b)に示す曲線輪郭から定義される三角形の集合の場合、ステップS1002において三角形aとb、および三角形cとdが重なっていることが分かる。ステップS1003では、三角形aおよびcが、それぞれ、図11(b)に示すような2つの三角形a0とa1、およびc0とc1に細分割される。そしてステップS1004では、図11(a)に示すように直線輪郭を更新する処理がおこなわれる。
ステップS1005では、直線輪郭を構成する各多角形を三角形に分割する処理がおこなわれる。例えば図11(a)の3つの多角形は、図12に示すような三角形の集まりに分割される。
以上(ステップS1001からS1005)の処理は、全てCPUによる前処理として実行される。
ステップS1006では、直線輪郭を構成する三角形(図12)および曲線輪郭から定義される三角形(図13(b))が、GPUによってラスタライズされる。このとき、直線輪郭を構成する三角形については、図13(a)に示すように、その三角形の内側にある全てのピクセルがラスタライズされる。
これに対して曲線輪郭から定義される三角形については、図13(b)に示すように、その三角形の内側にあるピクセルのうち、凹曲線輪郭の凹領域、あるいは凸曲線輪郭の凸領域がラスタライズされる。
このようにして得られた直線輪郭と曲線輪郭から定義される三角形のラスタライズ結果は、GPU内部のフレームバッファに併せて記憶される。例えば、図13(a)と図13(b)は、図14に示すようなラスタデータとしてフレームバッファに記憶される。
【0058】
従来のGPUを利用したラスタライズ手法では、複数の三角形を用いて曲線を近似していたため、拡大したときに粗く見えてしまう問題があった。また、より滑らかにラスタライズするためには多数の三角形を用いて曲線の近似精度を上げるしかなく、記憶容量と処理コストの増大が避けられなかった。これに対して上記特開2006−106705号公報の手法では、三角形単位ではなく、曲線近傍のピクセル単位に処理するため、解像度に依存せず常に滑らかに曲線をラスタライズすることができる。その上、記憶容量と処理コストも解像度に依存せず、常に少なくて済む。
【0059】
しかし、上記特開2006−106705号公報のラスタライズ手法には以下の2つの問題がある。
1つ目の問題は前処理のコストが高いことである。特に、図10のステップS1002の曲線輪郭から定義される三角形の重複判定と、ステップS1005の直線輪郭の三角形分割のコストが高い。
前処理のコストは、図形の幾何形状が時間的に変化しない場合であれば大きな問題にはならない。一度前処理をしてしまえば、以降は再び前処理を行う必要はないからである。しかし、動的に図形の幾何形状が変化する場合は、その都度、前処理をやり直さなければならず、ラスタライズ処理全体のボトルネックになることが多い。
2つ目の問題は、アンチエイリアシングのためにアルファブレンドを用いていることである。ここでアンチエイリアシングとは、ラスタライズされた図形の輪郭線に現れるジャギー(階段状のギザギザ)を除去する処理のことである。また、アルファブレンドとはアルファ値と呼ばれる係数を用いて2つのピクセル値を半透明合成する処理のことである。
広く知られているように、アルファブレンドを用いるためには全ての図形をデプス値でソート(デプスソート)し、奥に位置する図形から順番にラスタライズしなければならない。デプスソートは非常にコストが高い処理であり、ラスタライズ処理全体のボトルネックになることが多い。
【0060】
上記特開2007−241878号公報ではこれら2つの問題を解決する方法を提案している。
上記特開2007−241878号公報では、ベクタデータに含まれる直線および曲線の始点と終点を単純に線分で結ぶことによって得られる多角形を直線輪郭としている。例えば、図3のベクタデータ図形から解析された直線輪郭は、図15に示すような3つの多角形P0、P1、P2になる。曲線輪郭から定義される三角形については、上記特開2006−106705号公報と同様のものを用いている。
得られた直線輪郭を構成する各多角形について、任意の1点(ピボット)が選択される。そして次に、ピボットと、ピボットを含まない全ての連結する2点を結ぶ三角形を生成する。ここで連結する2点とは、多角形の辺によって結ばれている2つの点のことを意味する。
例えば、図15の3つの多角形P0、P1、P2において、それぞれ点0、23、28がピボットとして選択された場合、図16に示すような三角形が生成される。三角形が重なっており、この図だけでは三角形の形状を把握することが難しいため、図17に3つの多角形P0、P1、P2から生成された三角形を構成する3つの点の番号を示す。
なお、図17はあくまで説明を分かりやすくするための補足であり、三角形データそのものを表しているのではないことに注意する。実際の三角形データは、各三角形を構成する3点の位置座標、およびテクスチャ座標、および接続関係などから構成される。
【0061】
次に、三角形内部のピクセルをラスタライズすることによってステンシルデータを生成する処理がおこなわれる。なお、ステンシルデータは、最終的に提示する解像度と同じ解像度をもつ画像データである。
まず、直線輪郭から生成される三角形データおよび曲線輪郭から生成される三角形データを読み込み、ラスタライズする。このとき、直線輪郭の三角形については、その三角形の内側にある全てのピクセルがラスタライズされ、これらのピクセル位置に対応するステンシルデータのピクセル値がビット反転される。
一方、曲線輪郭から定義される三角形については、その三角形の内側にあるピクセルのうち、曲線の凸領域に属するピクセルがラスタライズされ、これらのピクセル位置に対応するステンシルデータのピクセル値がビット反転される。
結果として、図形の内部は奇数回ピクセル値がビット反転され、図形の外部は偶数回ピクセル値がビット反転される。
【0062】
上記の処理によって塗りつぶすピクセルが判断できるため、描画用のラスタデータの対応するピクセルを塗りつぶすことで描画結果を生成することができる。
上記特開2007−241878号公報では、直線輪郭の三角形分割などをおこなわないため、ベクタデータの頂点を移動しても三角形データの接続関係が変化しなければ三角形データの対応する頂点座標を書き換えるだけでよく、再度三角形データを作り直す必要はない。そのため、図形の幾何形状が動的に変化しても高速にラスタライズが可能である。
また、描画用のラスタデータのサブピクセル精度の画像を用意し、カバレッジデータをもとにサブピクセルの一部に図形の色を割り当て、最終的な描画用のラスタデータを生成する際に合成することでアルファブレンドが不要なアンチエイリアシングを可能としている。
【0063】
しかし、上記特開2006−106705号公報および特開2007−241878号公報に記載された技術では、図形を曲面上にレンダリングしたい場合にそのまま適用することができない。
一般に、多角形データを曲面上にレンダリングする場合、多角形データを微細な多角形データ群に分割することで元の多角形データ内に頂点を追加し、その頂点を移動することによって実現する。上記特開2007−241878号公報の方法を利用してベクタデータを曲面上にレンダリングする場合にも、上記特開2007−241878号公報で示される方法で生成された三角形データを再分割する必要がある。
三角形データの再分割には様々な方法があるが、十分に曲面に沿っている、つまり曲面上にレンダリングされているといえる描画結果が得られるように再分割する方法の処理コストは高い。
ベクタデータを描画するための三角形データを再分割してしまうため、図形の幾何形状が変化する場合には、その都度、再分割処理をやり直す必要がある。このため、上記特開2006−106705号公報の問題点であり、上記特開2007−241878号公報の利点である、動的な図形の幾何形状の変化への対応も不可能となる。
【0064】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【0065】
100・・・描画装置、101・・・モデル記憶部、102・・・モデル制御情報算出部、103・・・入力モデル制御部、104・・・ベクタデータ記憶部、105・・・描画制御用プリミティブ生成部、106・・・描画制御用プリミティブ記憶部、107・・・曲面ベクトルレンダリング部、108・・・提示部、109・・・平面ベクトルレンダリング部、601、603・・・多角形2の内部領域、602、604・・・多角形1の内部領域、701・・描画用パラメータ算出部、702・・・描画判定情報算出部、703・・・ラスタデータ生成部、704・・・ラスタデータ記憶部、705・・・ステンシルデータ生成部、706・・・平面レンダリング結果データ生成部。
【技術分野】
【0001】
本発明は、本発明はベクタ図形を描画する描画装置および方法に関する。
【背景技術】
【0002】
点や直線、曲線、四角形、楕円などの幾何学的な図形要素を組み合わせることによって構成される画像のことをベクタグラフィックスと呼ぶ。これに対し、点(ピクセルあるいはドット)の配列によって構成される画像のことをラスタグラフィックスと呼ぶ。
【0003】
一般に、ディスプレイに表示される画像やプリンタで印刷される画像はラスタグラフィックスである。これらの機器でベクタグラフィックスを扱う際には、これをラスタグラフィクスへ変換する処理(ラスタライズ)が必要になる。ラスタライズの処理コストは高く、複雑なベクタグラフィックスを高速にラスタライズするためには高性能な計算機が必要とされる。その反面、ベクタグラフィックスは表示の都度、適切な解像度のラスタグラフィックスを生成することができるため、画像の拡大や縮小、変形によって輪郭線などの画質が損なわれることがない。そのため、イラストや図面などの輪郭線が明瞭な人工的な画像はベクタグラフィックスとして扱われることが多い。一方、写真などの自然画像はラスタグラフィックスとして扱われることが多い。
【0004】
ベクタグラフィックスの最も身近な利用例はフォントである。初期の計算機ではCPU性能の制約からラスタ形式のフォント(ビットマップフォント)が使われているが、解像度ごとにフォントデータを保持しなければならなかったため多くの記憶容量を必要としている。その後のCPU性能の向上に伴い、現在の計算機では、解像度に依存しないベクタ形式のフォント(アウトラインフォント)データを保持しておき、ディスプレイやプリンタに見合った適切な解像度のフォントをその都度生成することにより、少ない記憶容量で常に高品質なフォントを表示できる。しかし現在でも、携帯電話やカーナビゲーションシステムなどに内蔵されるCPUは処理能力が比較的低く、ベクタグラフィックスのラスタライズに要する演算コストを低減することが課題になっている。
【0005】
近年、この課題を解決するためにGPU(グラフィックスプロセッサユニット)が活用されている。GPUを利用し、直線と曲線で構成される図形をラスタライズするための手法が既に提案されている(例えば、特許文献1参照)。
【0006】
また、図形の幾何形状が動的に変化しても高速にラスタライズが可能な手法も公知である(例えば、特許文献2参照)。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2006−106705号公報
【特許文献2】特開2007−241878号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、ベクタ図形を曲面上に描画する場合には、処理の負担が増大し高速に描画処理を行うことができない問題がある。
本発明は、ベクタ図形を曲面上に描画する場合であっても、再分割処理等による処理負担の増加を低減し高速に描画処理を行うことのできる描画装置および方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
上述の課題を解決するため、本発明に係る描画装置は、ベクタ形式の図形に対応するベクタデータを記憶している第1記憶手段と、前記図形を描画するガイドとしての曲面モデルと、該曲面モデルに対応する、前記ベクタデータがレンダリングされることが可能な領域を示すベクタデータ定義位置とを記憶する第2記憶手段と、前記ベクタデータを輪郭線解析することにより直線輪郭および曲線輪郭のいずれか1以上に対応するデータを含むプリミティブデータを、前記曲面モデルが定義される空間は独立して前記図形を定義するとともに出力するラスタデータのピクセルの属性値を決定するために参照されるベクタ定義空間に生成する第1生成手段と、前記ベクタデータ定義位置と、前記曲面モデルとを参照して、曲面モデルに含まれる要素ごとに同一平面上にあるかどうかを判定し、曲面とみなせる曲面モデルである第1モデルまたは平面とみなせる曲面モデルである第2モデルのどちらか一方の判定結果を得る第1判定手段と、前記第1判定手段により前記第1モデルであると判定された場合、該第1モデルと前記プリミティブデータとを参照して、出力するラスタデータのピクセルの属性値を生成する第2生成手段と、前記第1判定手段により前記第2モデルであると判定された場合、該第2モデルと前記プリミティブデータとを参照して、前記ラスタデータのピクセルの属性値を生成する第3生成手段と、を具備することを特徴とする。
【発明の効果】
【0010】
本発明の描画装置および方法によれば、再分割処理等による処理負担の増加を低減し高速に描画処理を行うことができる。
【図面の簡単な説明】
【0011】
【図1】本実施形態に係る描画装置を示すブロック図。
【図2】ベクタ図形の一例を示す図。
【図3】ベクタデータ図形の一例を示す図。
【図4】三角形のうち、凸領域が図形を表す場合((a))と、凹領域が図形を表す場合((b))を示す図。
【図5】直線輪郭((a))と曲線輪郭から定義される三角形の集合((b))の一例を示す図。
【図6】描画制御用プリミティブの1つがある曲面モデル要素と交差している状態((a))、またはある曲面モデル要素がある描画制御用プリミティブに含まれている状態((b))を示す図。
【図7】図1の曲面ベクトルレンダリング部および図1の平面ベクトルレンダリング部を示すブロック図。
【図8】図1のモデル制御情報算出部の動作の一例を示すフローチャート。
【図9A】図1の入力モデル制御部の処理前の文字のイメージを示す図。
【図9B】図1の入力モデル制御部の処理後の文字のイメージの一例を示す図。
【図9C】図1の入力モデル制御部の処理後の文字のイメージの別例を示す図。
【図10】比較例におけるラスタライズの処理手順を示すフローチャート。
【図11】細分割された曲線輪郭から定義される三角形の集合((b))と、それに伴い更新された直線輪郭((a))の一例を示す図。
【図12】三角形分割された直線輪郭の一例を示す図。
【図13】比較例におけるラスタライズされた直線輪郭((a))および曲線輪郭から定義される三角形の集合((b))の一例を示す図。
【図14】比較例における生成されたラスタデータの一例を示す図。
【図15】直線輪郭の一例を示す図。
【図16】比較例における直線輪郭から生成された三角形データの一例を示す図。
【図17】比較例における直線輪郭から生成された三角形の点番号の一例を示す図。
【発明を実施するための形態】
【0012】
以下、図面を参照しながら本発明の実施形態に係る描画装置および方法について詳細に説明する。
本実施形態に係る描画装置の構成について図1を参照して詳細に説明する。
本実施形態に係る描画装置100は、モデル記憶部101、モデル制御情報算出部102、入力モデル制御部103、ベクタデータ記憶部104、描画制御用プリミティブ生成部105、描画制御用プリミティブ記憶部106、曲面ベクトルレンダリング部107、平面ベクトルレンダリング部109、および提示部108を含む。
ベクタデータ記憶部104は、任意の図形を表すベクタ形式の図形データであるベクタデータを記憶している。描画制御用プリミティブ生成部105は、所望のベクタ図形に対応するベクタデータを読み込み、ベクタデータを描画するために利用する描画制御用プリミティブデータをベクタ定義空間に生成し、描画制御用プリミティブデータを描画制御用プリミティブ記憶部106に記憶する。
【0013】
モデル記憶部101は、曲面モデル(複数の曲面モデル要素)とベクタデータ定義位置とを対応付けて記憶している。モデル制御情報算出部102は、モデル記憶部101から所望の曲面モデルを抽出し、描画制御用プリミティブ記憶部106から所望の描画制御用プリミティブデータを抽出し、曲面モデル要素ごとに曲面ベクトルレンダリング部107および平面ベクトルレンダリング部109のどちらか一方へ描画制御用プリミティブデータを出力するかどうかの判定結果を示すモデル制御情報を算出する。入力モデル制御部103は、モデル制御情報と、モデル制御情報算出部102が受け取ったものと同じ曲面モデルおよびベクタデータ定義位置とを受け取り、曲面ベクトルレンダリング部107および平面ベクトルレンダリング部109のどちらか一方に出力してレンダリングする曲面モデルを再定義曲面モデルと再定義し、さらに、再定義曲面モデルが同一平面上に定義されているかどうかを判定する。ここで、要素とは曲面モデルを構成する多角形を指し、例えば三角形や長方形を用いる事ができる。
【0014】
曲面ベクトルレンダリング部107は、再定義曲面モデル要素が同一平面上に定義されていないと判定された場合に、描画制御用プリミティブデータおよび再定義曲面モデルを受け取り、最終的な出力とするラスタデータを生成する。平面ベクトルレンダリング部109は、再定義曲面モデル要素が同一平面上に定義されていると判定された場合に、描画制御用プリミティブデータおよび再定義曲面モデルを受け取り、最終的な出力とするラスタデータを生成する。提示部108は、受け取ったラスタデータをスクリーンに表示する。
【0015】
[ベクタデータ記憶部104]
ベクタデータ記憶部104は、1種類以上のベクタ図形に対応する1以上のベクタデータを記憶している。ベクタデータは、ラスタライズされる任意のベクタ形式の図形(ベクタ図形と呼ぶ。ベクタ図形の一例を図2に示す)を表すベクタ形式の図形データであり、ラスタライズされる領域を含む任意の図形を示す、始点、制御点、および終点の座標と、ベクタ図形の種類(例えばフォント、絵)と、ベクタ図形を構成する各点(始点、制御点、および終点)の接続関係と、内部のラスタライズされる領域を示す情報とを含む。また、直線および曲線のどちら側を図形の内部とするかの情報を直線および曲線ごと定義していなくとも、直線および曲線のどちら側を内部領域とするかをあらかじめ決めておけばベクタデータの輪郭線解析と同時に内部領域を定義することができる。ベクタ図形の一例を図2に示し、図2のベクタ図形に対応するベクタデータに含まれる各点と各点との接続関係を図3に示す。
なお、ベクタデータは上記の形式に限定されるものではなく、色情報やアルファ値などのグラフィックスの分野において一般的に利用される他のデータを含んでもよい。
【0016】
[描画制御用プリミティブ生成部105]
描画制御用プリミティブ生成部105は、ベクタデータ記憶部104に記憶されているベクタデータを参照して、描画を行うベクタデータを抽出し、抽出したベクタデータから描画制御用プリミティブデータをベクタ定義空間に少なくとも1つ生成する。ベクタ定義空間は、曲面モデルが定義される空間とは独立した空間であって、独自の位置座標(またはテクスチャ座標)などでレンダリング対象のベクタデータが定義される空間のうちのある範囲で定義されるものである。ベクタ定義空間は、例えば各軸が0から1までの範囲で定義される2次元空間である。また、ベクタ定義空間は、後述するレンダリング部107、109が出力するラスタデータのピクセルの属性値を決定するために参照される空間である。ピクセルの属性値とは、ベクタ定義空間での位置座標、各ピクセルの色情報、および透明度などを示す通常複数の値である。ラスタデータは、最終的に提示部108に提示される画像の解像度と同じ解像度をもつ画像データである。曲面モデルについては後述のモデル記憶部101において詳細に説明する。
描画制御用プリミティブデータとは、ベクタデータを曲面モデルに描画するために利用するデータであり、例えば三角形、凸多角形を形成する点座標およびある点座標を結ぶ線を含むデータである。また、描画制御用プリミティブデータが表す描画制御用プリミティブは、ベクタデータの始点、制御点、および終点とを解析することによって生成される図形であり、例えば三角形群が挙げられるが、他にも凸多角形群を含む場合もある。なお、本実施形態では描画制御用プリミティブが三角形群と多角形群を含んでいる場合を例に説明を行う。図3では、図形の直線あるいはパラメトリック曲線の端点を黒丸で表し、パラメトリック曲線の制御点を白丸で表している。
描画制御用プリミティブ生成部105は、ベクタデータを輪郭線解析した結果、曲線輪郭(例えば図5(b))と直線輪郭(例えば図15)とに対応するデータを含む描画制御用プリミティブデータを生成する。描画制御用プリミティブデータは、ベクタ図形を再現する上でベクタデータと等価である。曲線輪郭から生成される描画制御用プリミティブは、曲線輪郭のパラメトリック曲線の始点と終点、および制御点の3点を結んで定義される多角形(ここでは三角形)の集合である。各三角形はパラメトリック曲線に外接しており、曲線は必ず三角形の内部に存在する。図3の例では、図3に含まれる始点と終点、および制御点の3点を結んで定義される三角形の集合である。また、曲線輪郭から定義される三角形は、図4(b)に示すように内部に定義されている曲線の凸領域を表すもの(凸曲線輪郭と称する)と、図4(a)に示すように凹領域を表すもの(凹曲線輪郭と称する)の2種類で構成される。なお、曲線輪郭から定義される三角形については、三角形の内側にあるピクセルのうち、曲線の凸領域に属するピクセルのみがラスタライズされる。
【0017】
直線輪郭は、制御点を無視してベクタデータに含まれる直線および曲線の始点と終点を線分で結ぶことによって得られる多角形と定義される。この直線輪郭は、例えば具体的には後述する図15に示す図形となる。さらにこの直線輪郭について三角化を行う。具体的には直線輪郭を構成する多角形の複数の頂点のうち、任意の1つの頂点(ピボットという)を選択する。そして、ピボットと他の全ての頂点を直線で結び、連結する2つの頂点が1つの三角形の辺となるように、ピボットを1つの頂点とする複数の三角形を生成する。これら複数の三角形を直線輪郭から生成される描画制御用プリミティブとする。ここで連結する2つの頂点とは、多角形の辺によって結ばれている2つの頂点のことを意味する。
このようにベクタデータから描画制御用プリミティブデータを生成するより詳しい方法は例えば上記特開2007−241878号公報で示されているため、ここでの詳細な説明は省略する。
【0018】
しかしながら、描画制御用プリミティブデータの生成方法はこれに限定されるものではなく、例えば、曲線輪郭から定義される三角形は、上述したように凹曲線輪郭と、凸曲線輪郭の2種類で構成される。直線輪郭は、例えばこの2種類の曲線輪郭に応じて定義されてもよい。この場合、直線輪郭は、凸曲線輪郭では制御点を無視して始点と終点との2点を結び、凹曲線輪郭では始点と制御点と終点との3点をこの順番に結び、これらの線分を連結して得られる多角形の輪郭の集合である。このように結んだ直線輪郭の例としては、図5(a)が挙げられる。図5(a)から分かるように、直線輪郭を構成する多角形は1つとは限らない(この例では3つの多角形で構成される)。また、各多角形は自己交差や穴を含むことがある。
この場合、図形(例えば三角形)の内部のラスタライズされる領域を示す情報は、例えば2種類の上述した曲線輪郭で決定される。この2種類の曲線輪郭によって、始点、制御点、および終点で決まる曲線で区切られる、三角形内部の領域のうち、どちらの領域がラスタライズされる領域であるかを示すことができる。
【0019】
描画制御用プリミティブデータは、上述したように、ベクタ定義空間に定義される。この場合、描画制御用プリミティブデータがベクタ定義空間が定義される範囲に全て含まれ、かつ三角形群を覆う最小の矩形が最も大きくなるように三角形の正規化を行う。具体的には、矩形が描画制御用プリミティブを全て覆う最小の長方形であり、各辺がベクタ定義空間のいずれかの軸と平行で、なおかつ2辺が垂直に交差している長方形であって、その長方形の2辺のうち長い方の辺がベクタ定義空間に収まる最も長い長さになるように拡大するさいの倍率を決定したうえで、その長方形の縦横比を維持したまま拡大し、正規化することができる。この手法とは異なり、例えば、描画制御用プリミティブ生成部105で生成された描画制御用プリミティブデータがベクタ定義空間に全て含まれ、かつ矩形の各辺がベクタ定義空間のいずれかの軸と平行な最小の長方形を考え、その長方形の縦横比を維持したまま、その長方形をベクタ定義空間に含まれる範囲で拡大した際の倍率で正規化することもできる。しかしながらこの方法に限定するものではなく、グラフィックスの分野で一般的な他の正規化方法を用いてもよい。
【0020】
[描画制御用プリミティブ記憶部106]
描画制御用プリミティブ記憶部106は、描画制御用プリミティブ生成部105から描画制御用プリミティブデータを受け取って記憶する。
【0021】
[モデル記憶部101]
モデル記憶部101は、各頂点にパラメータを含む複数の曲面モデル要素を含む曲面モデルと、この曲面モデルに対応するベクタデータ定義位置とを記憶している。曲面モデル要素は、辺の数が3以上で構成される多角形で示され、例えば三角形である。複数の曲面モデル要素の集合によって曲面モデルを表現する。ベクタデータ定義位置は、プリミティブデータに基づいてベクタ図形を再現するために曲面モデルのどの位置にベクタデータをレンダリングするかを示す。すなわち、ベクタデータ定義位置は、ベクタ定義空間で定義された領域が曲面モデルのどの領域にレンダリングされるかを示す。ここでの曲面モデルは、ベクタ図形を描画するガイドとして使用される。また、モデル記憶部101には、曲面モデル要素により構成される曲面モデルが複数記憶されていてもよい。
【0022】
この曲面モデル要素の各頂点には、ベクタ定義空間での対応位置を示すパラメータが定義されているものとする。このパラメータは例えば、テクスチャ座標の利用が考えられる。このパラメータにより、曲面が表される空間における曲面モデル要素の位置座標と、ベクタ定義空間におけるベクタデータ定義位置とが対応しているため、ベクタ定義空間における曲面モデル要素(ここでは三角形)を定義することができ、ベクタ定義空間にあるレンダリング対象のベクタデータと曲面モデル要素とのベクタ定義空間での位置関係を容易に判定することができる。さらに、曲面モデル要素が三角形の場合には、三角形を生成する3頂点によってある曲面モデル要素の法線ベクトルを決定することができる。
【0023】
なお、保存されるデータはこれらのみに限定されない。レンダリングの際の視点の位置や視線方向を表すカメラパラメータや並行投影または投視投影のどちらで投影するかなど、グラフィックスの分野でレンダリングの際に一般的に用いられる他の情報がモデル記憶部101に記憶されていてもよい。この場合、曲面モデルが表される空間における曲面モデル要素ごとの、透明度、色を含む情報も上述したパラメータに含まれる。
本実施形態では、曲面モデル要素が三角形で構成されている場合を例に説明する。これを一般的な多角形に適用する場合には、例えば、多角形を三角形の集合に分割する方法がある。分割方法については、例えば“M.ドバーグ、M.ファン.クリベルド、M.オーバマーズ、O.シュワルツコップ 共著、浅野哲夫 訳:コンピュータ・ジオメトリ 計算機科学:アルゴリズムと応用、近代科学社”に記載の方法を用いることが可能である。
【0024】
[モデル制御情報算出部102]
モデル制御情報算出部102は、モデル記憶部101から所望の曲面モデルおよびベクタデータ定義位置を抽出し、描画制御用プリミティブ記憶部106から所望の描画制御用プリミティブデータを抽出し、曲面モデル要素ごとに最終的な入力曲面モデル要素とするかどうかを判定して、曲面モデル要素ごとにベクタ図形との関係を示す判定結果であるモデル制御情報を算出する。
ここで、モデル制御情報の判定方法について図6を用いて詳細に説明する。
モデル記憶部101に記憶されている曲面モデル要素(ここでは、三角形である多角形2の内部領域601)と、描画制御用プリミティブ記憶部106に記憶されている描画制御用プリミティブデータが表す描画制御用プリミティブに含まれる任意の図形(ここでは、三角形である多角形1の内部領域602)とについて、ベクタデータ定義位置にある曲面モデル要素ごとに以下の判定を行う。
(a)互いの三角形が交差している状態であるかどうか
(b)一方の三角形がもう一方の三角形の内部領域に完全に含まれる状態であるかどうか(例えば、図6では多角形2の内部領域603が多角形1の内部領域604に完全に含まれている)
上記2点をそれぞれの三角形について個別に判定する。この判定手法は、例えば“中前栄八郎、西田友是:3次元コンピュータグラフィックス、pp63−72、昭晃堂”に記載の手法を用いることができるため、ここでの詳細な説明は省略する。また、このときの判定はベクタ定義空間でおこなわれる。判定を行うには、曲面モデルを構成する三角形がベクタ定義空間でどの様に定義されるかを調べる。曲面モデル要素ごとの頂点はベクタ定義空間での対応位置を示すパラメータを保持しているため、ベクタ定義空間での曲面モデル要素をそれぞれ定義することができる。なお、このときのベクタ定義空間は2次元の空間である。
以上の判定の結果、互いの三角形が交差したか、または一方の三角形がもう一方の三角形の内部領域に完全に含まれる場合には最終的な判定結果を「真」として、それ以外の場合は「偽」として、ベクタデータ定義位置にある曲面モデル要素ごとにこの「真」「偽」の判定結果がモデル制御情報として入力モデル制御部103に出力される。つまり、モデル制御情報が「真」の曲面モデル要素は、ベクタデータが描かれる領域を含む曲面モデル要素であるといえるため、これを最終的な入力曲面モデル要素とする。このモデル制御情報は、例えば曲面モデル要素ごとの「真」「偽」の判定を、フラグを用いて示して、曲面モデル要素ごとのフラグを入力モデル制御部103に出力してもよい。
なお、判定は必ずしも以上に挙げた手順である必要はなく、曲面モデル要素(多角形2の内部領域601、603)が描画制御用プリミティブに含まれる任意の図形(多角形1の内部領域602、604)と交差するか、または曲面モデル要素と描画制御用プリミティブに含まれる任意の図形のどちらか一方が、もう一方の内部領域に完全に含まれる状態になっているかの判定ができればよい。すなわち、モデル制御情報算出部102は、ベクタ定義空間での曲面モデル要素の占める領域と描画制御用プリミティブが占める領域とが重なっているかどうかの判定ができればよい。また、用途によっては簡易な判定で置き換えてもよい。例えば、曲面モデル要素ごとの頂点が描画制御用プリミティブに含まれる任意の図形の内部領域に含まれるかどうかを調べる。これにより曲面モデル要素と描画制御用プリミティブとの位置関係の判定を、通常の判定に比べて高速に判定することが可能になる。
なお、モデル制御情報算出部102で判定に用いた、モデル記憶部101に格納されている曲面モデルについては書き換えをおこなわない。
また、モデル制御情報算出部102は、モデル記憶部101から所望の曲面モデルおよびベクタデータ定義位置を受け取るときに、受け取った曲面モデルおよびベクタデータ定義位置と同じデータを入力モデル制御部103へ送るように、モデル記憶部101へ指示する。
【0025】
[入力モデル制御部103]
入力モデル制御部103は、モデル制御情報算出部102から曲面モデル要素ごとの判定結果を示すモデル制御情報を受け取り、モデル記憶部101から、モデル制御情報算出部102が受け取ったものと同じ曲面モデルおよびベクタデータ定義位置を受け取り、モデル制御情報に含まれる判定結果が「真」である曲面モデル要素を含む新たな曲面モデルを再定義するとともに、再定義された曲面モデル(以下、再定義曲面モデルという)を構成する要素である曲面モデル要素(以下、再定義曲面モデル要素)ごとに、再定義曲面モデルに含まれる全ての再定義曲面モデル要素が同一平面上に定義されているかどうかを判定する。再定義曲面モデル要素は、モデル記憶部101から受け取った曲面モデルのうち、モデル制御情報に含まれる判定結果が「真」である曲面モデル要素を抽出して曲面を構成したものであるので、再定義曲面モデル要素を次のレンダリング処理への入力とする。よって、モデル制御情報算出部102で算出されたモデル制御情報に含まれる判定結果が「偽」の曲面モデル要素については以降の処理がおこなわれなくなる。すなわち、入力モデル制御部103は、判定結果が「真」である曲面モデル要素を再定義曲面モデル要素とする。
【0026】
また、入力モデル制御部103は、再定義曲面モデルに対しては、再定義曲面モデルが平面であるか、つまり再定義曲面モデルに含まれる全ての再定義曲面モデル要素が同一平面上にあるかどうかの判定を行う。平面部分の判定は、例えば、曲面モデルが定義される空間における再定義曲面モデルに含まれる再定義曲面モデル要素の法線ベクトルの方向が全て、ほぼ同一であるかどうかを調べることで判定可能である。法線ベクトルの方向が全てほぼ同一であるかどうかは以下の手順で判定することができる。なお、以下で扱う法線ベクトルは、全て単位ベクトルとなるように長さが調整されているものとする。
1)再定義曲面モデルから任意の再定義曲面モデル要素を1つ選び出し、その法線ベクトルを基準となる法線ベクトルVbとして定義する。
2)上記「1)」で選択した再定義曲面モデル要素以外の再定義曲面モデル要素の法線ベクトルとVbとの内積を求め、その値が1.0に近い値をとるかを判定する。近い値かどうかの判定は、例えば、求めた内積と1.0との値の差が、あらかじめユーザによって定義された閾値以内の値であるかどうかを判定する。
3)上記「2)」の判定を全ての再定義曲面モデル要素に対してそれぞれ行い、求めた全ての内積が閾値以内の場合には、再定義曲面モデルが平面を構成するとして、再定義曲面モデルを平面ベクトルレンダリング部109に出力する。それ以外の場合、すなわち求めた内積と1.0との値の差が閾値を超える再定義曲面モデル要素が存在した場合は、再定義曲面モデルが平面を構成しないとして、再定義曲面モデルを曲面ベクトルレンダリング部107に出力する。なお、法線ベクトルは、モデル記憶部101に記憶されている曲面モデルごとに予め計算してモデル記憶部101に記憶し、入力モデル制御部103においてその法線ベクトルの値を参照して曲面モデルが平面であるかどうかの判定をおこなってもよいし、入力モデル制御部103が曲面モデル要素の各頂点の位置座標からこの曲面モデル要素の法線ベクトルを計算してもよい。
【0027】
[曲面ベクトルレンダリング部107]
曲面ベクトルレンダリング部107は、描画制御用プリミティブ記憶部106から描画制御用プリミティブデータを受け取り、入力モデル制御部103から、平面を構成しないと判定された再定義曲面モデルを受け取り、再定義曲面モデルと描画制御用プリミティブデータとから最終的な出力とするラスタデータを生成して提示部108へ送る。曲面ベクトルレンダリング部107が描画制御用プリミティブ記憶部106から受け取る描画制御用プリミティブデータについては、例えばモデル制御情報算出部102が描画制御用プリミティブ記憶部106から描画制御用プリミティブデータを抽出する際に、描画制御用プリミティブ記憶部106が同じ描画制御用プリミティブデータを曲面ベクトルレンダリング部107および平面ベクトルレンダリング部109へ渡す。他の例として、モデル制御情報算出部102が直接、描画制御用プリミティブ記憶部106から抽出した描画制御用プリミティブデータを曲面ベクトルレンダリング部107および平面ベクトルレンダリング部109に渡してもよい。さらに他の例として、入力モデル制御部103が、再定義曲面モデルが同一平面上にないと判定した場合には、この判定結果をモデル制御情報算出部102に返し、モデル制御情報算出部102が描画制御用プリミティブデータを曲面ベクトルレンダリング部107に渡し、再定義曲面モデルが同一平面上にあると判定した場合には、この判定結果をモデル制御情報算出部102に返し、モデル制御情報算出部102が描画制御用プリミティブデータを平面ベクトルレンダリング部109に渡してもよい。
【0028】
次に、曲面ベクトルレンダリング部107に含まれる各ブロックの動作について詳細に説明する。
曲面ベクトルレンダリング部107は、図7の左側の図に示すように描画用パラメータ算出部701、描画属性制御情報算出部202、ラスタデータ生成部703、およびラスタデータ記憶部704を含む。
【0029】
[描画用パラメータ算出部701]
描画用パラメータ算出部701は、入力モデル制御部103から、平面を構成しないと判定された再定義曲面モデルを受け取り、後述する手法で描画用パラメータを算出する。描画用パラメータとは、曲面モデル(ここでは、再定義曲面モデル)をスクリーンに投影した際にそれぞれの曲面モデル要素(ここでは、再定義曲面モデル要素)が占めるピクセルごとに、ベクタ定義空間における位置座標、色情報および透明度を含む情報を示すパラメータである。
描画用パラメータ算出部701は、再定義曲面モデルに加え、さらに必要であればカメラパラメータや投影方法を読み込む。この場合、描画用パラメータ算出部701は、後述のラスタデータ生成部703で生成されるラスタデータの各ピクセルが、ベクタ定義空間のどの位置に対応するかを表すパラメータ、およびどのような色が定義されていればよいかを算出する。これにより、各ピクセルのベクタ定義空間での位置座標(以下、対応位置という)、各ピクセルの色情報、および透明度などのピクセルの属性情報(以下、ピクセル属性情報という)が決定され、これを描画用パラメータとする。すなわち、描画用パラメータ算出部701はピクセルごとに描画用パラメータを算出する。
【0030】
なお本実施形態では、ベクタ定義空間における独自の位置座標として例えばテクスチャ座標を用いる。テクスチャ座標を利用する場合、描画用パラメータ算出部701は、グラフィックスの分野で一般的に用いられるテクスチャマッピングの手法を用いて曲面モデルとベクタ定義空間との対応を計算し、ベクタ定義空間での位置を算出できる。
各ピクセルの対応位置(例えばテクスチャ座標)、各ピクセルの色情報、および透明度をどのようにして算出するかについては、曲面モデルをレンダリングする際のレンダリング方法と同様の方法で行うことができる。例えば、曲面モデルを微細な三角形面の集合で近似し、各ピクセル属性情報がどの三角形面で決定されるかを計算することで求めることが可能である。この計算方法は三角形面をレンダリングする際のピクセル属性情報の決定方法と同じであり、グラフィックスの分野では一般的な方法であるため説明は省略する。また、曲面モデルからのピクセル属性情報の決定方法はこれに限るものではない。例えば、各ピクセルから、レンダリングする際の視線の方向に半直線を延ばし、曲面モデルと半直線の交点部分の対応位置(例えばテクスチャ座標)、色情報、透明度などをピクセル属性情報とする。また、この方法に限定するものでもなく、ピクセルごとにピクセル属性情報が算出可能な他の方法を用いてもよい。
またベクタ定義空間に対応する描画用パラメータは、上記の形式に限定されるものではなく、グラフィックスの分野において一般的に利用される他のデータを用いるか、あるいは含んでもよい。また、例えば、あらかじめ決定される式にパラメータとして代入されるような、独自に定義した値であってもよい。また、曲率など曲面モデルから算出されるパラメータを利用してこのパラメータを変更したものを含んでもよい。
【0031】
[描画判定情報算出部702]
描画判定情報算出部702は、描画制御用プリミティブ記憶部106から描画制御用プリミティブデータを受け取り、描画用パラメータ算出部701から描画用パラメータを受け取り、描画判定情報を算出する。描画判定情報とは、ベクタデータが形成する閉領域に各ピクセルの対応位置が含まれるかどうかを判定するための情報であり、ここでは後述する描画判定変数である。この対応位置の判定方法としては、例えば、以下の方法が挙げられる。
【0032】
1)描画制御用プリミティブデータに含まれる任意の図形データ(ここでは三角形とする)を1つ読み込む。
2)この図形データ、またはこの図形データの一部分が、描画用パラメータ算出部701で算出された各ピクセルの対応位置を含むかどうかを調べる。
3)対応位置がこの図形データの内部領域に含まれれば描画判定変数を1とする。
ここで、描画判定変数とは、出力用のラスタデータにピクセルを書き込むかどうかを判定する変数である。また、読み込んだ描画制御用プリミティブが、直線輪郭から生成された三角形の場合と曲線輪郭から生成された三角形の場合とで判定の処理が異なる。
直線輪郭から生成された三角形の場合は、各ピクセルの対応位置が三角形の内部に含まれていれば描画判定変数に1を加算する。
一方、曲線輪郭から生成された三角形の場合、描画制御用プリミティブ生成部105での生成ルールによって処理が異なる。第1の条件は、各ピクセルの対応位置が三角形の内部に含まれていれば「真」というものであり、生成ルールによらず共通の条件である。第2の条件は描画制御用プリミティブデータの生成ルールによって異なる。直線輪郭が、制御点を無視してベクタデータに含まれる直線および曲線の始点と終点を線分で結ぶことにより生成される場合、曲線の凸領域内に各ピクセルの対応位置が含まれていれば「真」となる。また、2種類の曲線輪郭により、直線輪郭の生成の際に制御点を含むかどうか切り替える場合、すなわち凸曲線輪郭では制御点を無視して始点と終点との2点を結び、凹曲線輪郭では始点と制御点と終点との3点をこの順番に結び、これらの線分を連結して直線輪郭を生成する場合、凸曲線(曲線の凸領域が図形を表す曲線)の凸領域、あるいは凹曲線(曲線の凹領域が図形を表す曲線)の凹領域の、どちらかに含まれていれば三角形の一部に含まれるものとして「真」となる。これらの2つの条件が「真」である場合に、描画判定変数に1を加算する。なお、ここでは1を加算しているが、奇数であれば1でなくてもよい。
【0033】
上記1)から3)を、全ての描画制御用プリミティブデータに含まれる全ての図形データ(ここでは三角形)について判定されるまで繰り返すことにより、各ピクセルの対応位置が、描画制御用プリミティブまたは描画制御用プリミティブの一部に含まれると判定された回数が得られる。本実施形態ではこの描画判定変数を描画判定情報とする。
例えば、描画制御用プリミティブが3つの直線輪郭から生成された三角形で構成されており、各ピクセルの対応位置がそのうちの2つの三角形の内部に相当する場合、描画判定変数は2となる。また、ベクタデータが色情報やアルファ値などの情報を保持しており、必要であれば、併せて各ピクセルの対応位置での色情報やアルファ値を算出してもよい。
【0034】
[ラスタデータ生成部703]
ラスタデータ生成部703は、描画判定情報算出部702から描画判定情報(描画判定変数)および描画用パラメータを受け取り、ピクセル属性情報を用いて画面表示用のラスタデータに書き込みを行うかどうか、すなわち描画するかどうかをピクセルごとに決定して、ラスタデータを生成する。ラスタデータ生成部703は、ピクセルの描画判定変数が奇数である場合に、対応位置に対応するピクセルの属性値を描画用パラメータに基づいて生成し、ラスタデータにピクセルを書き込む。このとき、ベクタデータから算出された色情報やアルファ値があれば、すでに算出されているピクセル属性情報の色情報やアルファ値などの該当する部分をベクタデータから算出された値で置き換える、またはすでに算出されているピクセル属性情報の色情報やアルファ値とブレンドするなどの処理を行ってもよい。描画判定変数が奇数であるとは、直線輪郭から生成された描画制御用プリミティブデータ、および曲線輪郭から生成された描画制御用プリミティブデータに定義されている曲線の図形内部側の領域を全てラスタライズした場合に、そのピクセルが奇数回書き込まれるということと等しくなる。これを上記特開2007−241878号公報で示されているステンシルデータの生成に置き換えて考えると、ステンシルデータのビット反転が奇数回おこなわれ、0以外の値となり、図形内部と判定されることと等しくなる。これは、上記特開2007−241878号公報のステンシルデータと同様の結果を得ることができる。
【0035】
[ラスタデータ記憶部704]
ラスタデータ記憶部704は、ラスタデータ生成部703からラスタデータを受け取って記憶し、提示部108へ送る。ただし、ラスタデータの構成はこの形式に限定されるものではなく、グラフィックスの分野において一般的に利用される他のデータを含んでもよい。
【0036】
[平面ベクトルレンダリング部109]
平面ベクトルレンダリング部109は、描画制御用プリミティブ記憶部106から描画制御用プリミティブデータを参照して抽出し、入力モデル制御部103から、平面を構成すると判定された再定義曲面モデルを受け取り、再定義曲面モデルと描画制御用プリミティブデータとから最終的な出力とするラスタデータを生成して提示部108へ送る。
次に、平面ベクトルレンダリング部109に含まれる各ブロックの動作について詳細に説明する。
平面ベクトルレンダリング部109は、図7の右側の図に示すようにステンシルデータ生成部705、および平面レンダリング結果データ生成部706を含む。
【0037】
[ステンシルデータ生成部705]
ステンシルデータ生成部705は、描画制御用プリミティブ記憶部106から描画制御用プリミティブデータを受け取り、入力モデル制御部103から平面を構成すると判定された再定義曲面モデルを受け取り、描画制御用プリミティブデータの描画制御用プリミティブの内部のピクセルをラスタライズすることによってステンシルデータを生成する。生成されたステンシルデータを、平面レンダリング結果データ生成部706へ送る。
ステンシルデータとは、最終的に提示部108に提示する解像度と同じ解像度を持つ画像データである。ステンシルデータの各ピクセルには数ビット程度の数値が割り当てられており、毎フレーム全ての描画に先立って各ピクセルが0に初期化される。
ステンシルデータ生成部705は、描画制御用プリミティブ記憶部106に記憶されている直線輪郭から生成された描画制御用プリミティブデータおよび曲線輪郭から生成された描画制御用プリミティブデータを読み込みラスタライズする。
【0038】
具体的には、例えば、直線輪郭から生成された描画制御用プリミティブデータについては、各描画制御用プリミティブの内部領域にあるピクセルをラスタライズする。曲線輪郭から生成された描画制御用プリミティブについては、その三角形の内側にあるピクセルのうち、曲線の凸領域に属するピクセルをラスタライズする。このとき、ラスタライズされたピクセルに対応するステンシルデータのピクセル値を、各三角形についてビット反転する。この手法に関しては、例えば、特開2007−241878号公報の手法を適用することができる。
【0039】
また、例えばラスタライズ方法としては、非ゼロ規則に基づいたラスタライズを行うことが考えられる。このとき、ラスタライズされたピクセルのうち描画制御用プリミティブである三角形を構成する各点を、時計回りしたときの三角形に含まれるピクセルの値をインクリメント(+1)し、反時計回りしたときの三角形に含まれるピクセルの値をデクリメント(−1)する。直線輪郭から生成された描画制御用プリミティブについては、各描画制御用プリミティブの内部領域にある全てのピクセルがラスタライズされる。曲線輪郭から生成された描画制御用プリミティブについては、その三角形の内側にあるピクセルのうち、曲線の凸領域に属するピクセルのみがラスタライズされる。
【0040】
[平面レンダリング結果データ生成部706]
平面レンダリング結果データ生成部706は、ステンシルデータ生成部705からステンシルデータを受け取り、ステンシルデータを参照しながら出力とするラスタデータを生成し、提示部108へ送る。出力するラスタデータは、再定義曲面モデルをスクリーンに投影した際に再定義曲面モデルが占めるピクセルをラスタライズすることにより生成する。ただし、これらのピクセルのうち、ラスタライズされるのはそのピクセル値が0以外である場所に限られる。
このラスタデータは、最終的に提示部108に提示する解像度と同じ解像度を持つ画像データであり、ラスタデータの各ピクセルには複数の色成分(例えば、RGBA)ごとに数ビット程度の数値が割り当てられている。
【0041】
[提示部108]
提示部108は、曲面ベクトルレンダリング部107または平面ベクトルレンダリング部109からラスタデータを受け取り、必要に応じてスクリーンに表示を行う。
【0042】
なお、平面ベクトルレンダリング部109および曲面ベクトルレンダリング部107で出力される結果は、ビットマップやJPEG、GIFなどのグラフィックス分野で一般的に用いられる画像形式でラスタデータ記憶部704に保存されてもよいし、ネットワークを通じて出力結果、あるいは保存されたデータが転送されてもよい。
さらに図1では、モデル記憶部101とベクタデータ記憶部104および描画制御用プリミティブ記憶部106を異なるブロックとして表記しているが、これらは単一のメモリ上にまとめて構成してもよいし、異なる複数のメモリ上に分割して構成してもよい。
また本実施形態では、ベクタ定義空間は例えば各軸が0から1までの範囲で定義される2次元の空間であるとするが、ベクタ定義空間はこの形式に限定されるものではない。各軸が0から1以外の範囲で定義されてもよい。
また、モデル制御情報算出部102は、描画制御用プリミティブ記憶部106から受け取った描画制御用プリミティブデータと、モデル記憶部101から受け取った曲面モデルとに対して、ベクタデータ定義位置にある曲面モデル要素ごとに最終的な入力曲面モデル要素とするかどうかの判定をおこなわなくてもよい。この場合、モデル制御情報算出部102は、受け取った曲面モデル要素全てを再定義曲面モデル要素とするようにモデル制御情報を設定して、入力モデル制御部103に送る。このとき、入力モデル制御部103は、このモデル制御情報を参照して、モデル記憶部101から受け取った曲面モデル要素について再定義曲面モデル要素を定義する。すなわち、この場合はモデル記憶部101から受け取った曲面モデル要素全てが再定義曲面モデル要素として定義される。入力モデル制御部103は、この再定義曲面モデル要素に対して同一平面にあるかどうかを判定する。これにより、曲面モデル要素と描画制御用プリミティブとの交差、および内包の判定分の処理コストを減らすことができる。
【0043】
以上に示した実施形態によれば、ベクタデータをレンダリングする際に、曲面モデルが同一平面上に定義されているかをベクタデータ単位で判定して、コストの低い平面レンダリングが利用できる場合にはそちらを利用するように切り換えることで、レンダリング対象に曲面レンダリングを用いる必要があるオブジェクトと平面レンダリングでよいオブジェクトが混在している場合でも、オブジェクトの状況に応じて適したレンダリング方法を選択することが可能であり、ベクタデータをレンダリングする際の処理効率を向上させる。
【0044】
(第1の変形例)
本変形例では、モデル制御情報算出部102において三角形が交差、および一方の三角形がもう一方の三角形の内部領域に完全に含まれる状態になっているかを判定する際に、曲面モデル要素とベクタデータとで判定を行うことが上記実施形態とは異なる。上記実施形態では曲面モデル要素に対し描画制御用プリミティブを判定対象としているため、ベクタデータ単位でレンダリング方法を選択する場合にベクタデータの形状によっては余分な領域が判定対象となることがある。本変形例では、曲面モデル要素に対しベクタ図形の輪郭線を判定対象としているので、ベクタデータにあわせて三角形を選択することができる。以下に、上記実施形態とは異なる動作を行うブロックのみ説明する。
【0045】
描画制御用プリミティブ生成部105は、描画制御用プリミティブデータとともにベクタデータを描画制御用プリミティブ記憶部106へ送る。
描画制御用プリミティブ記憶部106は、描画制御用プリミティブ生成部105から受け取った描画制御用プリミティブデータおよびベクタデータを記憶する。
【0046】
モデル制御情報算出部102は、モデル記憶部101から所望の曲面モデルおよびベクタデータ定義位置を抽出し、描画制御用プリミティブ記憶部106から所望のベクタデータを抽出し、曲面モデル要素ごとに判定を行い、曲面モデル要素ごとの判定結果を示すモデル制御情報を入力モデル制御部103へ送る。なお、モデル制御情報算出部102は、ベクタデータ記憶部104からベクタデータを受け取ってもよい。
判定方法としては、ベクタデータに含まれる制御点、始点、および終点の接続関係を示すベクタデータ図形(例えば図3)の輪郭線を追跡した場合に出現する、制御点を含む全ての点で構成される多角形と曲面モデル要素とが交差しているかどうか、または、この多角形と曲面モデル要素とについて、一方がもう一方の内部領域に完全に含まれる状態になっているかどうかを判定する。なお、描画制御用プリミティブ記憶部106からこの多角形を得てもよい。例えば、曲線輪郭から定義される描画制御用プリミティブ(三角形)と直線輪郭で示される描画制御用プリミティブ(多角形)を上述した判定に用いる多角形として同様の判定を行ってもよい。上述した判定の具体的な判定方法については、例えば“中前栄八郎、西田友是:3次元コンピュータグラフィックス、pp63−72、昭晃堂”に記載されている方法を用いることができるため、ここでの詳細な説明は省略する。
しかしながら、判定方法はこれに限定されるものではなく、曲面モデルがベクタ定義空間に占める領域が、ベクタ図形(例えば図2の図形)が占める領域と重なるかどうかを調べることができればよい。互いに交差している場合と、ベクタデータ図形(例えば図3の図形)の輪郭線を追跡してできる多角形または曲面モデル要素のどちらか一方が、もう一方に含まれている場合とを区別する必要は無く、また描画制御用プリミティブデータが定義されているため、例えば図8に示すフローチャートのような方法でも判定が可能である。
【0047】
はじめにステップS801では、曲面モデルからまだ判定がおこなわれていない曲面モデル要素(一般には多角形。例えば三角形。)を選択する。次に、ステップS802では、曲面モデル要素の各頂点のベクタ定義空間での位置を描画判定情報算出部702の対応位置として、上記の描画判定情報算出部702の説明と同様の手順で描画判定変数を算出する。描画判定変数が奇数であれば曲面モデル要素の一部は必ずベクタデータ図形の内部領域にあるため、モデル制御情報は「真」となりステップS806に進む。描画判定変数が偶数の場合は、ステップS803に進む。
ステップS803では、ベクタデータ図形の各頂点、制御点のいずれかが曲面モデル要素の内部領域に1つでも含まれるかどうかを調べる。ベクタデータ図形の各頂点、制御点のいずれかが曲面モデル要素の内部領域に1つでも含まれていればモデル制御情報は「真」となりステップS806に進む。ベクタデータ図形の各頂点、制御点のいずれも曲面モデル要素の内部領域に含まれていない場合は、ステップS804に進む。ステップS804では、曲線輪郭から定義される三角形を構成する各稜線または直線輪郭を構成する各稜線と、曲面モデル要素を構成する稜線とが交差しているかどうかを調べる。交差していればモデル制御情報は「真」となりステップS806に進む。それ以外の場合はステップS805に進み、モデル制御情報は「偽」となる。
ステップS807では、曲面モデルに含まれる全ての曲面モデル要素について判定をおこなったかどうかを調べ、全ての曲面モデル要素について判定をおこなったのであれば終了し、まだ判定されていない曲面モデルが存在するのであれば、ステップS801に戻り、上述した処理を同様に行う。
【0048】
以上の処理により、入力モデル制御部103において本実施形態および第1の変形例を適用したイメージについて図9Aから図9Cを参照して説明する。
図9Aは「次」という文字に対しレンダリング処理を行う前の、制御処理をおこなっていない状態を示し、図9Bおよび図9Cはそれぞれ、実施形態適用後および第1の変形例適用後の制御処理をおこなった状態を示す。図9Aに示す制御処理前の状態よりも図9Bに示す実施形態適用後のほうがレンダリングを行うデータが削減されていることがわかる。さらに、図9Cに示す第1の変形例適用後はベクタ図形の輪郭線と曲線輪郭から生成された描画制御用プリミティブの稜線を判定対象としているため、「次」の文字を構成するベクタデータに合わせてレンダリングを行うことができ、大幅なデータ削減が可能である。
【0049】
また、より処理コストと削減される三角形とのバランスを考慮する場合は、S802、およびS804の処理を変更できる。S802では、曲面モデル要素の各頂点のベクタ定義空間での位置を描画判定情報算出部702の対応位置として、上記の描画判定情報算出部702の説明と同様の手順で描画判定変数を算出する。ただし、この時の判定には直線輪郭から生成された描画制御用プリミティブを用いる。描画判定変数が奇数であれば曲面モデルの一部は必ず直線輪郭で囲まれた多角形の内部にあるため、モデル制御情報は「真」となる。描画判定変数が偶数の場合、さらに、対応位置が曲線輪郭から生成された描画制御用プリミティブの内部に1つでも含まれるかを調べる。含まれている場合、モデル制御情報は「真」となる。モデル制御情報が「真」の場合にはステップS806に進む。モデル制御情報が「偽」の場合にはステップS803に進む。それ以外の場合は「偽」となる。S803は前記した処理と同様の処理を行う。S804では、描画制御用プリミティブの各稜線と曲面モデルを構成する稜線とが交差しているかどうかを調べる。交差していればモデル制御情報は「真」となりステップS806に進む。それ以外の場合はステップS805に進み、モデル制御情報は「偽」となる。
【0050】
以上に示した第1の変形例によれば、ベクタデータの輪郭線を判定対象としているため、ベクタデータにあわせて三角形を選択することができる。そのため、レンダリング方法の選択の精度や判定速度が向上する。
【0051】
(第2の変形例)
上記実施形態では、入力モデル制御部103において、モデル制御情報が「真」の曲面モデルに含まれる全ての曲面モデル要素が、同一平面上に定義されているかどうかによって、曲面ベクトルレンダリング部107と平面ベクトルレンダリング部109のどちらに曲面モデルを入力するかを決定している。よって、平面と見なせる部分と曲面と見なせる部分が混在している曲面モデルについては、同一平面上にない曲面モデルとして判定する必要がある。本変形例では、平面と見なせる部分と曲面と見なせる部分が混在する曲面モデルについても、平面と見なせる曲面モデルと曲面と見なせる曲面モデルとを分離してそれぞれ別のレンダリング方法を適用する。
【0052】
[入力モデル制御部103]
入力モデル制御部103は、モデル記憶部101から曲面モデルおよびベクタデータ定義位置を受け取り、モデル制御情報算出部102から曲面モデル要素ごとの判定結果を示すモデル制御情報を受け取り、曲面モデルを構成する曲面モデル要素が同一平面上にあるかどうかを判定し、平面とみなせる曲面モデルと、曲面とみなせる曲面モデルとに分類する。以下に、本変形例での曲面モデルの分類方法について説明する。
まず、曲面モデルから任意の曲面モデル要素(三角形)Tcを選択する。次に、この曲面モデル要素に隣接する曲面モデル要素がそれぞれTcと同一平面上に定義されているかを調べる。同一平面上に無い場合には、その曲面モデル要素については処理を終了とする。同一平面上にある場合には、その曲面モデル要素はTcのグループに属するものとし、さらにその曲面モデル要素と隣接する曲面モデル要素について、Tcと同一平面上に定義されているかを調べる。これを全ての曲面モデル要素についての処理が終了するまで再帰的に行う。処理が終了した後、曲面モデルの中にまだグループに属していない曲面モデル要素が有る場合、それらの曲面モデル要素の中から任意の曲面モデル要素を再度選択し、前記の手順を繰り返す。これを、曲面モデル要素全てが処理されるまで繰り返す。
【0053】
以上の処理をおこなった結果、モデル制御情報が「真」の曲面モデル要素は、0個以上の平面と見なせる曲面モデル要素のグループと、その他の曲面モデル要素、つまり曲面と見なされる曲面モデル要素とに分類される。このうち、平面と見なせるグループの曲面モデル要素を平面ベクトルレンダリング部109に送り、その他の曲面モデル要素を曲面ベクトルレンダリング部107に送る。
【0054】
以上に示した第2の変形例によれば、曲面モデルのうちベクタデータが含まれる曲面モデル要素が部分的に平面と見なせる場合に、平面部分と曲面部分とを分離して別のレンダリング方法を適用することで、ベクタデータのレンダリング効率を向上させる。
【0055】
(比較例)
以下、本発明の実施形態との比較例として、特開2006−106705号公報および特開2007−241878号公報に記載された技術について説明する。
ベクタグラフィックスのラスタライズに要する演算コストを低減するため、GPU(グラフィックスプロセッサユニット)が活用されていることについては既に述べた。GPUを利用して、図2に示すような、直線と曲線で構成されるベクタ図形をラスタライズするための上記特開2006−106705号公報の手法をまず説明する。
【0056】
このラスタライズ手法のフローチャートを図10に示す。この図から分かるように、上記特開2006−106705号公報の手法の処理は、CPUによる前処理とGPUによる主処理の大きく2段階の処理から成る。最初に、CPUによってベクタ形式の図形が三角形の集まりに分解され、その後、GPUによって各三角形がラスタライズされる。GPUの処理単位は三角形であり、図2のような直線と曲線で構成されるベクタ図形を直接扱うことができないため、このような2段階の処理に分かれている。
最初のステップS1001では、HDDやRAMなどの記憶媒体からベクタデータを読み込み、その輪郭線を解析する処理がおこなわれる。例えば、図2のベクタ図形を表すベクタ形式のデータは、図3に示すベクタデータ図形に示されるような点と直線を含む。この図3では、図形の直線あるいはパラメトリック曲線の端点を黒丸で表し、パラメトリック曲線の制御点を白丸で表している。ステップS1001では、このようなベクタデータ図形を解析して、図5に示すような2種類の輪郭線データを生成する。
本明細書では、上述したように、図5(a)の輪郭線データを「直線輪郭」と表記し、図5(b)の輪郭線データを「曲線輪郭から定義される三角形」と表記している。また、以下では描画制御用プリミティブデータを三角形データ、描画制御用プリミティブを三角形として説明する。
図10のフローチャートの説明に戻る。ステップS1002では、前のステップで生成された曲線輪郭から定義される三角形に重なりがあるか調べる処理がおこなわれる。その結果、重なりが見つかった場合はステップS1003に進み、重なっている2つの三角形のうちの面積の大きい方を細分割する処理がおこなわれる。
この処理の影響で直線輪郭にも変更が生じるため、次のステップS1004では、直線輪郭を更新する処理がおこなわれる。その後、ステップS1002に戻って再び重なりがあるか調べ、重なりがなければステップS1005に進む。曲線輪郭から定義される三角形に重なりが残っている限り、ステップS1002からS1004の処理が繰り返される。
【0057】
例えば図5(b)に示す曲線輪郭から定義される三角形の集合の場合、ステップS1002において三角形aとb、および三角形cとdが重なっていることが分かる。ステップS1003では、三角形aおよびcが、それぞれ、図11(b)に示すような2つの三角形a0とa1、およびc0とc1に細分割される。そしてステップS1004では、図11(a)に示すように直線輪郭を更新する処理がおこなわれる。
ステップS1005では、直線輪郭を構成する各多角形を三角形に分割する処理がおこなわれる。例えば図11(a)の3つの多角形は、図12に示すような三角形の集まりに分割される。
以上(ステップS1001からS1005)の処理は、全てCPUによる前処理として実行される。
ステップS1006では、直線輪郭を構成する三角形(図12)および曲線輪郭から定義される三角形(図13(b))が、GPUによってラスタライズされる。このとき、直線輪郭を構成する三角形については、図13(a)に示すように、その三角形の内側にある全てのピクセルがラスタライズされる。
これに対して曲線輪郭から定義される三角形については、図13(b)に示すように、その三角形の内側にあるピクセルのうち、凹曲線輪郭の凹領域、あるいは凸曲線輪郭の凸領域がラスタライズされる。
このようにして得られた直線輪郭と曲線輪郭から定義される三角形のラスタライズ結果は、GPU内部のフレームバッファに併せて記憶される。例えば、図13(a)と図13(b)は、図14に示すようなラスタデータとしてフレームバッファに記憶される。
【0058】
従来のGPUを利用したラスタライズ手法では、複数の三角形を用いて曲線を近似していたため、拡大したときに粗く見えてしまう問題があった。また、より滑らかにラスタライズするためには多数の三角形を用いて曲線の近似精度を上げるしかなく、記憶容量と処理コストの増大が避けられなかった。これに対して上記特開2006−106705号公報の手法では、三角形単位ではなく、曲線近傍のピクセル単位に処理するため、解像度に依存せず常に滑らかに曲線をラスタライズすることができる。その上、記憶容量と処理コストも解像度に依存せず、常に少なくて済む。
【0059】
しかし、上記特開2006−106705号公報のラスタライズ手法には以下の2つの問題がある。
1つ目の問題は前処理のコストが高いことである。特に、図10のステップS1002の曲線輪郭から定義される三角形の重複判定と、ステップS1005の直線輪郭の三角形分割のコストが高い。
前処理のコストは、図形の幾何形状が時間的に変化しない場合であれば大きな問題にはならない。一度前処理をしてしまえば、以降は再び前処理を行う必要はないからである。しかし、動的に図形の幾何形状が変化する場合は、その都度、前処理をやり直さなければならず、ラスタライズ処理全体のボトルネックになることが多い。
2つ目の問題は、アンチエイリアシングのためにアルファブレンドを用いていることである。ここでアンチエイリアシングとは、ラスタライズされた図形の輪郭線に現れるジャギー(階段状のギザギザ)を除去する処理のことである。また、アルファブレンドとはアルファ値と呼ばれる係数を用いて2つのピクセル値を半透明合成する処理のことである。
広く知られているように、アルファブレンドを用いるためには全ての図形をデプス値でソート(デプスソート)し、奥に位置する図形から順番にラスタライズしなければならない。デプスソートは非常にコストが高い処理であり、ラスタライズ処理全体のボトルネックになることが多い。
【0060】
上記特開2007−241878号公報ではこれら2つの問題を解決する方法を提案している。
上記特開2007−241878号公報では、ベクタデータに含まれる直線および曲線の始点と終点を単純に線分で結ぶことによって得られる多角形を直線輪郭としている。例えば、図3のベクタデータ図形から解析された直線輪郭は、図15に示すような3つの多角形P0、P1、P2になる。曲線輪郭から定義される三角形については、上記特開2006−106705号公報と同様のものを用いている。
得られた直線輪郭を構成する各多角形について、任意の1点(ピボット)が選択される。そして次に、ピボットと、ピボットを含まない全ての連結する2点を結ぶ三角形を生成する。ここで連結する2点とは、多角形の辺によって結ばれている2つの点のことを意味する。
例えば、図15の3つの多角形P0、P1、P2において、それぞれ点0、23、28がピボットとして選択された場合、図16に示すような三角形が生成される。三角形が重なっており、この図だけでは三角形の形状を把握することが難しいため、図17に3つの多角形P0、P1、P2から生成された三角形を構成する3つの点の番号を示す。
なお、図17はあくまで説明を分かりやすくするための補足であり、三角形データそのものを表しているのではないことに注意する。実際の三角形データは、各三角形を構成する3点の位置座標、およびテクスチャ座標、および接続関係などから構成される。
【0061】
次に、三角形内部のピクセルをラスタライズすることによってステンシルデータを生成する処理がおこなわれる。なお、ステンシルデータは、最終的に提示する解像度と同じ解像度をもつ画像データである。
まず、直線輪郭から生成される三角形データおよび曲線輪郭から生成される三角形データを読み込み、ラスタライズする。このとき、直線輪郭の三角形については、その三角形の内側にある全てのピクセルがラスタライズされ、これらのピクセル位置に対応するステンシルデータのピクセル値がビット反転される。
一方、曲線輪郭から定義される三角形については、その三角形の内側にあるピクセルのうち、曲線の凸領域に属するピクセルがラスタライズされ、これらのピクセル位置に対応するステンシルデータのピクセル値がビット反転される。
結果として、図形の内部は奇数回ピクセル値がビット反転され、図形の外部は偶数回ピクセル値がビット反転される。
【0062】
上記の処理によって塗りつぶすピクセルが判断できるため、描画用のラスタデータの対応するピクセルを塗りつぶすことで描画結果を生成することができる。
上記特開2007−241878号公報では、直線輪郭の三角形分割などをおこなわないため、ベクタデータの頂点を移動しても三角形データの接続関係が変化しなければ三角形データの対応する頂点座標を書き換えるだけでよく、再度三角形データを作り直す必要はない。そのため、図形の幾何形状が動的に変化しても高速にラスタライズが可能である。
また、描画用のラスタデータのサブピクセル精度の画像を用意し、カバレッジデータをもとにサブピクセルの一部に図形の色を割り当て、最終的な描画用のラスタデータを生成する際に合成することでアルファブレンドが不要なアンチエイリアシングを可能としている。
【0063】
しかし、上記特開2006−106705号公報および特開2007−241878号公報に記載された技術では、図形を曲面上にレンダリングしたい場合にそのまま適用することができない。
一般に、多角形データを曲面上にレンダリングする場合、多角形データを微細な多角形データ群に分割することで元の多角形データ内に頂点を追加し、その頂点を移動することによって実現する。上記特開2007−241878号公報の方法を利用してベクタデータを曲面上にレンダリングする場合にも、上記特開2007−241878号公報で示される方法で生成された三角形データを再分割する必要がある。
三角形データの再分割には様々な方法があるが、十分に曲面に沿っている、つまり曲面上にレンダリングされているといえる描画結果が得られるように再分割する方法の処理コストは高い。
ベクタデータを描画するための三角形データを再分割してしまうため、図形の幾何形状が変化する場合には、その都度、再分割処理をやり直す必要がある。このため、上記特開2006−106705号公報の問題点であり、上記特開2007−241878号公報の利点である、動的な図形の幾何形状の変化への対応も不可能となる。
【0064】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【0065】
100・・・描画装置、101・・・モデル記憶部、102・・・モデル制御情報算出部、103・・・入力モデル制御部、104・・・ベクタデータ記憶部、105・・・描画制御用プリミティブ生成部、106・・・描画制御用プリミティブ記憶部、107・・・曲面ベクトルレンダリング部、108・・・提示部、109・・・平面ベクトルレンダリング部、601、603・・・多角形2の内部領域、602、604・・・多角形1の内部領域、701・・描画用パラメータ算出部、702・・・描画判定情報算出部、703・・・ラスタデータ生成部、704・・・ラスタデータ記憶部、705・・・ステンシルデータ生成部、706・・・平面レンダリング結果データ生成部。
【特許請求の範囲】
【請求項1】
ベクタ形式の図形に対応するベクタデータを記憶している第1記憶手段と、
前記図形を描画するガイドとしての曲面モデルと、該曲面モデルに対応する、前記ベクタデータがレンダリングされることが可能な領域を示すベクタデータ定義位置とを記憶する第2記憶手段と、
前記ベクタデータを輪郭線解析することにより直線輪郭および曲線輪郭のいずれか1以上に対応するデータを含むプリミティブデータを、前記曲面モデルが定義される空間と独立して前記図形を定義するとともに出力するラスタデータのピクセルの属性値を決定するために参照されるベクタ定義空間に生成する第1生成手段と、
前記ベクタデータ定義位置と、前記曲面モデルとを参照して、曲面モデルに含まれる要素ごとに同一平面上にあるかどうかを判定し、曲面とみなせる曲面モデルである第1モデルまたは平面とみなせる曲面モデルである第2モデルのどちらか一方の判定結果を得る第1判定手段と、
前記第1判定手段により前記第1モデルであると判定された場合、該第1モデルと前記プリミティブデータとを参照して、出力するラスタデータのピクセルの属性値を生成する第2生成手段と、
前記第1判定手段により前記第2モデルであると判定された場合、該第2モデルと前記プリミティブデータとを参照して、前記ラスタデータのピクセルの属性値を生成する第3生成手段と、を具備することを特徴とする描画装置。
【請求項2】
前記要素ごとに、該要素が前記ベクタ定義空間のどの位置になるかを算出し、ベクタ定義空間で要素と前記図形に対応するデータとの関係を判定する第2判定手段をさらに具備し、
前記第1判定手段は、前記要素ごとに前記第2判定手段の判定結果を参照して、前記複数の要素から採用する要素を決定し、採用する要素を含む再定義曲面モデルを生成し、第1モデルおよび第2モデルを、該再定義曲面モデルに含まれる要素ごとに同一平面上にあるかどうかにより判定し、該第1モデルまたは該第2モデルのどちらか一方の判定結果を得、
前記第2生成手段は、前記再定義曲面モデルより判定された前記第1モデルと前記プリミティブデータとを参照し、出力するラスタデータのピクセルの属性値を生成し、
前記第3生成手段は、前記再定義曲面モデルより判定された前記第2モデルと前記プリミティブデータとを参照し、前記ラスタデータのピクセルの属性値を生成することを特徴とする請求項1に記載の描画装置。
【請求項3】
前記第2判定手段は、前記要素と前記ベクタデータとの関係を判定することを特徴とする請求項2に記載の描画装置。
【請求項4】
前記第2判定手段は、前記ベクタ定義空間での前記要素の占める領域とベクタデータが示す図形が占める領域が重なっているかどうかを判定すること特徴とする請求項3に記載の描画装置。
【請求項5】
前記第2判定手段は、前記要素と前記プリミティブデータとの関係を判定することを特徴とする請求項2に記載の描画装置。
【請求項6】
前記第2判定手段は、前記ベクタ定義空間での前記要素の占める領域と前記プリミティブデータが表すプリミティブが占める領域とが重なっているかを判定することを特徴とする請求項5に記載の描画装置。
【請求項7】
前記第1判定手段は、前記複数の要素が平面を構成する曲面モデルの一部であるかどうかの判定結果に基づいて、曲面を構成する複数の要素と平面を構成する複数の要素とに分離し、前記曲面を構成する複数の要素は前記第2生成手段へ送り、前記平面を構成する複数の要素は前記第3生成手段へ送ることを特徴とする請求項1から請求項6のいずれか1項に記載の描画装置。
【請求項8】
前記第2生成手段は、
前記曲面モデルをスクリーンに投影した際に該曲面モデルの要素が占めるピクセルごとに、ベクタ定義空間における対応位置、色情報、および透明度を含む描画用パラメータを算出する算出手段と、
前記プリミティブデータについて前記対応位置を含むかどうかを判定し、前記対応位置を含むプリミティブデータが前記直線輪郭から生成されたプリミティブデータであれば前記対応位置の描画判定変数に第1値を加算し、前記対応位置を含むプリミティブデータが前記曲線輪郭から生成されたプリミティブデータであり、かつ該対応位置が曲線輪郭の凸領域に含まれるならば、前記描画判定変数に前記第1値を加算する第3判定手段と、
前記描画判定変数が奇数であるならば、前記対応位置に対応するピクセルの属性値を前記描画用パラメータに基づいて生成する第4生成手段と、を含むことを特徴とする請求項1から請求項7のいずれか1項に記載の描画装置。
【請求項9】
前記第2生成手段は、
前記曲面モデルをスクリーンに投影した際に該曲面モデルの要素が占めるピクセルごとに、ベクタ定義空間における対応位置、色情報、および透明度を含む描画用パラメータを算出する算出手段と、
前記プリミティブデータについて前記対応位置を含むかどうかを判定し、前記対応位置を含むプリミティブデータが前記直線輪郭から生成されたプリミティブデータであれば前記対応位置の描画判定変数に第1値を加算し、前記対応位置を含むプリミティブデータが前記曲線輪郭から生成されたプリミティブデータであり、かつ該対応位置が曲線輪郭の凸領域および凹領域のいずれか一方に含まれるならば、前記描画判定変数に前記第1値を加算する第3判定手段と、
前記描画判定変数が奇数であるならば、前記対応位置に対応するピクセルの属性値を前記描画用パラメータに基づいて生成する第4生成手段と、を含むことを特徴とする請求項1から請求項7のいずれか1項に記載の描画装置。
【請求項10】
前記第3生成手段は、前記プリミティブデータおよび前記第2モデルを参照してピクセルをラスタライズしてステンシルデータを生成する第5生成手段と、
前記ステンシルデータを参照して前記出力ラスタデータを生成する第6生成手段と、を含むことを特徴とする請求項1から請求項9のいずれか1項に記載の描画装置。
【請求項11】
ベクタ形式の図形に対応するベクタデータを記憶し、
前記図形を描画するガイドとしての曲面モデルと、該曲面モデルに対応する、前記ベクタデータがレンダリングされることが可能な領域を示すベクタデータ定義位置とを記憶し、
前記ベクタデータを輪郭線解析することにより直線輪郭および曲線輪郭のいずれか1以上に対応するデータを含むプリミティブデータを、前記曲面モデルが定義される空間と独立して前記図形を定義するとともに出力するラスタデータのピクセルの属性値を決定するために参照されるベクタ定義空間に生成し、
前記ベクタデータ定義位置と、前記曲面モデルとを参照して、曲面モデルに含まれる要素ごとに同一平面上にあるかどうかを判定し、曲面とみなせる曲面モデルである第1モデルまたは平面とみなせる曲面モデルである第2モデルのどちらか一方の第1判定結果を得、
前記第1判定結果により前記第1モデルであると判定された場合、該第1モデルと前記プリミティブデータとを参照して、出力するラスタデータのピクセルの属性値を生成し、
前記第1判定結果により前記第2モデルであると判定された場合、該第2モデルと前記プリミティブデータとを参照して、前記ラスタデータのピクセルの属性値を生成することを特徴とする描画方法。
【請求項1】
ベクタ形式の図形に対応するベクタデータを記憶している第1記憶手段と、
前記図形を描画するガイドとしての曲面モデルと、該曲面モデルに対応する、前記ベクタデータがレンダリングされることが可能な領域を示すベクタデータ定義位置とを記憶する第2記憶手段と、
前記ベクタデータを輪郭線解析することにより直線輪郭および曲線輪郭のいずれか1以上に対応するデータを含むプリミティブデータを、前記曲面モデルが定義される空間と独立して前記図形を定義するとともに出力するラスタデータのピクセルの属性値を決定するために参照されるベクタ定義空間に生成する第1生成手段と、
前記ベクタデータ定義位置と、前記曲面モデルとを参照して、曲面モデルに含まれる要素ごとに同一平面上にあるかどうかを判定し、曲面とみなせる曲面モデルである第1モデルまたは平面とみなせる曲面モデルである第2モデルのどちらか一方の判定結果を得る第1判定手段と、
前記第1判定手段により前記第1モデルであると判定された場合、該第1モデルと前記プリミティブデータとを参照して、出力するラスタデータのピクセルの属性値を生成する第2生成手段と、
前記第1判定手段により前記第2モデルであると判定された場合、該第2モデルと前記プリミティブデータとを参照して、前記ラスタデータのピクセルの属性値を生成する第3生成手段と、を具備することを特徴とする描画装置。
【請求項2】
前記要素ごとに、該要素が前記ベクタ定義空間のどの位置になるかを算出し、ベクタ定義空間で要素と前記図形に対応するデータとの関係を判定する第2判定手段をさらに具備し、
前記第1判定手段は、前記要素ごとに前記第2判定手段の判定結果を参照して、前記複数の要素から採用する要素を決定し、採用する要素を含む再定義曲面モデルを生成し、第1モデルおよび第2モデルを、該再定義曲面モデルに含まれる要素ごとに同一平面上にあるかどうかにより判定し、該第1モデルまたは該第2モデルのどちらか一方の判定結果を得、
前記第2生成手段は、前記再定義曲面モデルより判定された前記第1モデルと前記プリミティブデータとを参照し、出力するラスタデータのピクセルの属性値を生成し、
前記第3生成手段は、前記再定義曲面モデルより判定された前記第2モデルと前記プリミティブデータとを参照し、前記ラスタデータのピクセルの属性値を生成することを特徴とする請求項1に記載の描画装置。
【請求項3】
前記第2判定手段は、前記要素と前記ベクタデータとの関係を判定することを特徴とする請求項2に記載の描画装置。
【請求項4】
前記第2判定手段は、前記ベクタ定義空間での前記要素の占める領域とベクタデータが示す図形が占める領域が重なっているかどうかを判定すること特徴とする請求項3に記載の描画装置。
【請求項5】
前記第2判定手段は、前記要素と前記プリミティブデータとの関係を判定することを特徴とする請求項2に記載の描画装置。
【請求項6】
前記第2判定手段は、前記ベクタ定義空間での前記要素の占める領域と前記プリミティブデータが表すプリミティブが占める領域とが重なっているかを判定することを特徴とする請求項5に記載の描画装置。
【請求項7】
前記第1判定手段は、前記複数の要素が平面を構成する曲面モデルの一部であるかどうかの判定結果に基づいて、曲面を構成する複数の要素と平面を構成する複数の要素とに分離し、前記曲面を構成する複数の要素は前記第2生成手段へ送り、前記平面を構成する複数の要素は前記第3生成手段へ送ることを特徴とする請求項1から請求項6のいずれか1項に記載の描画装置。
【請求項8】
前記第2生成手段は、
前記曲面モデルをスクリーンに投影した際に該曲面モデルの要素が占めるピクセルごとに、ベクタ定義空間における対応位置、色情報、および透明度を含む描画用パラメータを算出する算出手段と、
前記プリミティブデータについて前記対応位置を含むかどうかを判定し、前記対応位置を含むプリミティブデータが前記直線輪郭から生成されたプリミティブデータであれば前記対応位置の描画判定変数に第1値を加算し、前記対応位置を含むプリミティブデータが前記曲線輪郭から生成されたプリミティブデータであり、かつ該対応位置が曲線輪郭の凸領域に含まれるならば、前記描画判定変数に前記第1値を加算する第3判定手段と、
前記描画判定変数が奇数であるならば、前記対応位置に対応するピクセルの属性値を前記描画用パラメータに基づいて生成する第4生成手段と、を含むことを特徴とする請求項1から請求項7のいずれか1項に記載の描画装置。
【請求項9】
前記第2生成手段は、
前記曲面モデルをスクリーンに投影した際に該曲面モデルの要素が占めるピクセルごとに、ベクタ定義空間における対応位置、色情報、および透明度を含む描画用パラメータを算出する算出手段と、
前記プリミティブデータについて前記対応位置を含むかどうかを判定し、前記対応位置を含むプリミティブデータが前記直線輪郭から生成されたプリミティブデータであれば前記対応位置の描画判定変数に第1値を加算し、前記対応位置を含むプリミティブデータが前記曲線輪郭から生成されたプリミティブデータであり、かつ該対応位置が曲線輪郭の凸領域および凹領域のいずれか一方に含まれるならば、前記描画判定変数に前記第1値を加算する第3判定手段と、
前記描画判定変数が奇数であるならば、前記対応位置に対応するピクセルの属性値を前記描画用パラメータに基づいて生成する第4生成手段と、を含むことを特徴とする請求項1から請求項7のいずれか1項に記載の描画装置。
【請求項10】
前記第3生成手段は、前記プリミティブデータおよび前記第2モデルを参照してピクセルをラスタライズしてステンシルデータを生成する第5生成手段と、
前記ステンシルデータを参照して前記出力ラスタデータを生成する第6生成手段と、を含むことを特徴とする請求項1から請求項9のいずれか1項に記載の描画装置。
【請求項11】
ベクタ形式の図形に対応するベクタデータを記憶し、
前記図形を描画するガイドとしての曲面モデルと、該曲面モデルに対応する、前記ベクタデータがレンダリングされることが可能な領域を示すベクタデータ定義位置とを記憶し、
前記ベクタデータを輪郭線解析することにより直線輪郭および曲線輪郭のいずれか1以上に対応するデータを含むプリミティブデータを、前記曲面モデルが定義される空間と独立して前記図形を定義するとともに出力するラスタデータのピクセルの属性値を決定するために参照されるベクタ定義空間に生成し、
前記ベクタデータ定義位置と、前記曲面モデルとを参照して、曲面モデルに含まれる要素ごとに同一平面上にあるかどうかを判定し、曲面とみなせる曲面モデルである第1モデルまたは平面とみなせる曲面モデルである第2モデルのどちらか一方の第1判定結果を得、
前記第1判定結果により前記第1モデルであると判定された場合、該第1モデルと前記プリミティブデータとを参照して、出力するラスタデータのピクセルの属性値を生成し、
前記第1判定結果により前記第2モデルであると判定された場合、該第2モデルと前記プリミティブデータとを参照して、前記ラスタデータのピクセルの属性値を生成することを特徴とする描画方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9A】
【図9B】
【図9C】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9A】
【図9B】
【図9C】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【公開番号】特開2010−256985(P2010−256985A)
【公開日】平成22年11月11日(2010.11.11)
【国際特許分類】
【出願番号】特願2009−103135(P2009−103135)
【出願日】平成21年4月21日(2009.4.21)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】
【公開日】平成22年11月11日(2010.11.11)
【国際特許分類】
【出願日】平成21年4月21日(2009.4.21)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】
[ Back to top ]