(57)【要約】【課題】ストローク経路、および特に、ストローク曲線をレンダリングするためのさらなる、また改善された、技術を提供すること。【解決手段】グラフィックス処理システムが受け取る入力ストローク曲線1は、システムで使用するために利用可能な少なくとも2つの、および好ましくはそれ以上の、レンダリングプロセスを使用してレンダリングすることができる。受け取ったストローク曲線1をレンダリングするために使用される1つまたは複数のプロセスは、入力ストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうか、例えば、入力ストローク曲線1が1つまたは複数の自己重複領域を含むかどうかに基づき選択される。【選択図】図1
2010092481.tif 000002
【特許請求の範囲】
【請求項１】
ストローク曲線をレンダリングすることを目的とする少なくとも2つのプロセスを使用することができるグラフィックス処理システムで表示するストローク曲線をレンダリングする方法であって、
定義済み空間内で定義されている入力ストローク曲線を受け取るステップと、
前記入力ストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかを判定するステップと、
前記判定結果に基づき、前記グラフィックス処理システムのストローク曲線をレンダリングするための第1のプロセスおよび/または前記グラフィックス処理システムのストローク曲線をレンダリングするための第2のプロセスを使用して表示する前記入力ストローク曲線をレンダリングするステップとを含む方法。
【請求項２】
ストローク曲線をレンダリングすることを目的とする複数のプロセスを使用することができるグラフィックス処理システムで表示するストローク曲線をレンダリングする方法であって、
定義済み空間内で定義されている入力ストローク曲線を受け取るステップと、
前記入力ストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかを判定するステップと、
前記入力ストローク曲線の領域をレンダリングするために使用される前記グラフィックス処理システムの前記1つまたは複数のプロセスを、前記領域が前記特定の1つまたは複数の特性を有するものと判定されるかどうかに基づき選択するステップとを含む方法。
【請求項３】
さらに、前記入力ストローク曲線を、前記入力ストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかに関する判定結果に基づき複数の定義済みまたは所定のストローク曲線のうちの1つのストローク曲線として分類するステップを含む請求項1または2に記載の方法。
【請求項４】
ストローク曲線をレンダリングすることを目的とする複数のプロセスを使用することができるグラフィックス処理システムで表示するストローク曲線をレンダリングする方法であって、
定義済み空間内で定義されている入力ストローク曲線を受け取るステップと、
前記入力ストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかを判定するステップと、
前記判定結果に基づき前記ストローク曲線をレンダリングすることを目的として前記入力ストローク曲線を分類するステップとを含む方法。
【請求項５】
前記入力ストローク曲線が、特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかを判定する前記ステップは、前記入力ストローク曲線が、1つまたは複数の自己重複領域を含むかどうかを判定するステップを含む請求項1から4のいずれか一項に記載の方法。
【請求項６】
前記入力ストローク曲線が、1つまたは複数の自己重複領域を含むかどうかを判定する前記ステップは、前記受け取ったストローク曲線の前記中心曲線上の1つまたは複数の点における曲率半径を決定し、前記決定された曲率半径を前記入力ストローク曲線のストローク幅の半分と比較するステップを含む請求項5に記載の方法。
【請求項７】
さらに、前記入力ストローク曲線を、前記受け取ったストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかを判定する前記ステップに基づきレンダリングすることを目的として2つ以上の部分に細分すべきかどうかを判定するステップと、
前記入力ストローク曲線を、前記判定結果に基づき2つ以上の部分に細分するステップとを含む請求項1から6のいずれか一項に記載の方法。
【請求項８】
ストローク曲線をレンダリングすることを目的として前記グラフィックス処理システムで利用可能な前記複数のプロセスは、ストローク曲線の第1の集合を正確にレンダリングすることができる第1のレンダリングプロセスとストローク曲線の第2の集合を正確にレンダリングすることができる第2のレンダリングプロセスとを含み、ストローク曲線の前記第2の集合はストローク曲線の前記第1の集合より大きい請求項1から7のいずれか一項に記載の方法。
【請求項９】
ストローク曲線をレンダリングすることを目的として前記グラフィックス処理システムで利用可能な前記複数のプロセスは、第1のレンダリングプロセスと第2のレンダリングプロセスとを含み、前記第2のレンダリングプロセスは前記第1のレンダリングプロセスよりも負荷の高い処理を必要とする請求項1から8のいずれか一項に記載の方法。
【請求項１０】
ストローク曲線をレンダリングすることを目的として前記グラフィックス処理システムで利用可能な前記複数のプロセスは、前記入力ストローク曲線をレンダリングすることを目的として所定の情報をそれぞれが検索する第1のレンダリングプロセスと第2のレンダリングプロセスとを含み、前記第2のレンダリングプロセスは前記第1のレンダリングプロセスに比べて多い情報を検索することを要求する請求項1から9のいずれか一項に記載の方法。
【請求項１１】
ストローク曲線をレンダリングすることを目的とする少なくとも2つのプロセスを使用することができるグラフィックス処理システムで表示するストローク曲線をレンダリングするための装置であって、
定義済み空間内で定義されている入力ストローク曲線を受け取るための手段と、
前記入力ストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかを判定するための手段と、
前記判定結果に基づき、前記グラフィックス処理システムのストローク曲線をレンダリングするための第1のプロセスおよび/または前記グラフィックス処理システムのストローク曲線をレンダリングするための第2のプロセスを使用して表示する前記入力ストローク曲線をレンダリングするための手段とを備える装置。
【請求項１２】
ストローク曲線をレンダリングすることを目的とする複数のプロセスを使用することができるグラフィックス処理システムで表示するストローク曲線をレンダリングするための装置であって、
定義済み空間内で定義されている入力ストローク曲線を受け取るための手段と、
前記入力ストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかを判定するための手段と、
前記入力ストローク曲線の領域をレンダリングするために使用される前記グラフィックス処理システムの前記1つまたは複数のプロセスを、前記領域が前記特定の1つまたは複数の特性を有すると判定されるかどうかに基づき選択するための手段とを備える装置。
【請求項１３】
さらに、前記入力ストローク曲線を、前記入力ストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかに関する判定結果に基づき複数の定義済みまたは所定のストローク曲線のうちの1つのストローク曲線として分類するための手段を備える請求項11または12に記載の装置。
【請求項１４】
ストローク曲線をレンダリングすることを目的とする複数のプロセスを使用することができるグラフィックス処理システムで表示するストローク曲線をレンダリングするための装置であって、
定義済み空間内で定義されている入力ストローク曲線を受け取るための手段と、
前記入力ストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかを判定するための手段と、
前記判定結果に基づき前記ストローク曲線をレンダリングすることを目的として前記入力ストローク曲線を分類するための手段とを備える装置。
【請求項１５】
前記入力ストローク曲線が、特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかを判定するための前記手段は、前記入力ストローク曲線が、1つまたは複数の自己重複領域を含むかどうかを判定するための手段を備える請求項11から14のいずれか一項に記載の装置。
【請求項１６】
前記入力ストローク曲線が、1つまたは複数の自己重複領域を含むかどうかを判定するための前記手段は、前記受け取ったストローク曲線の前記中心曲線上の1つまたは複数の点における曲率半径を決定し、前記決定された曲率半径を前記入力ストローク曲線のストローク幅の半分と比較するための手段を備える請求項15に記載の装置。
【請求項１７】
さらに、前記入力ストローク曲線を、前記受け取ったストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかに関する前記判定結果に基づきレンダリングすることを目的として2つ以上の部分に細分すべきかどうかを判定するための手段と、
前記入力ストローク曲線を、前記判定結果に基づき2つ以上の部分に細分するための手段とを備える請求項11から16のいずれか一項に記載の装置。
【請求項１８】
ストローク曲線をレンダリングすることを目的として前記グラフィックス処理システムで利用可能な前記複数のプロセスは、ストローク曲線の第1の集合を正確にレンダリングすることができる第1のレンダリングプロセスとストローク曲線の第2の集合を正確にレンダリングすることができる第2のレンダリングプロセスとを含み、ストローク曲線の前記第2の集合はストローク曲線の前記第1の集合より大きい請求項11から17のいずれか一項に記載の装置。
【請求項１９】
ストローク曲線をレンダリングすることを目的として前記グラフィックス処理システムで利用可能な前記複数のプロセスは、第1のレンダリングプロセスと第2のレンダリングプロセスとを含み、前記第2のレンダリングプロセスは前記第1のレンダリングプロセスよりも負荷の高い処理を必要とする請求項11から18のいずれか一項に記載の装置。
【請求項２０】
ストローク曲線をレンダリングすることを目的として前記グラフィックス処理システムで利用可能な前記複数のプロセスは、前記入力ストローク曲線をレンダリングすることを目的として所定の情報をそれぞれが検索する第1のレンダリングプロセスと第2のレンダリングプロセスとを含み、前記第1のレンダリングプロセスは前記第2のレンダリングプロセスに比べて多い情報を検索することを要求する請求項11から19のいずれか一項に記載の装置。
【請求項２１】
前記プログラム要素がデータ処理手段上で実行されたときに請求項1から10のいずれか一項に記載の方法を実行するコンピュータソフトウェアコード部分を備えるコンピュータプログラム要素。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータグラフィックスシステムで画像をレンダリングするプロセスに関するものであり、具体的には、このようなシステムにおけるストローク曲線のレンダリングに関するものである。
【背景技術】
【０００２】
近年、コンピュータグラフィックスでは、ベクターグラフィックスを使用することが次第に一般的になってきている。当技術分野で知られているように、ベクターグラフィックスがラスターグラフィックスに勝る重要な利点の1つが、解像度に依存しない画像、つまり、本質的に画質を落とすことなく無制限にスケーリング可能な画像を構成できることである。例えば、TrueType(商標)などのコンピュータフォント内の個々の特徴付け要素は、典型的には、ベクターイメージとして格納される。
【０００３】
ベクターグラフィックスは、個別に定義された幾何学的オブジェクトの使用に基づいており、また経路を形成するようにアンカー点で連結される、1つまたは複数の線分、例えば、直線または曲線(二次(ベジエ)曲線、楕円弧、三次(ベジエ)曲線など)によって典型的には記述される。
【０００４】
ベクターグラフィックスオブジェクト/経路は、「ユーザー空間」と通例称される空間内で定義され、操作される。しかし、ベクターグラフィックスオブジェクト/経路をビデオディスプレイまたはプリンタに出力するために、ユーザー空間内で定義されたオブジェクト/経路は、画面上に表示するのに適した形式、またはプリンタに出力するのに適した形式に変換される必要がある。この変換は、典型的には、ユーザー空間内で定義されたオブジェクト/経路を、オブジェクト/経路が表示される出力(例えば、画面またはプリンタ)のパースペクティブ(幾何学的形状)に対応する、通例「サーフェス空間」と称される、他の空間に投影することを伴う。ユーザー空間とサーフェス空間との間の変換は、典型的には、「ユーザーサーフェス変換」と称される。
【０００５】
ベクターグラフィックスオブジェクト/経路は、いったんサーフェス空間表現に変換された後、レンダリングされる。
【０００６】
このプロセスは、当技術分野で知られているように、典型的には、オブジェクト/経路のサーフェス空間表現を覆う、三角形などの1つまたは複数のグラフィックスプリミティブを生成するステップと、プリミティブ内の複数のサンプリング点に対しプリミティブをラスター処理し、その後、サンプリング点をサンプリングしてそれぞれのサンプリング点が投影されたオブジェクト/経路内に入るかどうかを判定するステップを伴う。この判定に基づき、オブジェクト/経路を正しく表示できるように適宜、複数のサンプリング点に対し赤色、緑色、および青色(RGB)値および「アルファ」透明度値などのデータが割り当てられる。これらのプロセスは、一般に、ラスター処理およびシェーディング(陰影付け)とそれぞれ称される。
【０００７】
(3Dグラフィックスの文献では、「ラスター処理」という用語は、ときには、サンプル位置およびシェーディングへの両方のオブジェクト変換を指すために使用される。しかし、ここでの「ラスター処理」は、サンプリング点アドレスのみへのオブジェクトデータの変換を指すために使用される。)
【０００８】
これらのプロセスは、典型的には、当技術分野で知られているように、グラフィックス処理オペレーション(シェーディングなど)の実行対象となる「フラグメント」と通常称される個別のグラフィック構成要素を使用してサンプリング点を表現することにより実行される。したがって、これらのフラグメントは、実際に、(グラフィックスパイプラインを通過する)グラフィックス処理システムによって処理されるグラフィック構成要素である。
【０００９】
それぞれのフラグメントは処理されるシーンの1つの「ピクセル」に事実上相当するものと考えるのは道理にかなっている。それぞれのフラグメントは、単一の、または複数のサンプリング点に対応しうる。それぞれのフラグメントは、最終的な表示(出力)に含まれる単一ピクセル(画素)に対応しうる(ピクセルは、最終的な表示内において特異点であるため、グラフィックスプロセッサのオペレーション対象のフラグメントと表示のピクセルとの間に1対1のマッピングがありうる)。しかし、より典型的には、フラグメントと表示ピクセルとの間に1対1の対応関係がない場合、例えば、縮小などの特定の形式の後処理が最終画像を表示するのに先立ってレンダリングされた画像に対し実行される場合もあるであろう。
【００１０】
ベクターグラフィックスにおいてよく見られる2種類のオブジェクトは、「塗りつぶし」オブジェクトとストロークオブジェクトである。塗りつぶすプロセスは、色、勾配、パターン、または画像からなる単一ブロックをオブジェクトまたは閉路内の領域に適用することを伴う。その一方、ストローク操作のプロセスは、事実上、経路にそって特定の幅の線形のペン先をドラッグすることにより幅を経路に付け加えるものとして考えることができる。より具体的には、ペン先の中心点は、その経路を辿り、ペン先は、経路に常に垂直になるように向けられる。したがって、それと同等のことだが、ストローク経路の境界も、経路上のある1つの点まで引くことができる、(幅wのストローク経路に対して)長さが(せいぜい)w/2である、経路に対して垂直な直線の始点の集合によって定義することができる。
【００１１】
ストローク経路のレンダリング、特にストローク曲線のレンダリングは、従来から、CPUに大きな負荷がかかるオペレーションである。さらに、ストローク曲線のレンダリングは、多くの場合、状況によってはストローク曲線の第1のセクションがストローク曲線の第2のセクションと重なり合うことがあるという点で面倒な作業といえる。この状況は、当技術分野では「自己重複」と通常称され、中心曲線の曲率半径がストローク幅の半分より小さい場合に生じる。
【００１２】
ストローク曲線をレンダリングする一般的な方法の1つは、CPU上で曲線を複数の個別の直線または塗りつぶされた経路に細分し、次いでそれぞれを別々にレンダリングする方法である。ストローク曲線をレンダリングするためによく使用される方法としては、ほかに、曲線レンダリング専用のハードウェアを使用する方法がある。
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかし、出願人は、ストローク経路、および特に、ストローク曲線をレンダリングするためのさらなる、また改善された、技術を提供する余地があると確信している。
【課題を解決するための手段】
【００１４】
本発明の第1の態様によれば、ストローク曲線をレンダリングすることを目的とする少なくとも2つのプロセスを使用することができるグラフィックス処理システムで表示するストローク曲線をレンダリングする方法が提供され、この方法は、
定義済み空間内で定義されている入力ストローク曲線を受け取るステップと、
入力ストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかを判定するステップと、
その判定結果に基づき、グラフィックス処理システムのストローク曲線をレンダリングするための第1のプロセスおよび/またはグラフィックス処理システムのストローク曲線をレンダリングするための第2のプロセスを使用して表示する入力ストローク曲線をレンダリングするステップとを含む。
【００１５】
本発明の第2の態様によれば、ストローク曲線をレンダリングすることを目的とする少なくとも2つのプロセスを使用することができるグラフィックス処理システムで表示するストローク曲線をレンダリングするための装置が実現され、この装置は、
定義済み空間内で定義されている入力ストローク曲線を受け取るための手段と、
入力ストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかを判定するための手段と、
その判定結果に基づき、グラフィックス処理システムのストローク曲線をレンダリングするための第1のプロセスおよび/またはグラフィックス処理システムのストローク曲線をレンダリングするための第2のプロセスを使用して表示するストローク曲線をレンダリングするための手段とを備える。
【００１６】
本発明では、グラフィックス処理システムは、ストローク曲線をレンダリングするための少なくとも2つの(異なる)技術が利用可能になっており、入力曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を持つかどうかに応じて与えられた入力ストローク曲線をレンダリングするために、これらの技術のうちの一方または他方または両方が使用される。言い換えると、ストローク曲線をレンダリングする方法は、曲線の決定された特性に基づくということである。
【００１７】
したがって、本発明は、領域が特定の1つまたは複数の所定の特性を有するかどうかに基づき受け取ったストローク曲線の領域をレンダリングするための複数の可能なプロセスのうちの1つまたは複数を選択するものとして事実上考えられることは理解されるであろう。
【００１８】
したがって、本発明の第3の態様によれば、ストローク曲線をレンダリングすることを目的とする複数のプロセスを使用することができるグラフィックス処理システムで表示するストローク曲線をレンダリングする方法が提供され、この方法は、
定義済み空間内で定義されている入力ストローク曲線を受け取るステップと、
入力ストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかを判定するステップと、
領域が特定の1つまたは複数の特性を有するものと判定されるかどうかに基づき入力ストローク曲線の領域をレンダリングするために使用されるグラフィックス処理システムの1つまたは複数のプロセスを選択するステップとを含む。
【００１９】
本発明の第4の態様によれば、ストローク曲線をレンダリングすることを目的とする複数のプロセスを使用することができるグラフィックス処理システムで表示するストローク曲線をレンダリングするための装置が実現され、この装置は、
定義済み空間内で定義されている入力ストローク曲線を受け取るための手段と、
入力ストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかを判定するための手段と、
領域が特定の1つまたは複数の特性を有するものと判定されるかどうかに基づき入力ストローク曲線の領域をレンダリングするために使用されるグラフィックス処理システムの1つまたは複数のプロセスを選択するための手段とを備える。
【００２０】
以下でさらに説明されるように、出願人は、ストローク曲線が特定の特性を有する1つまたは複数の領域、例えば、自己重複領域を含む場合に、必ず正しくレンダリングされるように曲線のその領域の少なくとも一部をレンダリングするときに格別の注意を払う必要がありうることを認識している。しかし、このより慎重に行われる処理は、自己重複のないストローク曲線の領域に対しては必要ないと思われる。
【００２１】
したがって、1つのオプションとして、例えば自己重複領域が曲線内にある可能性を考慮するためストローク処理されるすべての入力曲線に対し特定のより厳格な処理技術を使用することも可能であろうが、出願人は、そのような厳格な処理が不要となるような受け取ったストローク曲線および/または受け取ったストローク曲線の一部を識別することができれば、それらの曲線および/またはそのような曲線の一部に、潜在的に処理量または負担の少ない他の処理技術を使用することが可能になり、そのため、グラフィックス処理システムにおいてストローク曲線をレンダリングするためのより効率的で効果的なメカニズムを実現することができると認識している。
【００２２】
本発明は、ストローク曲線をレンダリングする2つ以上の可能な方法、例えば、また好ましくは、可能な、および/または予想される入力ストローク曲線の与えられた集合を正しくレンダリングすることができる第1のレンダリングプロセス、および第1のレンダリングプロセスが正しくレンダリングすることができる可能な、および/または予想される入力ストローク曲線の集合の部分集合のみを正しくレンダリングすることができるが、大量の処理を必要としない第2のレンダリングプロセスを用意し、次いで、入力ストローク曲線の決定された(1つまたは複数の)特性に基づき与えられた入力ストローク曲線をレンダリングするためにこれらの技術のうちのどれを使用するかを選択することによりこれを実現する。
【００２３】
本発明のグラフィックス処理システムへの入力として受け取られるストローク曲線は、ユーザー空間として知られる空間内で典型的には定義され、任意の好適な、望ましい方法で定義されうる。例えば、また好ましくは、グラフィックス処理システムは、曲線の位置および曲線に関係するパラメータなどのストローク曲線を定義する情報を受け取ることができる。
【００２４】
受け取ったストローク曲線は、好ましくは、中心曲線および関連するストローク幅によってユーザー空間内で定義される。ストロークの中心曲線は、制御始点と制御終点との間に引かれる曲線の種類を示す情報とともに、典型的には始点、終点、および1つまたは複数の中間点を含むユーザー空間内の複数の制御点の位置によって好ましくは定義される。例えば、また好ましくは、ストロークの中心曲線は、二次ベジエ曲線(単一の中間制御点を必要とする)、三次ベジエ曲線(2つの中間制御点を必要とする)、および楕円弧のうちの1つを含む。
【００２５】
したがって、好ましい一実施形態では、ストローク曲線を受け取るステップまたは受け取るための手段は、ユーザー空間内の複数の制御点の位置、曲線の種類を示す情報、およびユーザー空間内のストローク幅を受け取るステップを含む。
【００２６】
グラフィックス処理システムに入力されるストローク曲線は、例えば曲線を描画する必要があるアプリケーションによってユーザー空間内で最初に定義されるようなストローク曲線であってもよい。しかし、入力ストローク曲線は、ユーザー空間内で定義されている他の曲線から派生する曲線とすることも可能であろう。例えば、入力ストローク曲線は、他の(または初期)曲線を、本発明によって受け取られるユーザー空間形式に変換することにより導出されたものであってもよいとも考えられる。
【００２７】
同様に、入力ストローク曲線は、ユーザー空間内で定義されている初期曲線を細分することにより導出することができると考えられる。例えば、また以下でされに説明される理由から、三次曲線または楕円弧は、複数の二次曲線に細分することができ、そうしてから、本発明の方法でレンダリングされる。
【００２８】
したがって、特に好ましい一実施形態では、本発明は、さらに、定義済み空間(例えばユーザー空間)内で定義されているストローク曲線を複数のストローク曲線セグメントに細分し、それらの複数のストローク曲線セグメントのうちの1つまたは複数のセグメントが、その後処理されレンダリングされる定義済み空間内で定義される入力ストローク曲線を形成するようにするステップまたはそのための手段を備える。
【００２９】
したがって、文脈上問題がない限り、本明細書で言及する入力ストローク曲線は、本発明のレンダリングプロセスに「入力」される曲線を指すことが意図されており、その入力曲線は、例えば、注目するアプリケーションによって最初に定義されているような曲線、またはその曲線の部分セクションなどの初期「ユーザー定義」曲線から導出された曲線としてもよいことに留意されたい。
【００３０】
上述のように、本発明は、入力ストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかを判定するステップまたは判定するための手段を備える。この1つまたは複数の特性は、例えば、入力ストローク曲線をどのようにレンダリングするかを決定する(入力ストローク曲線のレンダリングにどの(1つまたは複数の)レンダリングプロセスを使用すべきかを決定する)ことを可能にする好適な、望ましい任意の特性とすることができる。本質的に、これは、入力ストローク曲線が保持できる、入力ストローク曲線の処理の仕方を示す与えられた1つまたは複数の特性の存在(例えば、少なくとも一部は、より厳格な、例えばより多くの処理を必要とする方法で処理する必要があるかどうか)をテストすることを目的としている。
【００３１】
特に好ましい一実施形態では、入力ストローク曲線がテストされる特定の1つまたは複数の特性は、入力ストローク曲線が潜在的に1つまたは複数の自己重複領域を含むかどうかである。
【００３２】
上述のように、ストローク曲線の自己重複領域は、ストローク曲線がそれ自体に重なるぐらいに中心曲線が曲がる(湾曲する)領域である(つまり、ストローク曲線の一領域がストローク曲線の他の領域に重なる(その中に侵入する))。このような自己重複領域は、表示するためストローク曲線をレンダリングするときに問題を引き起こす可能性があり、また典型的には問題を引き起こす。したがって、そのような領域を識別することにより、レンダリングするストローク曲線の処理は、自己重複領域の有無を考慮するように手直しできる。
【００３３】
入力ストローク曲線が、特定の1つまたは複数の特性(自己重複しているなど)を有する1つまたは複数の領域を有しているかどうかの判定は、望み通りに実行されうる。しかし、特に好ましい一実施形態では、この判定を行うために所定のテストが使用される。このテストは、特定の選択された1つまたは複数の特性の存在を識別することができるべきであるが、識別するために好適な方法で構成され、実行されうる。
【００３４】
したがって、本発明は、事実上、特定の1つまたは複数の特性について入力ストローク曲線をテストし、次いで、そのテスト結果に基づき処理を目的としてストローク曲線を分類するものとみなせる。
【００３５】
したがって、本発明の第5の態様によれば、ストローク曲線をレンダリングすることを目的とする複数のプロセスを使用することができるグラフィックス処理システムで表示するストローク曲線をレンダリングする方法が提供され、この方法は、
定義済み空間内で定義されている入力ストローク曲線を受け取るステップと、
入力ストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかを判定するステップと、
この判定結果に基づきストローク曲線をレンダリングすることを目的として入力ストローク曲線を分類するステップとを含む。
【００３６】
そこで、本発明の第6の態様によれば、ストローク曲線をレンダリングすることを目的とする複数のプロセスを使用することができるグラフィックス処理システムで表示するストローク曲線をレンダリングするための装置が実現され、この装置は、
定義済み空間内で定義されている入力ストローク曲線を受け取るための手段と、
入力ストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかを判定するための手段と、
この判定結果に基づきストローク曲線をレンダリングすることを目的として入力ストローク曲線を分類するための手段とを備える。
【００３７】
入力ストローク曲線が、特定の1つまたは複数の特性を有する1つまたは複数の領域を有するかどうかの判定は、その曲線を全体としてテストすることにより(曲線は全体として(1つまたは複数の)特性を有する場合に(1つまたは複数の)特性を有する少なくとも1つの領域を含んでいなければならないということに基づき)実行することが可能である。しかし、特に好ましい一実施形態では、この判定は、(1つまたは複数の)特性を有する受け取ったストローク曲線の特定の領域を識別できるようにするような判定である。
【００３８】
判定される曲線の特定の特性が、自己重複する領域を有しているかどうかということである場合、特に好ましい一実施形態では、この判定は、曲線の曲率半径が入力ストローク曲線(ユーザー空間内で定義されているような)のストローク幅の半分より小さい入力ストローク曲線の領域(中心曲線上の複数の点)があるかどうかを判定するステップを含む。このテストでは、ストローク曲線に自己重複領域があるかどうかを判定することができるが、それは、出願人が、特定の受け取ったストローク曲線について、自己重複領域が、曲率半径がストローク幅の半分よりも小さいストロークの中心曲線上の点において生じることを認識しているからである。それとは逆に、通常の、つまり、非自己重複領域は、曲率半径がストロークの幅の半分より大きい中心曲線上の点において生じる。
【００３９】
したがって、テストされる所定の特性が、受け取ったストローク曲線が自己重複領域を有しているかどうかである好ましい実施形態では、入力ストローク曲線が1つまたは複数の自己重複領域を含むかどうかを判定するステップまたは判定するための手段は、好ましくは、受け取ったストローク曲線の中心曲線上の1つまたは複数の点における曲率半径を決定し、決定された曲率半径をストローク幅の半分と比較するステップまたは手段を含む。
【００４０】
曲率半径は、好ましくは、その曲線上にのみある1つまたは複数の特定の、好ましくは選択された点において決定される。例えば、特に好ましい一実施形態では、曲率半径は、受け取ったストローク曲線に関連付けられている、受け取ったストローク曲線の曲率が最大となる1つまたは複数の点(例えば、入力ストローク曲線がストローク二次曲線である場合の中心曲線の天底)、受け取ったストローク曲線の(制御)始点、および受け取ったストローク曲線の(制御)終点のうちの少なくとも1つ、好ましくはすべてで決定される。
【００４１】
(これから理解されるように、ストローク曲線の曲率が最大となる(複数)点は、定義されているストロークの中心曲線上(つまり、入力ストローク曲線の(制御)始点と(制御)終点との間の位置)にあるか、または定義されているストロークの中心曲線の補外部分(つまり、入力ストローク曲線の(制御)始点および(制御)終点の外側にある位置)にあるものとしてもよい。しかし、両方の場合において、曲率が最大となる(1つまたは複数の)点の位置は、好適な、所望の方法で入力ストローク曲線から適宜導出できる。)
【００４２】
上記の点における曲率半径を決定することにより、これに応じて、曲率が最大となる(1つまたは複数の)点および/または(制御)始点および/または(制御)終点が、自己重複領域に関連付けられているかどうか、したがって、受け取ったストローク曲線が全体として、自己重複領域を有するかどうかの判定を行うことができる。
【００４３】
当業者であれば理解するように、受け取ったストローク曲線の中心曲線の曲率は、常に、曲率が最大となる(1つまたは複数の)点から(例えば、二次曲線の天底から)離れている中心曲線上の点ほど小さくなる。したがって、曲率が最大となるすべての点が、ストローク幅の半分より大きい曲率半径を有すると判定された場合、入力ストローク曲線は、自己重複領域を持たないことになる(曲率が最大の点が、受け取ったストローク曲線上にあるか、または外側にあるかに関係なく)。(したがって、入力ストローク二次曲線について、天底がストローク幅の半分より大きい曲率半径を有すると判定された場合、入力曲線は、自己重複領域を持たない。)
【００４４】
しかし、単純に曲率が最大であるすべての点(例えば、二次曲線の天底)がストローク曲線の幅の半分より小さい曲率半径を有すると判定されるからといって、必ずしも、入力ストローク曲線が自己重複領域を有することにならないことも理解されるであろう。
【００４５】
例えば、受け取ったストローク曲線が、ストローク二次曲線である場合に、天底が定義されているストローク曲線内にないときに(つまり、始点と終点の外にある曲線上の補外位置であるときに)、ストローク曲線は、(制御)始点と(制御)終点の一方または両方がストローク幅の半分より小さい曲率半径を有する場合にのみ自己重複領域を有する。したがって、(制御)始点と(制御)終点の両方が、ストローク幅の半分より大きい曲率半径を有する場合、入力ストローク曲線は、天底がストローク幅の半分より大きい曲率半径を有するとしても自己重複領域を持たない。逆に、天底が定義されているストローク曲線内にあり、ストローク幅の半分より小さい曲率半径を有する場合には、入力ストローク曲線は、常に、少なくとも1つの自己重複領域(天底の周りの)を有すると理解されるであろう。
【００４６】
したがって、特に好ましい一実施形態では、これらの情報の1つまたは複数またはすべて、つまり、曲率が最大である(1つまたは複数の)点、始点および/または終点が、自己重複領域に関連付けられているかどうか、および曲率が最大である(1つまたは複数の)点がストローク曲線の始点と終点との間にあるかどうかが判定され、好ましくは、その後、グラフィックス処理システムが受け取った入力ストローク曲線を複数の定義済みまたは所定のストローク曲線のうちの1つの曲線であると分類(識別)するために使用される。
【００４７】
したがって、受け取ったストローク曲線がストローク二次曲線である本発明の実施形態では、入力ストローク曲線は、好ましくは、天底、(制御)始点、および(制御)終点の曲率半径がストローク幅の半分より小さいかどうか(ユーザー空間内で定義されているように)、および天底がストローク曲線の(制御)始点と(制御)終点との間にあるかどうかの4つの情報のうちの1つまたは複数またはすべてを使用して複数の定義済みまたは所定のストローク曲線のうちの1つの曲線として分類(識別)される。
【００４８】
(これは、典型的には、入力ストローク二次曲線を分類(識別)するためには4つすべての情報を使用する必要がある場合であるが、出願人は、これは常にそうであるとは限らないことを認識している。例えば、天底の曲率半径がストローク幅の半分より大きい場合、2つの端点がストローク幅の半分より小さい曲率半径を有するかどうかを判定する必要はない(有しないことが本来的だからである)。同様に、2つの端点の曲率半径が、ストローク幅の半分より小さい場合、天底がストローク幅の半分より小さい曲率半径を有するかどうかを判定する必要はない(そうすることが本来的だからである)。)
【００４９】
上述のように、グラフィックス処理システムが受け取ったストローク曲線が、好ましくは、複数の定義済み、または所定のストローク曲線のうちの1つの曲線として分類(識別)された場合、好ましくは、これらの複数の定義済み、または所定のストローク曲線は、(i)単一の通常(つまり、非自己重複)領域、(ii)単一の自己重複領域、または(iii)両方の混合、つまり、少なくとも1つの通常領域と少なくとも1つの自己重複領域のうちのいずれかからなる。
【００５０】
例えば、入力ストローク曲線がストローク二次曲線である好ましい実施形態について、受け取ったストローク曲線は、テストされる3つすべての点、つまり、天底、(制御)始点、および(制御)終点が、ストローク幅の半分より大きい曲率半径を有する場合、または(制御)始点および(制御)終点が、ストローク幅の半分より大きい曲率半径を有し、天底が定義された曲線の外にある場合に、単一の通常領域からなる。受け取ったストローク曲線は、(制御)始点および(制御)終点が、ストローク幅の半分より小さい曲率半径を有する場合に、単一の自己重複領域からなる(この場合常にストローク幅の半分より小さい曲率半径を有する天底が、定義済み曲線の内にあるのか、外にあるのかに関係なく)。他のすべての入力ストローク曲線は、自己重複領域と通常領域の混合からなる。
【００５１】
入力ストローク曲線が、例えば、上述のようなテストのうちの1つまたは複数を、また好ましくは、入力曲線がストローク二次曲線である場合に上記の4つのテストの1つまたは複数またはすべてを実行することにより分類(識別)された後、受け取ったストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域(例えば、および好ましくは、1つまたは複数の自己重複領域)を含むかどうかが判明している。次いで、この判定結果に応じて1つまたは複数の好適なプロセス(複数の利用可能なプロセスから選択される)を使用してストローク曲線がレンダリングされる。
【００５２】
しかし、(1つまたは複数の)所定の特性を持つと判定されている領域は、必ずしも、単一のレンダリングプロセスを使用してレンダリングされるわけではないことに留意されたい。例えば、ストローク曲線の領域の第1の部分は第1のプロセスを使用してレンダリングされ、領域の第2の部分は第2の異なる(例えば、処理量の少ない)プロセスを使用してレンダリングされうる。言い換えると、特定の(1つまたは複数の)特性を有する入力ストローク曲線の領域の識別は、単純に、識別された領域の少なくとも一部をレンダリングするために、異なるレンダリングプロセスが潜在的に必要になる場合ある(または潜在的に使用される可能性がある)ことを示す指標として働く。
【００５３】
したがって、本発明は、好ましくは、さらに、受け取ったストローク曲線が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうか(例えば、また好ましくは、受け取ったストローク曲線が1つまたは複数の自己重複領域を含むかどうか)を判定する前記ステップに基づき入力ストローク曲線を2つ以上の部分に細分するステップまたは細分するための手段を備える。言い換えると、入力ストローク曲線は、好ましくは、曲線の任意の領域が特定の選択された(1つまたは複数の)特性を有することが判明しているかどうかに基づき適宜複数の部分に細分されるということである。
【００５４】
(ここで、定義済み空間(ユーザー空間)内で定義されているような受け取ったストローク曲線を複数のストローク曲線セグメントに細分するステップは、上述のように、好ましくは、受け取ったストローク曲線(または受け取ったストローク曲線セグメント)を、受け取ったストローク曲線(または受け取ったストローク曲線セグメント)が特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかを判定する前記ステップに基づき2つ以上の部分に細分するステップの前に実行されることに留意されたい。)
【００５５】
その後、入力ストローク曲線が細分された結果であるそれぞれの部分が、適宜、好適な、所望の(選択された)技術を使用してレンダリングされる。例えば、入力ストローク曲線が、2つの部分に細分された場合、第1のレンダリングプロセスは、好ましくは、それらの部分のうちの1つの部分をレンダリングするために使用され、第2の(異なる)プロセスは、好ましくは、他の部分をレンダリングするために使用される。
【００５６】
これから理解されるように、入力ストローク曲線は、例えば、入力曲線が特定の(1つまたは複数の)特性を有する1つまたは複数の領域を含むことが判明しているとしても、必ずしもこの方法で細分される必要があるわけではない。例えば、必要ならば実際には異なるレンダリングプロセスを適用することが可能な異なる部分に曲線を分割することが可能であるとしても、単純に入力曲線全体をレンダリングするために同じレンダリングプロセスを使用することが好ましい場合がある。
【００５７】
同様に、入力ストローク曲線は、単一の通常領域からなるものとして識別することができ、したがって、典型的には、上述のように、同様にストローク曲線をレンダリングすることができる他のプロセスに比べて処理量が少ないプロセスなどの単一のレンダリングプロセスのみを使用してレンダリングされる。
【００５８】
さらに、入力ストローク曲線が、1つまたは複数の自己重複領域を含むものとして識別され、それにより、典型的には、少なくとも2つのレンダリングプロセスを使用してレンダリングされる場合であっても、入力曲線は、単一のレンダリングプロセスのみを意味するいくつかの他の特性を持つことができ、例えば、利用可能な少なくとも2つの処理量の少ないレンダリングプロセスを使用するだけでよい。例えば、入力ストローク曲線が、2つの通常領域を両脇に配置している(2つの領域の間にサンドイッチ状に挟まれている)自己重複領域からなる場合、出願人は、自己重複領域が2つの通常領域の(外側)末端を超えて広がらない場合に、単一の、例えば、処理量の少ないレンダリングプロセスを使用して曲線全体をレンダリングすることができることを認識している。
【００５９】
したがって、本発明は、好ましくは、さらに、1つまたは複数の定義済みまたは所定の基準に基づきレンダリングすることを目的として入力ストローク曲線が2つ以上の部分に細分されるかどうかを判定するステップまたは判定するための手段を備える。次いで、入力ストローク曲線は、前記判定結果に基づき2つ以上の部分に細分される。
【００６０】
特に好ましい一実施形態では、入力ストローク曲線が2つ以上の部分に細分されるのは、第1のレンダリング技術を使用してストローク曲線の複数の部分のうちの1つの部分をレンダリングすることができ、その一方で、前記第1の技術と異なる、しかも典型的にはグラフィックス処理システムにかける処理の負担が少ない第2のレンダリング技術を使用してストローク曲線の他の部分、例えば隣接する(端を接する)部分をレンダリングすることができる場合である。
【００６１】
言い換えると、入力ストローク曲線が細分されるかどうかという問題は、好ましくは、少なくとも当初において、入力曲線が定義済みまたは所定のストローク曲線のうちのどちらであるものとして分類(識別)されるかに基づく。次いで、入力曲線に関連付けられている他の基準がテスト(判定)され、これにより、レンダリングすることを目的として曲線を細分するかどうかに関する当初の判定が正しいかどうか、またはその代わりに、例えば、曲線を全く細分しないことにより、または曲線を細分する方法を修正(調整)する(例えば、曲線が細分された結果である部分の数を変更するか、または曲線が細分された結果である部分の「形状」を変更する)ことにより、修正される必要があるかどうかを確認することができる。
【００６２】
例えば、好ましい一実施形態では、入力ストローク曲線が細分されるかどうか(または細分する方法)を確認する他の(追加の)基準は、上述のように、2つの通常領域の間に配置されている、自己重複領域が2つの通常領域の(外側)端部を超えて広がるかどうかを判定するステップを含むことができる。
【００６３】
入力ストローク曲線が、上述の方法で2つ以上の部分に細分される場合、ストローク曲線は、任意の好適な、所望の方法で細分できる。
【００６４】
例えば、特定の(1つまたは複数の)特性を有すると判定された領域、例えば、自己重複領域と特定の(1つまたは複数の)特性を有していないと判定された領域、例えば、通常領域との間の境界のところで、入力ストローク曲線を細分することができる。
【００６５】
したがって、入力ストローク曲線を処理するため2つ以上の部分に細分するステップまたは細分するための手段は、好ましくは、さらに、特定の1つまたは複数の特性を有すると判定された1つまたは複数の領域のうちの少なくとも1つの、および好ましくはすべての、境界を決定するステップまたは決定するための手段を備える。
【００６６】
したがって、例えば、受け取ったストローク曲線が、選択された1つまたは複数の特性を有していない第2の領域と接する探索されている選択された1つまたは複数の特性を有する第1の領域、例えば、通常領域と接する自己重複領域を含むと判定された場合、第1の領域と第2の領域との間の境界が識別され、ストローク曲線は、少なくとも一部は決定された境界にそって、第1のレンダリングプロセスを使用してレンダリングされる第1の(例えば、自己重複)領域に関連付けられている第1の部分と第2の異なるレンダリングプロセス(処理量の少ないレンダリングプロセス)を使用してレンダリングされる第2の(例えば、通常)領域に関連付けられている第2の部分とに細分される。
【００６７】
1つまたは複数の識別された領域の境界は、好適な、所望の任意の方法で決定されうる。しかし、テストされる所定の特性が、受け取ったストローク曲線が自己重複領域を有しているかどうかである好ましい実施形態では、1つまたは複数の自己重複領域の境界は、好ましくは、曲率半径がストローク幅の半分に等しい入力ストロークの中心曲線上の点(または複数の点)を決定することにより決定される。
【００６８】
好ましい一実施形態では、入力ストローク曲線は、ストロークの中心曲線にそって細分できる。例えば、受け取ったストローク二次曲線が、単一の自己重複領域を構成すると判定される場合(そして天底が定義済み曲線の(制御)始点と(制御)終点との間にない場合)、好ましい一実施形態では、ストローク曲線は2つの部分に細分される。第1の部分は、中心曲線の上にあるストローク曲線を境界とする領域をなし、第2の部分は、中心曲線の下にあるストローク曲線を境界とする領域をなす。
【００６９】
(したがって、ストローク曲線のそれぞれの部分の境界は(その細分の後に)、好ましくは、ストロークの中心曲線の少なくとも一部および/またはストロークの外側境界の少なくとも一部および/または選択された(1つまたは複数の)特性を有すると判定されたストローク曲線の領域のうちの少なくとも1つの境界の少なくとも一部によって定義されることが認識される。)
【００７０】
ストローク曲線(またはストローク曲線が上述のように細分される場合にはストローク曲線の一部分)をレンダリングするためにグラフィックス処理システムで利用可能なレンダリングプロセスは、好適な、所望の任意のレンダリング技術とすることができる。
【００７１】
上述のように、グラフィックス処理システムによる選択および使用に利用可能なレンダリング技術は少なくとも2つあるであろうが、利用可能なレンダリング技術は2つより多いものとすることができ、また好ましくは2つより多い。
【００７２】
レンダリングプロセスはそれぞれ、好ましくは、グラフィックス処理システムに場合によっては入力されうるストローク曲線の与えられた集合または範囲を(正しく)レンダリングすることができる。最も好ましくは、利用可能なストローク曲線レンダリングプロセスのうちの少なくとも2つのプロセスは、正しくレンダリングできる(いくつかの形態の)ストローク曲線(の集合)に関して互いに異なる。例えば、また上述のように、好ましくは1つのプロセスは、特定の1つの特性を有する(または有しない)曲線のみをレンダリングすることができるが、他のレンダリングプロセスは、正しくより多くの形態のストローク曲線をレンダリングすることができる。
【００７３】
したがって、システムで利用可能な1つのレンダリングプロセスは、好ましくは、システムで利用可能な他のレンダリングプロセスに比べて、可能な(いくつかの形態の)ストローク曲線のより大きな集合またはより広い範囲を正しくレンダリングすることができる。
【００７４】
一実施形態では、システムで利用可能なレンダリングプロセスのうちの2つ以上のプロセスは、可能なストローク曲線(または可能なストローク曲線の一部)の異なる明確に区別できる部分集合を(正しく)レンダリングすることのみができる。例えば、グラフィックス処理システムに、利用可能なレンダリングプロセスが2つしかない場合、第1の特定の1つの特性を有する1つまたは複数の領域を有すると判定されたストローク曲線(またはその一部)は、複数のレンダリングプロセスのうちの1つのプロセスを使用してレンダリングされることが必要になることがあるが(他のレンダリングプロセスだと、ストローク曲線を適切にレンダリングすることができないので)、第1の特定の特性を有する(または、例えば、第1のと異なる第2の特定の特性を有する)1つまたは複数の領域を有していないと判定された他のストローク曲線(またはその一部)は、適切にレンダリングが行われるように他のレンダリングプロセスを使用してレンダリングされることが必要になることがある。
【００７５】
好ましい一実施形態では、システムで利用可能なレンダリングプロセスのうちの2つ以上のプロセスはそれぞれ、可能なストローク曲線の少なくとも部分集合を(正しく)レンダリングすることができ、可能なストローク曲線のそれらの部分集合は、少なくとも部分的に、また好ましくは全体が、重なり合う。好ましくは、いくつかの(形態の)ストローク曲線(ストローク曲線の与えられた部分集合)、またはその一部、例えば、特定の1つの特性を有する(または有していない)1つまたは複数の領域を含むストローク曲線を(正しく)レンダリングすることのみができる第1のレンダリングプロセス、およびこれらのいくつかのストローク曲線(第1のレンダリングプロセスが正しく取り扱うことができるストローク曲線の与えられた部分集合)を、(例えば、また好ましくは、ストローク曲線が特定の特性を有している領域を含むか含まないかに関係なく)システムに入力することが可能な他の追加の(いくつかの形態の)ストローク曲線と一緒に(正しく)レンダリングすることができる第2のレンダリングプロセスがある。
【００７６】
上述のように、利用可能なレンダリングプロセスのうちの1つのプロセスがグラフィックス処理システムに負わせる処理量が、利用可能なストローク曲線レンダリングプロセスのうちの他方のプロセスまたは別のプロセスの場合に比べて少ないことが特に好ましい。したがって、好ましくは、利用可能なレンダリングプロセスのうちの1つのプロセスは、利用可能なレンダリングプロセスのうちの別のプロセスに比べて負担になる処理を必要とする。例えば、ストローク曲線(またはその一部)の特定の部分集合をレンダリングすることにのみ適しているとしてもよい第1のレンダリングプロセス、およびより「一般的な」プロセスであり、ストローク曲線(またはその一部)のより大きな集合をレンダリングするのに適しているが、より負担の大きな処理を必要とする第2のレンダリングプロセスがありえ、また好ましくは、ある。
【００７７】
したがって、好ましくは、2つ以上のレンダリングプロセスがレンダリングするのに適している(適切にレンダリングすることができる)ストローク曲線の範囲に関して部分的にまたは全体的に重なる一実施形態では、他の技術を使用してレンダリングすることも可能なストローク曲線をレンダリングするときに、レンダリングプロセスのうちの一方または他方のプロセスがグラフィックス処理システムにかける処理の負担が軽くなる、つまり、処理量が少なくなる。したがって、また上述のように、これらの第1または第2のレンダリングプロセスのうちのいずれかを使用してシステムが受け取る特定のストローク曲線(またはストローク曲線の一部)を適切にレンダリングすることができるこのような場合において、好ましくはこれらのプロセスのうちの1つのプロセスは、他のプロセスに比べて処理量の少ない方法でストローク曲線(または曲線部分)をレンダリングすることができ、またストローク曲線(または曲線部分)をレンダリングするために好ましくは選択され使用されるのがこのプロセスである。
【００７８】
グラフィックス処理システムで利用可能な異なるレンダリングプロセスは、例えば、その正確さまたは精度に関して異なる可能性がある。しかし、本発明のグラフィックス処理で使用するために利用可能な別のレンダリングプロセスは、必ずしも同一ではないが類似のレベルの数値的(計算)精度を、これらの精度レベルが適している(これらの精度レベルを使用して適切にレンダリングできる)ストローク曲線(またはその一部)をレンダリングするときに有することが望ましい。言い換えると、2つの利用可能なレンダリングプロセスを使用してストローク曲線が(正しく)レンダリングされうる場合に、その結果得られるレンダリングされたストローク曲線は、2つのレンダリング技術のうちのどちらが使用されようと、レンダリング「品質」に関して実質的に類似している。そこで、異なるレンダリングプロセスは、最も好ましくは、これらのプロセスが正しく取り扱うことができる曲線を処理するときのその精度に関してではなく、これらのプロセスが正しく取り扱うことができるストローク曲線の範囲に関して異なる。
【００７９】
グラフィックス処理システムで使用するために利用可能な異なるレンダリングプロセスのうちの両方のプロセス、または2つよりも多くのプロセスが、同じ一般的様式で動作するが、例えば、これらのプロセスがどれだけの細部にわたって、および/またはどれだけ徹底して適用されるかに関しては異なる可能性がある。例えば、以下でさらに詳しく説明されるように、レンダリングプロセスは、1つまたは複数の基準曲線に関係する所定の情報(格納済みである)を検索することができ、また2つ以上のプロセスは、受け取ったストローク曲線(またはその一部)をレンダリングするために検索される所定の情報の量に関して異なる。
【００８０】
異なるレンダリングプロセスのうちの両方のプロセス、または2つよりも多いプロセスが、これらのプロセスが動作する仕方に関して完全に異なる可能性もある。例えば、これらのレンダリングプロセスのうちの一方のプロセスが、上述のようにすでに格納されているデータを使用することができるが、他方のレンダリングプロセスは、細分技術および/またはモザイク細工プロセスとすることができる。
【００８１】
例えば、また以下でさらに説明されるように、出願人は、ストローク曲線をレンダリングする好ましい方法は、1つまたは複数の基準曲線に関係する所定の情報を格納し、その後検索する方法であることを認識している。さらに、出願人は、これを実行する際に、いくつかの形態の入力ストローク曲線または曲線の一部については、曲線をレンダリングするときに基準曲線に関係する関連する格納されている所定の情報の部分集合のみを使用(テスト)することが可能であるが、他の入力ストローク曲線またはその一部については、ストローク曲線が正しくレンダリングされることを保証することを試みたい場合に基準曲線に関係する関連する格納されている所定の情報のうちのより多く、および典型的にはすべてを使用(テスト)する必要があることを認識している。
【００８２】
したがって、特に好ましい一実施形態では、ストローク曲線をレンダリングするために利用可能なレンダリングプロセス(またはそれらのレンダリングプロセスのうちの2つよりも多いプロセスが利用可能な場合には少なくとも2つのレンダリングプロセス)は、ストローク曲線をレンダリングすることを目的として所定の情報を検索するプロセスを含み、またそれらのプロセスのうちの1つのプロセスは、他のプロセス(またはこれらのプロセスのうちの他方のプロセス)よりも多くの情報を検索することを必要とする。好ましくは、情報は格納され、サンプリング位置に関して検索され(以下でさらに説明されるように)、したがって好ましくは、これらのレンダリングプロセスのうちの1つのプロセスが検索するサンプリング点位置当たりの情報は、他のプロセス(またはこれらのプロセスのうちの他方のプロセス)に比べて多い。(これは、プロセスが検索する必要のある情報が多数格納されているほど、一般的に、プロセスが正しくレンダリングできるストローク曲線の形態は多いはずであるが、必要とする処理の負担は大きくなる(ことがある)(より多くのデータが検索され、例えば、テストされるため)ということであり、また逆も同様である。)
【００８３】
特に好ましい一実施形態では、利用可能なレンダリングプロセスは、細分技術および/またはモザイク細工技術を含み、またストローク曲線をレンダリングすることを目的として所定の情報を検索する1つまたは複数の(および好ましくは少なくとも2つの)プロセスを含む。
【００８４】
上述のように、本発明で使用される異なるレンダリングプロセスは、例えば、いくつかの形態のストローク曲線を正しくレンダリングする能力、および/または使用に際してのその処理要件に関して異なるであろうが、それぞれが、1つまたは複数の、または実際に多くの、特徴および/またはステップを共有することが可能であり、また実際に、これがその場合であることが好ましい。
【００８５】
例えば、異なるレンダリングプロセスのうちの1つまたは複数またはすべてが、サーフェス空間(つまり、事実上、画面または他の出力空間)内で入力ストローク曲線を表すステップ、次いでサーフェス空間内に現れるときに曲線を覆う1つまたは複数のプリミティブを定義するステップ、そして好適なデータをそれらのプリミティブ内の1つまたは複数のサンプリング点に割り当てることにより曲線をレンダリングするステップによって動作することが好ましい。
【００８６】
そこで、特に好ましい一実施形態では、受け取った入力ストローク曲線をレンダリングするために利用可能な異なるレンダリングプロセスのうちの1つまたは複数またはすべてが、定義済み空間(つまり、ユーザー空間)内で定義されているように受け取ったストローク曲線または受け取ったストローク曲線の一部を、とりわけ、
受け取った変換を使用して受け取ったストローク曲線または受け取ったストローク曲線の一部をサーフェス空間内に投影するステップと、
サーフェス空間内で投影された受け取ったストローク曲線または受け取ったストローク曲線の一部を覆う1つまたは複数のプリミティブを定義するステップと、
受け取ったストローク曲線または受け取ったストローク曲線の一部をレンダリングするためのデータを1つまたは複数のプリミティブ内の任意のサンプリング点に割り当てるステップとにより、レンダリングする。
【００８７】
(当業者であれば理解するように、状況によっては、上記のプロセスを使用してレンダリングされるストローク曲線は、曲線を覆う(1つまたは複数の)プリミティブ内でサンプリング点が定義されないような形態のものとすることができる。この場合、曲線は、表示されるときにシーン内に現れないと判定される。)
【００８８】
上記の特に好ましい実施形態では、受け取ったストローク曲線または受け取ったストローク曲線の一部は、好ましくは、当技術分野で知られているように、グラフィックス処理システム(への入力)によって受け取られる変換(ユーザーサーフェス変換)を使用(実装)して、サーフェス空間内に投影される。
【００８９】
サーフェス空間内に現れるときにストローク曲線またはストローク曲線の一部(投影されたストローク曲線(の一部))を覆う生成される1つまたは複数のグラフィックスプリミティブは、任意の好適な、所望の技術を使用して適宜定義されうる。例えば、投影されたストローク曲線(の一部)を覆う1つまたは複数の境界ボックスを定義することができる。しかし、好ましい一実施形態では、これらのレンダリングプロセスのうちの少なくとも1つのプロセスは、投影されたストローク曲線(の一部)の端点、つまり(制御)始点および(制御)終点にぴったり合う境界多角形を構成する1つまたは複数のプリミティブを定義することができ、また好ましくは定義する。
【００９０】
これらの配列構成では、レンダリング(シェーディング)データは、好ましくは、サーフェス空間内のサンプリング点に対応するユーザー空間内の位置がユーザー空間内で定義されているような受け取ったストローク曲線または受け取ったストローク曲線の一部の中に入るかどうかに基づき1つまたは複数のグラフィックスプリミティブ内のサンプリング点に割り当てられる。
【００９１】
ユーザー空間内の対応する位置が受け取ったストローク曲線のその一部の中に入るかどうかを判定するこのステップは、任意の好適な、所望の方法で実行できる。しかし、特に好ましい一実施形態では、これは、まず最初に受け取った(入力)ストローク曲線または受け取ったストローク曲線の一部を基準または「正準空間」内で定義されている定義済み基準曲線の対応する部分にマッピングすることにより行われる。次いで、正準(基準)空間内における位置がサンプリング(テスト)され、サーフェス空間内の対応する位置が受け取ったストローク曲線の部分内にあるかどうかの判定が行われる。
【００９２】
特に、出願人は、いくつかの曲線族内のすべての曲線が、平行移動、回転、および均等スケーリングのみを使用して「正準曲線」とここでは称される定義済みの、単一の、または基本的な「基準」曲線の少なくとも一部に変換できることを認識している。
【００９３】
したがって、これにより、単一の曲線、つまり正準曲線に関する情報を使用して、レンダリングのためグラフィックス処理システムによって受け取られる複数のストローク曲線に関する情報を決定することができる。言い換えると、例えば、グラフィックス処理システムによって受け取られるレンダリングされるそれぞれの個別のストローク曲線に関してデータを導出または格納することなく、正準曲線に関するデータを導出または格納するだけでよいということである。次いで、このデータは、「正準曲線」が表すストローク曲線の族(集合)に属す個別のストローク曲線またはその一部のそれぞれをレンダリングするために使用されうる。
【００９４】
したがって、特に好ましい一実施形態では、本発明で使用されるレンダリングプロセスのうちの少なくとも1つ、および好ましくそれらのプロセスのうちのそれぞれは、とりわけ、
受け取ったストローク曲線または受け取ったストローク曲線の一部に対応する正準空間の部分を、受け取ったストローク曲線または受け取ったストローク曲線の一部に対応する正準空間で定義されている正準曲線の部分を決定することにより決定するステップと、
受け取ったストローク曲線または受け取ったストローク曲線の一部をレンダリングするためのデータを上述のように1つまたは複数のプリミティブ内の1つまたは複数のサンプリング点に、
前記1つまたは複数のプリミティブ内の複数のサンプリング点のそれぞれについて、
正準空間内の対応する位置が受け取ったストローク曲線または受け取ったストローク曲線の一部に対応する正準空間の部分内にあるかどうかを判定することによって割り当てるステップと、
正準空間内の対応する位置が受け取ったストローク曲線または受け取ったストローク曲線の一部に対応する正準空間の部分内にあるかどうかを判定する前記ステップに従って受け取ったストローク曲線または受け取ったストローク曲線の一部をレンダリングするためのデータをサーフェス空間内の前記複数のサンプリング点のうちの1つまたは複数に割り当てるステップとを含む。
【００９５】
この好ましいレンダリング技術は、上述のような特性を有する「正準曲線」を導出することができる任意の形態のストローク曲線とともに使用できる。したがって、グラフィックス処理システムによって受け取られる入力ストローク曲線は、適切な関連する正準曲線を持つことができる曲線族からの任意の曲線とすることができる。
【００９６】
この形態の関連する正準曲線を有することができる一曲線族は、二次曲線である。この場合、正準曲線は、基本的二次曲線、つまり、y=x2の形式の曲線である。
【００９７】
出願人は、さらに、上述のように、対応する正準曲線を持たない曲線がレンダリングされる場合に、この初期曲線を、それぞれ対応する正準曲線を持つ(つまり、関連する正準曲線を有する曲線族の要素である)複数の曲線セグメントに細分することが可能な場合があることを認識している。例えば、三次曲線または楕円弧は、複数の二次曲線に細分することができる。したがって、これにより、上記の技術を使用することで、直接対応する正準曲線がないそのような曲線をレンダリングすることも可能であるが、これらの曲線は対応する(1つまたは複数の)正準曲線がある複数の曲線に分割できる。
【００９８】
これらの配列構成では、受け取ったストローク曲線またはその一部を表す正準空間の対応する部分を決定する必要がある。この決定は、好適な、望ましい任意の方法で実行できる。しかし、特に好ましい一実施形態では、これは、ユーザー空間内で定義されているようにストロークの中心曲線を取り、正準曲線の対応する部分の上に置くために必要な変換を決定することにより行われる。上述のように、この変換(ユーザー正準変換)は、平行移動、回転、および/または均等スケーリングのみを必要とするべきである。
【００９９】
したがって、ユーザー空間内のストローク曲線またはその一部を正準曲線の該当する部分に変換する変換を決定するステップまたは決定するための手段は、好ましくは、変換の、もしあれば、平行移動部分(成分)を決定するステップを含む。好ましくは、受け取ったストローク曲線(したがって、正準曲線)が、二次曲線である場合、変換の平行移動部分(成分)は、ユーザー空間内の入力ストローク曲線の天底を正準曲線(正準空間内の)の天底上に移動するために必要な平行移動を決定することにより決定される。
【０１００】
ユーザー空間内のストローク曲線またはその一部を正準曲線の該当する部分に変換する変換を決定するステップまたは決定するための手段は、同様に、好ましくは、変換の、もしあれば、回転部分(成分)を決定するステップを含む。好ましくは、ここでもまた、受け取ったストローク曲線(したがって、正準曲線)が、二次曲線である場合、変換の回転部分(成分)は、天底から等距離のところにある、天底の反対側の、受け取ったストローク曲線の中心曲線上の2点の間に引かれた直線を、正準曲線について引かれた対応する直線に平行になるようにするために必要な回転を決定することにより決定される。
【０１０１】
ユーザー空間内のストローク曲線またはその一部を正準曲線の該当する部分に変換する変換を決定するステップまたは決定するための手段は、同様に、好ましくは、変換の、もしあれば、均等スケーリング部分(成分)を決定するステップを含む。好ましくは、ここでもまた、受け取ったストローク曲線(したがって、正準曲線)が、二次曲線である場合、変換の均等スケーリング部分(成分)は、天底から等距離のところにある、天底の反対側の、受け取ったストローク曲線の中心曲線上の2点の間に引かれた第1の直線と第1の直線の中点から天底に引かれた第2の直線の長さの比を決定し、次いでこの比が正準曲線から得られた対応する比に等しくなるようにするために必要なスケーリング係数を決定することにより決定される。
【０１０２】
入力ストローク曲線またはその一部の中心曲線を正準曲線にマッピングするために必要な変換が決定された後、入力ストローク曲線またはその一部に対応する(つまり、入力ストローク曲線が覆う)正準空間の部分は、好ましくは、決定された(ユーザー正準)変換を使用して入力ストローク曲線または入力ストローク曲線の一部の中心曲線の始点および終点に対応する正準曲線上の2つの位置、および正準空間内で入力ストローク曲線が持つ幅(決定されたユーザー正準変換のスケーリング係数を掛けたユーザー空間内の曲線の幅である)を決定することにより決定される。これにより、正準空間内の入力ストローク曲線またはその一部の位置が得られる。
【０１０３】
入力ストローク曲線に対応する正準空間の部分(位置)が決定された後、サーフェス空間内の生成されたプリミティブに対するサンプリング点に対応する正準空間内のサンプリング位置が決定される(したがって、サーフェス空間内のサンプリング点に対応する正準空間内の位置が、正準空間内のストローク曲線の部分の位置に入るかどうかを決定できる)。これは、任意の好適な、所望の方法で実行できるが、好ましくは、サーフェス空間内のサンプリング点に対応する正準空間内の位置は、まず最初に受け取ったストローク曲線をサーフェス空間に投影するために使用される変換(ユーザーサーフェス変換)の逆変換を使用してサーフェス空間内のサンプリング点(の位置)をユーザー空間内の対応する位置にマッピングし、次いで、ユーザー空間内で定義されているようなストローク曲線またはその一部を正準曲線の対応する部分に変換する決定された変換(ユーザー正準変換)を使用してユーザー空間内の対応する位置を正準空間内の対応する位置にマッピングすることにより決定される。
【０１０４】
したがって、これらの配列構成の好ましい一実施形態では、サーフェス空間内のサンプリング点に対応する正準空間内の位置を決定するステップまたは決定するための手段は、サーフェス空間内のサンプリング点をユーザー空間内の対応する位置にマッピングし、次いで、ユーザー空間内の対応する位置を正準空間内の対応する位置にマッピングするステップを含む。
【０１０５】
このステップに続いて、これから理解されるように、サーフェス空間内のサンプリング点に対応する正準空間内の位置が判明する。
【０１０６】
正準空間内の対応するサンプリング位置が決定されると、この位置が、正準空間内に現れるときにストローク曲線またはストローク曲線の一部の中にあるかどうかが判定される。これは、次いで、サーフェス空間内のサンプリング点が、ストローク曲線またはストローク曲線の一部の中にあるかどうかを判定し、したがってそれに応じて、サーフェス空間内のサンプリング点に陰影を付けるために使用できる。
【０１０７】
正準空間内のサンプリング位置が、正準空間内現れるときにストローク曲線またはストローク曲線の一部の中にあるかどうかの判定は、必要に応じて実行することができる。
【０１０８】
しかし、出願人は、正準空間内の離散位置(サンプリング点)毎に、正準曲線上に整数個の点(「解」)が存在し、そこから、正準曲線に垂直な線(直線)を離散位置(サンプリング点)まで引くことが可能であること認識している。好ましくは、正準曲線上のこれらの1つまたは複数の点(解)は、以下でさらに詳しく説明されるように、正準空間内のサンプリング位置が、正準空間内に現れるときにストローク曲線の与えられた部分の中にあるかどうかを判定するために使用される。
【０１０９】
最初に、これから理解されるように、正準空間内のストローク曲線の部分、およびより具体的には、正準曲線それ自体の対応するセクションが、正準空間内の少なくとも1つの特定のパラメータ範囲にわたって延びる。(明確に区別できるパラメータ範囲の数は、正準空間の次元に依存する。)例えば、y=x2の形式の正準曲線では、曲線は「x」値の範囲および「y」(=x2)値の範囲にわたって延び、したがって、「x」と「y」は両方とも、曲線の「パラメータ」として使用できる。
【０１１０】
(ここで、特定の正準曲線が延びるパラメータ範囲は、曲線の適当なパラメータ化で表現できることに留意されたい。したがって、y=x2の形式の正準曲線については、軸はパラメータとして使用でき、また好ましくはパラメータとして使用されるが、これは、すべての正準曲線に当てはまるわけではない。)
【０１１１】
したがって、正準空間内の所定の(サンプリング)位置に関連付けられている正準曲線上の解のパラメータ値を、正準空間内のストローク曲線またはストローク曲線の一部によって覆われる特定のパラメータ範囲に対してテストし、その(サンプリング)位置がこの特定のパラメータ範囲内に入る解を有するかどうかを確認することができる。
【０１１２】
当業者であれば理解するように、ストローク曲線は、典型的には、複数のパラメータ範囲(例えば、正準曲線が基本的二次曲線である場合に「x」値および「y」値)によって表されるが、点がストローク曲線によって覆われている正準曲線のセクション内にある場合には曲線のそれぞれのパラメータ範囲内にあるが範囲は定義されているので1つのパラメータ範囲についてテストするだけで十分である。したがって、例えば、y=x2の形式の正準曲線では、好ましくは、解の「x」値のみが、正準空間内の受け取ったストローク曲線の部分に関連付けられている「x」値の範囲についてテストされる。「x」は、好ましくは、この実施形態でテストされる「パラメータ」として使用されるが、それは、原点の近傍内の正準空間の領域で「y」を使用するよりも正確であるからである。
【０１１３】
他の実施形態では、解と正準曲線上の所定の点との間の曲線にそった距離をテストすることができる。例えば、正準曲線が基本的二次曲線である実施形態では、正準空間内の与えられた位置に関連付けられている正準曲線上の天底から解までの曲線にそった距離が決定され、次いで、この距離を、正準空間内に現れるときにストローク曲線によって覆われる特定の距離範囲と比較することができる。
【０１１４】
(この後者の実施形態は、レンダリングされるストローク曲線が与えられた点描パターンで点描される(例えば、一連のドットおよび/またはダッシュとして表示される)場合に特に有益である場合がある。例えば、好ましい一実施形態では、1つまたは複数の点描パターンを好適な所望の方法で、例えば、1Dテクスチャとして格納し、選択された点描パターンを(適切な変換を使用して)、曲線上の所定の点、例えば、天底に関して正準曲線に適用することができる。正準空間内の与えられた位置に関連付けられている解のそれぞれについて決定されるこの所定の点からの曲線にそった距離を選択された点描パターンと比較し、それに応じて(すなわち、位置が、正準空間内に現れるときに、またその位置に関連付けられている(1つまたは複数の)解が選択された点描パターン内にある場合に、ストローク曲線内にあるかどうかに基づいて)、サーフェス空間内の対応する位置をレンダリングすることができる。)
【０１１５】
第2に、上述のように、ストローク経路の境界は、経路上のある1つの点まで引くことができる、経路に対して垂直な、所定の幅の線の始点の集合によって定義される。
【０１１６】
したがって、正準空間内の与えられた位置に関連付けられている正準曲線上の解からその位置までの垂直距離、つまり、正準曲線上の点(解)から離散位置(サンプリング点)に引かれた線(直線)の長さを、正準空間内のストローク曲線のストローク幅の半分に対してテストし、その位置が正準空間内に現れるときにストローク曲線の部分の幅に収まる解を有するかどうかを確認することができる。(正準空間内のストローク曲線のストローク幅は、上述のように、ユーザー空間と正準空間との間の変換のスケーリング係数部分(成分)を掛けたユーザー空間内のストローク幅に等しくなる。)
【０１１７】
したがって、好ましい一実施形態では、正準空間内のサンプリング位置が、受け取ったストローク曲線または受け取ったストローク曲線の一部に対応する正準空間の部分内にあるかどうかを判定するステップは、正準空間内のサンプリング位置を終点として引くことができる曲線に垂直な線(直線)の始点となる正準曲線上の少なくとも1つの点に関して、正準空間内のサンプリング位置を終点として引くことができる正準曲線に垂直な線(直線)の始点となる正準曲線上の点が、正準空間内のストローク曲線の部分によって覆われているパラメータ範囲内に入っているかどうか、および/または正準空間内のサンプリング位置と正準曲線に垂直な線(直線)を引いた際の終点となることができる正準曲線上の点との間の(直線)(最短)距離が、正準空間内に現れるときにストローク曲線のストローク幅の半分以下であるかどうかを判定するステップを含む。正準曲線上の点がテストされる正準空間内のサンプリング位置に対するこれらの要件の両方を満たす場合、サンプリング位置は、正準空間内に現れるときにストローク曲線またはストローク曲線の一部の中に入っており、それに応じて、サーフェス空間内の対応するサンプリング位置も、ストローク曲線またはストローク曲線の一部の中にある(したがって、サーフェス空間内のサンプリング位置をそれに応じて陰影付けすることができる)。
【０１１８】
これから理解されるように、サンプリング位置に対する正準曲線上の点が、そのサンプリング位置が正準空間内にあり、また正準空間内のストローク曲線内にあることを示すかどうかを判定するために好ましくは使用される上述の2つのステップ(テスト)は、任意の所望の順序で実行されうる。好ましい一実施形態では、これら2つのテストは、逐次的に実行され、第2のテストは、正準曲線上の点(解)が第1のテストに通った(つまり、第1のテストに基づきサンプリング点がストローク曲線内にあることを潜在的に示すと判定された)場合にのみ実行される。しかし、代替実施形態では、2つのテストは並行して実行され、第1のテストは第2のテストと同時に実行される。
【０１１９】
上述のように、正準空間内の与えられたサンプリング位置が、正準曲線上に複数のそのような「解」を有すること、また、さらに、与えられたサンプリング点に関連付けられている「解」のすべてではなく一部が、与えられた入力曲線について、そのサンプリング点が正準空間内に現れるときにストローク曲線内に入ることを示す可能性があることが理解されるであろう。しかし、これらの解のうちの1つが、サンプリング点が正準空間内に現れるときにストローク曲線内にあることを示す場合、サンプリング位置は、ストローク曲線内にある(これらが、このことを示さない他の解であっても)。
【０１２０】
これは、したがって、原則として、正準空間内のサンプリング位置が正準空間内に現れるときに入力ストローク曲線内にあるかどうかを正しく判定することを確実に行えるように与えられた入力ストローク曲線に関して正準空間内のサンプリング点に対するそのような解のことごとくがテストされなければならないことを示唆している。しかし、出願人は、実際には、これが必ずしもその場合でないことを見いだしている。
【０１２１】
出願人は、自己重複するストローク曲線の領域について、与えられたサンプリング位置に対する正準曲線上の複数の点(解)(つまり、この点から、正準曲線に垂直な線(直線)を各サンプリング位置まで引くことができる)のうちの1つが、上述の方法でテストされた場合に、その位置が正準空間内に表れるときにストローク曲線の部分内にあることを示し、そのサンプリング位置に対する他の点(解)は、テストされた場合に、その位置が正準空間内に現れるときにストローク曲線の部分の外側にあることを示しうる場合がありうることを見いだしている。したがって、サンプリング位置を正確にレンダリングするために、上述のように、その位置に関連付けられている点(解)のすべてをテストする必要がある。
【０１２２】
しかし、出願人は、テストされる入力ストローク曲線が自己重複しない他の場合において、そのときに正準空間内の特定のサンプリング位置がストローク曲線内にある場合(正準空間内に表れるときに)、サンプリング位置に最も近い(つまり、曲線からサンプリング位置までの垂直距離が最短である)位置にある正準曲線上の解は、常に、上記の方法でテストされた場合に、そのサンプリング位置がストローク曲線内にあることを示すことがわかるということを見いだしている。
【０１２３】
さらに、出願人は、特定のストローク曲線またはその一部をレンダリングするためのプリミティブが、レンダリングされる曲線の端点にぴったり合う境界多角形として、つまり、プリミティブ内でサンプリングされうるすべての点が、レンダリングされる曲線のパラメータ範囲内に入るように定義されている場合に、正準空間内のサンプリング位置が、受け取ったストローク曲線またはその一部に対応する正準空間の部分内にあるかどうかに関する判定は、正準空間内のサンプリング位置と正準空間内の解との間の距離が、正準空間内に現れるときにレンダリングされる曲線のストローク幅の半分以下であるかどうかを判定するステップによってのみ行うことができ、また好ましくは行われることをさらに認識している。例えば、いくつかの入力ストローク曲線またはその一部をレンダリングする場合、サンプリング位置に関連付けられている正準曲線上の最も近い点(解)の距離値をテストすることによってのみ、正準空間内の特定の位置がストローク曲線の部分内にあるかどうかを正しく判定することが可能である。
【０１２４】
出願人は、これの結果として、曲線を正確にレンダリングするために、処理されるストローク曲線の特性(例えば、それが自己重複であるかどうか)、および/または曲線を覆うプリミティブがどのように生成されるかに応じて、与えられたサンプリング位置に対する解のすべてまたは部分集合(好ましくは単一の(最も近い)解)がテストされる必要があり、また(1つまたは複数の)解について格納されているデータのすべてまたは(1つまたは複数の)解について格納されているデータの部分集合のみのいずれかがテストされる必要があることを認識している。
【０１２５】
上記のことから、グラフィックス処理システムで利用可能なレンダリングプロセスのうちの1つまたは複数またはすべてを好ましくは含む、上述のようなレンダリング技術(つまり、「解」のテスト)は、それ自体、プロセスの実装の仕方に応じて(本発明の方法により)ストローク曲線をレンダリングするための複数の異なるレンダリングプロセスを実現することができることは理解されるであろう。
【０１２６】
例えば、また好ましくは、システムは、上記の方法で正準空間内の特定の位置について正準曲線上の可能な複数の点(解)のうちの1つのみをテストして位置が正準空間内に現れるときにストローク曲線またはストローク曲線の一部の中にあるかどうかを判定することを伴いうる、好ましくは伴う、より「基本的な」、あまり徹底していない、好ましくは負担の少ない(処理量の少ない)レンダリングプロセスをサポートすることができる。上述のように、この配列構成では、好ましくは、テストされる(単一の)点(解)は、正準空間内の各位置に最も近い点(解)、つまり、各サンプリング位置までの最小垂直距離を有する(正準)曲線上の点(解)である。このプロセスは、関連する所定のデータが格納されている、入力曲線(または曲線の一部)の部分集合、つまり、自己重複しない複数の曲線または曲線の一部を正しくレンダリングすることのみできる。
【０１２７】
同様に、システムは、好ましくは、上記の方法で正準空間内の特定の位置について(1つまたは複数の)可能な点(解)のすべてをテストして位置が正準空間内に現れるときにストローク曲線またはストローク曲線の一部の中にあるかどうかを判定することを伴いうる、好ましくは伴う、より「高度な」(より徹底している)レンダリングプロセスをサポートする。このプロセスは、関連する所定のデータが格納されている入力曲線を正しくレンダリングできなければならない。
【０１２８】
また、例えば、必要ならば正準空間内の特定の位置などに対する複数の可能な点(解)のうちの複数を、ただし全部ではなく、テストすることを伴う第3の「中間」レンダリングプロセスを用意することも可能であろう。
【０１２９】
さらに、好ましくは、上記のレンダリングプロセスのうちの1つまたは複数またはすべては、例えば、サーフェス空間内の受け取ったストローク曲線またはその一部を覆う1つまたは複数のプリミティブがどのように定義されるかに応じて、2つのレベルのテストを含むことができ、好ましくは含む。例えば、第1のレベルのテスト、および典型的にはこれら2つのレベルのうちの最も負担の少ない(処理量の少ない)レベルは、テストされる正準空間内の特定の位置に対する正準曲線上の点(解)の(直線)距離のみをテストすることを伴うが、ぴったり合う1つまたは複数の境界多角形を曲線のレンダリング用のプリミティブとして生成する必要がある。その一方で、第2のレベルのテストは、テストされる正準空間内の特定の位置に対する正準曲線上の複数の点(解)の(直線)距離とパラメータ値の両方をテストすることを伴うが、単純な1つまたは複数の境界ボックスを曲線のレンダリング用の(1つまたは複数の)プリミティブとして使用することができる。
【０１３０】
当業者であれば、これらの配列構成では、単一解のみをテストする上記のより「基本的な」レンダリングプロセスは、より「高度な」レンダリングプロセスのうちの「中間」レンダリングプロセスに比べて、典型的には処理量が少なく、例えば、レンダリングパイプラインで必要なレンダリングパスが少なくて済むということを理解するであろう。同様に、解の(すべてではなく)部分集合のみをテストする「中間」プロセスでは、典型的には、より「高度な」レンダリングプロセスに比べて処理量が少なくなる。したがって、上述のように、その「より基本的な」レンダリングプロセスを使用して入力ストローク曲線の可能な限り多くをレンダリングし、必要な場合に限りより複雑な(高度な)レンダリングプロセスを使用することが好ましい。これは、上述のように、より高度なレンダリングプロセスを使用する必要があると思われるストローク曲線の領域を識別(判別)し、好ましくは、ストローク曲線をその決定に従って複数の部分に細分する、つまり、基本的なレンダリングプロセスを使用できる(1つまたは複数の)部分とより高度なレンダリングプロセスが必要になる(1つまたは複数の)部分に細分することにより達成される。
【０１３１】
(上述のように、「解」テストに基づく上記の(1つまたは複数の)レンダリングプロセスは、好ましくは、ストローク曲線のレンダリングを行うためにグラフィックス処理システムで利用可能なレンダリングプロセスの部分集合のみを含む。例えば、システムは、上述のように、特定の受け取ったストローク曲線またはその一部をレンダリングするために、必要に応じて選択できる細分技術および/またはモザイク細工、好ましくは三角形分割技術などの他のレンダリングプロセスもサポートすることができ、好ましくはサポートする。)
【０１３２】
上記の(「解」テスト)実施形態では、正準空間内のサンプリング位置が、受け取ったストローク曲線の一部に対応する正準空間の部分内にあるかどうかを判定する、好ましくは上述のステップ(テスト)を含む、ステップが、任意の好適な、所望の方法で実行されうる。しかし、好ましい一実施形態では、これは、プロセスを実行させるための所定の情報(つまり、予め格納されているデータ)を検索することにより行われる。
【０１３３】
特に、出願人は、正準空間内の与えられた(サンプリング)位置に対する正準曲線上のそれぞれの解のパラメータ位置、およびその解に対する正準空間内の(サンプリング)位置までの垂直距離を予め導出し、格納しておき、次いで、例えば、その位置を正準空間内でテストしなければならないときに検索をかけることができることを認識している。正準空間内の(サンプリング)位置に関するこの格納されている情報は、次いで、考察されている与えられたストローク曲線の部分に対する、パラメータ範囲および正準空間内のストローク幅(の半分)と比較され、これにより、正準空間内の位置が、考察されているストローク曲線の部分内に入っていることを示す正準曲線上の解を有するかどうかを確認することができる。したがって、このようなデータが、正準空間を覆う複数の位置(サンプリング位置の集合)について格納されている場合、格納されているデータは、テストする必要がある可能性のある正準空間内の任意の与えられた位置について検索できる。
【０１３４】
したがって、本発明のこれらの配列構成の特に好ましい一実施形態では、正準空間内の位置(サーフェス空間内のサンプリング位置に対応する)が、正準空間内に現れるときにストローク曲線またはその一部の中に入るかどうかを判定するステップまたは判定するための手段は、正準空間内の複数の位置について、曲線に垂直な直線を正準空間内の位置から引いたときの終点となる正準曲線上の1つまたは複数の点に対するパラメータ値、および正準曲線上の1つまたは複数の点と正準空間内の各位置との間の垂直距離を格納するデータストアを検索するステップを含む。
【０１３５】
正準空間内のサンプリング点の配列に関する情報の集合、例えば、データストアは、任意の所望の、好適な方法で格納されうる。しかし、本発明の特に好ましい一実施形態では、正準空間内の複数の離散位置に関する情報は、1つまたは複数のグラフィックテクスチャの形式で格納される。
【０１３６】
したがって、特に好ましい一実施形態では、本発明で使用されるレンダリングプロセスのうちの1つまたは複数またはすべては、とりわけ、
受け取ったストローク曲線または受け取ったストローク曲線の一部に対応する正準空間の部分を、受け取ったストローク曲線または受け取ったストローク曲線の一部に対応する正準空間で定義されている正準曲線の部分を決定することにより決定するための手段または決定するステップと、
受け取ったストローク曲線または受け取ったストローク曲線の一部をレンダリングするためのデータを1つまたは複数のプリミティブ内の1つまたは複数のサンプリング点に、
1つまたは複数のプリミティブ内の複数のサンプリング点のそれぞれについて、正準空間内の対応する位置を決定し、
それぞれが正準空間内の少なくとも1つの離散位置に関する情報に関連付けられている複数のテクセルを有するグラフィックステクスチャの少なくとも1つのテクセルをサンプリングして、正準空間内の決定された対応する位置が受け取ったストローク曲線の部分に対応する正準空間の部分内にあるかどうかを判定することにより、割り当てるための手段または割り当てるステップとを含む。
【０１３７】
これらの配列構成では、(1つまたは複数の)グラフィックステクスチャ内のそれぞれのテクセルには、そのテクセル位置に対する正準曲線上の(1つまたは複数の)解について上で説明されている情報が関連付けられていることが好ましい。言い換えると、それぞれのテクセルは、正準空間内の1つの位置を表し、正準空間内のその位置に対する正準曲線上の解点に関する情報(曲線上のパラメータ値およびその曲線までの垂直距離など、および好ましくはそのようなパラメータ値およびそのような垂直距離)を格納するということである。例えば、また好ましくは、その情報は、(1つまたは複数の)解点のパラメータ値、または正準曲線上の所定の点から(1つまたは複数の)解点までの距離、および(1つまたは複数の)解点から曲線までの垂直距離である。例えば、テクスチャの赤色および緑色チャネルは、注目する正準空間内の位置に対する1つの解点について、パラメータ位置および曲線までの垂直距離を格納することが可能であり(または逆も同様に)、青色およびアルファチャネルは、曲線上の他の解点に対する対応するデータを格納することが可能であり、テクスチャがサポートするデータチャネルがほかにあれば、さらに同様のことが可能である。
【０１３８】
しかし、出願人は、「解データ」が格納される正準空間内の複数の離散位置のうちの1つまたは複数の位置について、曲線に垂直な線(直線)を(1つまたは複数の)各位置から引いたときに終点となることができる点が正準曲線上に全くない場合がある(つまり、その点に対する曲線上の解がない場合がある)ことを指摘した。同じことだが、他の位置より多くの解を有する正準空間内の位置がいくつかありうる。好ましくは、データが格納される与えられた位置について解が全くないか、または少ない場合には、情報が格納されないか、または特に好ましい一実施形態では、(1つまたは複数の)「欠測」解についての所定の、または定義済み(デフォルト)の情報が、例えば以下でさらに詳しく説明されるように格納される。
【０１３９】
出願人は、さらに、正準空間内の任意の離散位置について、また正準曲線が基本的二次曲線である場合に、正準曲線の半分において各離散位置を終点として引くことができる正準曲線に垂直な線(直線)の始点となる関連付けられている点(解)は0個、1個、または2個のみである(つまり、正準曲線が、鏡映対称軸を中心として分割されている(分けられている)場合に)ことを認識している。
【０１４０】
したがって、特に好ましい一実施形態では、正準曲線が、(例えば、二次正準曲線では天底を通過する)鏡映対称軸を有し、それによって、互いの鏡像となる2つの部分に等しく分割される(分けられる)場合、上述のような情報は、正準曲線を半分にした片方の上のその位置に対する「解」点のみについて、正準空間内で定義されている離散位置(サンプリング位置)毎に格納されるだけである。
【０１４１】
したがって、本発明は、好ましくはさらに、受け取ったストローク曲線の最大の曲率を持つ点(例えば、ストローク二次曲線の天底)が受け取ったストローク曲線の中心曲線上にあるかどうかに基づき入力ストローク曲線を2つ以上の部分に細分するステップまたは細分するための手段を備える。言い換えると、入力ストローク曲線は、好ましくは、最大の曲率を持つそれぞれの(その)点がストローク曲線の始点と終点との間にある場合に最大の曲率を持つ点の周りで2つの部分に適宜細分されるということである。
【０１４２】
(ここで、受け取ったストローク曲線(または受け取ったストローク曲線セグメント)を曲率が最大の点の周りの2つの部分に細分するステップは、受け取ったストローク曲線(または受け取ったストローク曲線セグメント)を、受け取ったストローク曲線(または受け取ったストローク曲線セグメント)が上述の特定の1つまたは複数の特性を有する1つまたは複数の領域を含むかどうかを判定する前記ステップに基づき1つまたは複数の部分に細分するステップに好ましくは加えたものであり、また典型的にはそのステップの後に実行されることに留意されたい。)
【０１４３】
したがって、正準空間内のそれぞれの離散位置について、正準曲線上の関連付けられている識別された点(解)のパラメータ値および正準曲線上の関連付けられている識別された点(解)と各離散位置との間の距離が格納される本発明の好ましい実施形態では、この場合に、正準空間内のそれぞれの離散位置(サンプリング位置)に対するせいぜい4つの成分(個別の情報)、つまり、(i)正準曲線上の第1の(例えば、最も近い)識別された点(解)のパラメータ値、(ii)正準曲線上の第1の(例えば、最も近い)識別された点(解)と離散位置との間の距離、(iii)正準曲線上の第2の(例えば、最も遠い)識別された点(解)のパラメータ値、および(iv)正準曲線上の第2の(例えば、最も遠い)識別された点(解)と離散位置との間の距離を格納するだけでよい。これら4つの成分は、これから理解されるように、単一の「4チャネル」グラフィックステクスチャの単一テクセル内に格納できて都合がよいが、それは、そのような単一のテクセルが、上述のように、4つのデータチャネル-赤色チャネル、緑色チャネル、青色チャネル、およびアルファチャネル-を有するからである。
【０１４４】
このような実施形態では、つまり、正準空間内の任意の離散位置が正準曲線上にせいぜい2つの関連付けられた解を有する実施形態では、上述のような「解」テストレンダリング技術は、2つのレンダリングプロセス、つまり2つの可能な解のうちの1つのみ、好ましくは最も近い解がテストされる基本的なレンダリングプロセスと、2つの可能な(格納されている)解のうちの両方がテストされる高度なレンダリングプロセスとを含むということが理解できるであろう。
【０１４５】
これを容易に行えるようにするため、好ましくは、それぞれの離散位置に対する最も近い解に関する情報(または最も近い解がない場合には「欠測」解に関する適切なデータ)は、常に、1つのテクセルの同じ部分に(つまり同じ構成で)格納され、例えば、赤色および緑色チャネル内に常に格納される。これは、より基本的な単一の解テストのレンダリングプロセスを使用したときに、システムは、最も近い解に関する情報を格納する所定のデータ「チャネル」をテストするだけでこのことを簡単に達成できることを意味している。
【０１４６】
上述のように、1つまたは複数のテクスチャに関連付けられている正準空間内の離散位置のうちの1つまたは複数の位置について、各離散位置を終点として引くことができる正準曲線に垂直な線(曲線)の始点となる正準曲線上の点(解)がないか、あるいは構成によって1つまたは複数のテクスチャが保持する解の数に比べて正準曲線上の点(解)が少ない。例えば、上述の実施形態では、1つまたは複数のテクスチャは、それぞれのテクセルが好ましくは正準曲線上の2点(解)に関する情報、つまり、単一の離散位置に関連付けられている点(解)の最大数を格納できるように構成されるが、これらのテクセルのうちの1つまたは複数は、1つの点(解)に関する情報を格納するためにのみ必要であるか、またはどのような点(解)であってもそれに関する情報を格納するために全く必要でない場合すらある、つまり、正準空間内の位置に関連付けられているテクセルは、正準曲線上に関連する点(解)を1つのみ有するか、または全く有しない。
【０１４７】
好ましくは、関連付けられている点(解)の最大数より少ない点(解)を有する離散位置(テクセル)については、所定の、または定義済みの値が、テクセルの関連する「パラメータ」および/または「距離」成分内に格納されるが、結果として、「欠測」解は、正準空間内に現れるときにストローク曲線またはその一部の中に入るかどうかを判定するテストに合格しない。
【０１４８】
例えば、好ましい一実施形態では、正準空間内に現れるときに入力ストローク曲線のストローク幅の半分より常に大きい値は、そのような「欠測」解の「距離」成分に格納される。このような実施形態におけるテクセルの関連付けられている「パラメータ」成分は、空のままにされるか(未定義状態)、または適宜任意の好適な、望ましい値を格納しうるが、これは、解が、正準空間内に現れるときにストローク曲線の外側にあると判定される「欠測」解に対する2つのテストのうちの1つにのみ不合格であればよいからである。
【０１４９】
グラフィックステクスチャが、上述の方法で使用される場合、テクスチャは、正準空間内の与えられた位置について解データを得るために、必要に応じてサンプリングできる。例えば、特に好ましい一実施形態では、テクスチャは、当技術分野で知られているような、双線形フィルタリングなどの好適なテクスチャフィルタリングまたは補間プロセス、好ましくは双線形フィルタリングを使用してサンプリングされる。
【０１５０】
特に好ましい一実施形態では、正準空間内で定義されているそれぞれの離散位置(例えば、それぞれのテクセル)について格納されている情報は、正準曲線上の1つまたは複数の識別された点のそれぞれと各離散位置との間の、絶対距離ではなく、符号付き距離を含む。符号付き距離は、これから理解されるように、2つの点の間の距離(絶対距離)だけでなく、離散位置が正準曲線のどちら側に入るかということも示す。例えば、離散位置が正準曲線の上にある場合、距離には正の値が付けられ、離散位置が正準曲線の下にある場合、距離には負の値が付けられる(またはもちろん、逆も同様)。符号付き距離を使用すると、フィルタリングまたは補間を使用する際にテクスチャのサンプリングを正確に行いやすくなる。
【０１５１】
「解」テスト技術が本発明で利用可能なレンダリングプロセスのうちの少なくとも1つとして使用される場合、好ましくは、(1つまたは複数の)正準曲線を表す(1つまたは複数の)テクスチャが予め生成され、次いで、グラフィックス処理システムで使用できるように適宜格納され、例えば、好ましくは、グラフィックス処理システムが使用できる他の(静的)テクスチャマップとともに格納される。次いで、与えられたテクスチャマップが選択され、適宜、注目するストローク曲線がレンダリングされるときに使用される。
【０１５２】
「解」テスト技術を使用したときに、例えば上述のような本発明の好ましいステップを使用して、サーフェス空間内の1つまたは複数のプリミティブ内のサンプリング点が、正準空間内に現れるときにストローク曲線の部分内に入るかどうかが判定された後、赤色、緑色、および青色(RGB)の値および「アルファ」(透明度)値などのデータは、適宜この判定に基づきサンプリング点に割り当てることができる。次いで、このプロセスは、好ましくは、サーフェス空間内で定義されている複数のサンプリング点のそれぞれについて繰り返され、それに応じて、ストローク曲線がレンダリングされる。  (同様に、他の可能な(利用可能な)レンダリング技術のうちの1つ、例えば、細分および/またはモザイク細工技術を使用したときに、サーフェス空間内の複数のプリミティブのうちの1つの中のサンプリング点が、ユーザー空間内に現れるときにストローク曲線またはその一部の中に入るかどうかが判定された後、赤色、緑色、および青色(RGB)の値および「アルファ」(透明度)値などのデータは、適宜この判定に基づきサンプリング点に割り当てることができる。)
【０１５３】
したがって、上記から、本発明の好ましい一実施形態では、1つまたは複数のプリミティブは、生成されるサンプリング点およびフラグメントに対しラスター処理され、適切な正準曲線を表すテクスチャおよび正準空間の一部は、プリミティブサンプリング点位置に対応するテクスチャ内のサンプリング位置により1つまたは複数のプリミティブのそれぞれのサンプリング点についてサンプリングされる(当技術分野で知られているような方法で)ことがわかる。
【０１５４】
次いで、サンプリングされたテクスチャ値は、注目するストローク曲線またはその一部に対する対応する値(例えば、また好ましくは、正準空間内のパラメータ範囲およびストローク幅(の半分))と比較され、それに応じて、サーフェス空間内の対応するサンプリング点が保持されるか、または破棄される。
【０１５５】
この「比較して破棄する」プロセスは、注目するグラフィックス処理システムに任意の望ましい、また好適な方法で実行されうる。
【０１５６】
例えば、プログラム可能なフラグメントシェーダーハードウェアを有するグラフィックス処理システムでは、比較および条件付き破棄ルーチンを使用することが可能であり、好ましくは使用される。
【０１５７】
固定機能ハードウェアを有するグラフィックス処理システムでは、本発明のこのオペレーションは、例えば、サンプリング点(フラグメント)を何回もグラフィックスレンダリングパイプラインに通すという形で実装されうる。例えば、グラフィックスレンダリングパイプラインを通る第1のパスは、1つまたは複数の解のうちの1つとサンプリング位置との間の距離が、ストローク曲線のストローク幅の半分以下であるかどうかをチェックするために使用され、次いで、グラフィックスパイプラインを通る第2のパスは、これが必要な場合に、解のパラメータ値が正準空間内に現れるときにストローク曲線のパラメータ範囲内にあるかどうかをチェックするために使用されうる。必要ならば、類似のパスまたはパスの対を構成し、サンプリング位置に関連付けられている正準曲線上の1つまたは複数の解のうちの他方をチェックすることができる。
【０１５８】
必要ならば、このような固定機能ハードウェアの実施形態により、上述のようにテストで使用される任意の情報の絶対値を生成するために、例えば、符号付き距離を絶対距離に変換するために、ドット積を使用することができる。さらに、1つの(その)アルファテストは、好ましくは、上述のように「解」テストで必要とされる比較を実装するために使用される。上述のように、特に好ましい一実施形態では、解が、レンダリングパイプラインを通る第1のパスでテストに不合格であった場合には、これに対するテストが(もう一度パイプラインを通すことによって)それ以上行われることはない。これは、好ましくは、ステンシルバッファを使用して実装される。
【０１５９】
したがって、このような実施形態では、正準空間内の与えられた位置に関して単一の(例えば、また好ましくは、最も近い)解をテストするより「基本的な」解テストレンダリングプロセスは、サンプリング位置が、正準空間内に現れるときにストローク曲線またはストローク曲線の一部の中にあるかどうかを判定するために単一のパスまたはパスの対を実行する必要があるが、より多くの(両方の)解をテストするより「高度な」解テストレンダリングプロセスは、同じ判定を行うために2つのパスまたはパスの対を必要とするということがわかる。
【０１６０】
上記から、本発明の特に好ましい一実施形態では、ストローク曲線をレンダリングするために使用される複数のレンダリングプロセスのうちの少なくとも1つまたは複数は、基準曲線に相対的な複数のサンプリング位置について予め格納され、与えられたサンプリング位置がその基準曲線にマッピングされている(対応する)ストローク曲線内にあるかどうかを判定するために使用されうる、好ましくはグラフィックステクスチャの形式のデータを検索するステップを伴うことがわかる。同様に、レンダリングプロセスは、好ましくは、テストされる与えられたサンプリング位置について、そのサンプリング位置に関して導出または格納されているデータの1つまたは複数の集合をテストして、そのサンプリング位置がレンダリングされるストローク曲線の表現の中にあるかどうかを判定するステップを伴う。
【０１６１】
格納され、テストされる情報は、好ましくは、定義済み曲線上の1つまたは複数の点に相対的な場所の位置に関係する。好ましくは、このような情報は、格納され、それぞれの与えられた各(サンプリング)位置に対する複数のそのような点に関してテストされうる。
【０１６２】
好ましくは、それぞれの格納されているサンプリング位置は、その位置について格納されている(その位置に関連付けられている)(類似の)データの2つ以上の集合を有し、レンダリングプロセスは、同様に、テストされる与えられたサンプリング位置についてデータの1つまたは複数の(両方の)集合を使用する(また好ましくはテストする)ことができる。
【０１６３】
最も好ましくは、これらの配列構成において、ストローク曲線をレンダリングするためのレンダリングプロセスの1つは、テストされるサンプリング位置に関するデータの複数の集合、および好ましくはデータの利用可能な集合のすべてを使用し(例えば、また好ましくはテストし)(サンプリング位置がストローク曲線内にあるかどうかが判定される)(このプロセスは、例えば、また好ましくは、(潜在的に)自己重複する曲線または曲線の領域に対して使用されうる)、他のレンダリングプロセスは、テストされるサンプリング位置に関するデータの複数の集合の(うちの全部ではなく一部の)部分集合、および好ましくはデータの複数の集合のうちの1つの集合のみを使用する(テストする)だけである(このプロセスは、例えば、また好ましくは、自己重複しない曲線または曲線の領域に対して使用されうる)。
【０１６４】
したがって、特に好ましい一実施形態では、ストローク曲線をレンダリングするために使用できるレンダリングプロセスは、テストされるサンプリング位置に関するデータの1つまたは複数の集合をそれぞれがテストする第1のプロセスおよび第2のプロセスを含み、これらのプロセスでは、データのそのような集合は、サンプリング位置の所定の配列に対して格納され、サンプリング位置のそれぞれの格納された配列にはデータの複数の集合が関連付けられ、第1のレンダリングプロセスは、テストされるそれぞれのサンプリング位置についてデータの複数の集合をテストし、第2のプロセスは、テストされるそれぞれのサンプリング位置についてデータの複数の集合の1つの部分集合のみ(および最も好ましくはデータの単一集合のみ)をテストする。
【０１６５】
受け取ったストローク曲線を分類(識別)するステップ、受け取ったストローク曲線を2つ以上の部分に細分(分割)するステップ、および受け取ったストローク曲線またはその一部をレンダリングするのに適した技術を選択するステップなどの本発明のさまざまな(好ましい)機能は、例えば、グラフィックス処理システムのCPU(例えば、ホストCPU上のグラフィックスドライバ)および/または1つまたは複数のシェーダー、例えば、また好ましくは、頂点シェーダーおよびジオメトリシェーダーの組合せを使用して、好きなように実装できる。
【０１６６】
特に好ましい一実施形態では、本発明のさまざまな(好ましい)機能は、表示デバイスのフレームバッファに書き込まれるデータを生成して出力する単一のグラフィックス処理プラットフォーム上で実行される。
【０１６７】
本発明は、「パイプライン化された」構成を有するレンダラーなど、任意の形態または構成のレンダラーに適用可能である(この場合、レンダラーは、レンダリングパイプラインの形態をとる)。好ましい一実施形態では、これは、ハードウェアグラフィックスパイプラインに適用される。本発明のさまざまな機能および要素などは、例えば、好ましくは、適切な機能ユニット、処理ロジック、プロセッサ、マイクロプロセッサ装置などにより必要に応じて実装されうる。
【０１６８】
本発明は、即時モードレンダリング、遅延モードレンダリング、タイルベースレンダリングなど、すべてのレンダリング形式に適用可能である。
【０１６９】
上記から理解されるように、本発明は、もっぱらというわけではないが、3Dグラフィックスプロセッサおよび処理デバイスに特に適用可能であり、それに応じて、本明細書で説明されている本発明の複数の態様のうちの1つまたは複数の態様の装置を含む、または本明細書で説明されている本発明の複数の態様のうちの1つまたは複数の態様に従って動作する、3Dグラフィックスプロセッサおよび3Dグラフィックス処理プラットフォームにも拡大適用される。上述の特定の機能を実行するためにハードウェアが必要であることを前提条件とすると、そのような3Dグラフィックスプロセッサは、他の何らかの方法で、3Dグラフィックスプロセッサが備える、通常の機能ユニットなどの1つまたは複数またはすべてを備えることができる。
【０１７０】
本発明は、同様にして、2Dグラフィックスプロセッサおよび2Dグラフィックス処理にも拡大適用される。
【０１７１】
当業者であれば、本発明の説明されている態様および実施形態はすべて、適宜、本明細書で説明されている好ましい、およびオプションの機能の1つまたは複数あるいはすべてを備えることができ、好ましくは備えることを理解するであろう。
【０１７２】
本発明による方法は、少なくとも部分的にはソフトウェアを使用して、例えばコンピュータプログラムを使用して実装されうる。そのため、他の態様から見たときに、本発明は、データ処理手段にインストールされたときに方法または本明細書で説明されている方法を実行するように特に適合されたコンピュータソフトウェア、データ処理手段上でプログラム要素が実行されたときに本明細書で説明されている方法を実行するコンピュータソフトウェアコード部分を含むコンピュータプログラム要素、およびデータ処理システム上でプログラムが実行されたときに本明細書で説明されている1つまたは複数の方法のすべてのステップを実行するように適合されたコード手段を含むコンピュータプログラムを提供することがわかる。データプロセッサは、マイクロプロセッサシステム、プログラマブルFPGA(フィールドプログラマブルゲートアレイ)などとしてもよい。
【０１７３】
本発明は、さらに、データ処理手段を備えるグラフィックスプロセッサ、レンダラー、またはマイクロプロセッサシステムを動作させるために使用されたときに前記データ処理手段と併せて前記プロセッサ、レンダラー、またはシステムに本発明の方法のステップを実行させるそのようなソフトウェアを含むコンピュータソフトウェアキャリアにも拡大適用される。このようなコンピュータソフトウェアキャリアは、ROMチップ、CD ROM、またはディスクなどの物理的記憶媒体とすることが可能であるか、またはケーブル上の電子信号、光信号、または衛星もしくは同様のものなどへの無線信号などの信号とすることが可能である。
【０１７４】
さらに、本発明の方法のステップすべてが、コンピュータソフトウェアによって実行される必要はないことは理解されるであろうし、したがって、さらに広い観点から、本発明は、本明細書で説明されている方法の複数のステップのうちの少なくとも1つを実行するために、コンピュータソフトウェアおよびコンピュータソフトウェアキャリア上にインストールされたそのようなソフトウェアを提供する。
【０１７５】
したがって、本発明は、コンピュータシステムとともに使用するためコンピュータプログラム製品として適宜具現化されうる。そのような実装は、コンピュータ可読媒体、例えば、ディスケット、CD-ROM、ROM、またはハードディスクなどの、有形の媒体上に固定された、あるいは限定はしないが、光またはアナログ通信回線を含む有形の媒体上で、あるいは限定はしないが、マイクロ波、赤外線、または他の伝送技術を含む無線技術の無形の手段を使用して、モデムまたは他のインターフェイスデバイスを介して、コンピュータシステムに伝送可能な、一連のコンピュータ可読命令を含むことができる。これら一連のコンピュータ可読命令は、本明細書ですでに説明されている機能の全部または一部を具現化する。
【０１７６】
当業者であれば、このようなコンピュータ可読命令は、多くのコンピュータアーキテクチャまたはオペレーティングシステムとともに使用するために多くのプログラミング言語で作成されうることを理解するであろう。さらに、このような命令は、限定はしないが半導体、磁気、または光を含む、現在の、または将来のメモリ技術を使用して格納されるか、または、限定はしないが光、赤外線、またはマイクロ波を含む、現在の、または将来の通信技術を使用して伝送されうる。このようなコンピュータプログラム製品は、印刷または電子文書を添付した取り外し可能媒体、例えばシステムROMまたは固定ディスク上のコンピュータシステムにプリインストールされている、例えば市販ソフトウェアとして配布されるか、あるいはサーバーまたはネットワーク、例えばインターネットまたはワールドワイドウェブ上の電子掲示板から配布されうることが考えられる。
【０１７７】
次に、本発明の多数の好ましい実施形態について、付属の図面を参照しつつ、実施例のみを使って説明する。
【図面の簡単な説明】
【０１７８】
【図１】例示的なストローク二次ベジエ曲線を示す図である。
【図２】本発明の一実施形態においてストローク曲線がレンダリングされる方法を使用する主プロセスを示す略図である。
【図３ａ】入力されたストローク曲線を正準曲線の対応する部分にマッピングするために必要な変換の決定を示す図である。
【図３ｂ】入力されたストローク曲線を正準曲線の対応する部分にマッピングするために必要な変換の決定を示す図である。
【図３ｃ】入力されたストローク曲線を正準曲線の対応する部分にマッピングするために必要な変換の決定を示す図である。
【図４】ユーザー空間内のストローク曲線から正準空間内の正準曲線の対応する部分への変換を示す略図である。
【図５】正準空間内の二次正準曲線、および正準空間内の特定の位置に関連付けられている正準曲線上の解を示す図である。
【図６】図5の二次正準曲線上に重ね合わされている入力ストローク曲線に対応する円錐曲線の部分を示す図である。
【図７】それぞれが特定のテクスチャに関連付けられている独立したセクションへの正準曲線の細分を示す図である。
【図８】1型の曲線の例を示す図である。
【図９】2型の曲線の例を示す図である。
【図１０】3型の曲線の例を示す図である。
【図１１】5型の曲線の例を示す図である。
【図１２】好ましい実施形態に関連付けられているレンダリングパイプラインを示す図である。
【発明を実施するための形態】
【０１７９】
類似の参照番号は、断りのない限り、図中の類似のコンポーネントに使用される。
【０１８０】
図1に示されているように、ストローク二次ベジエ曲線1の形態のベクターグラフィックスオブジェクトは、最初に、曲線の開始および終了制御点c0およびc2の位置、中間制御点c1の位置、およびストローク幅wによって2Dユーザー空間2内で定義される。
【０１８１】
当技術分野で知られているように、一般的な二次ベジエ曲線は、式
<x(t),y(t)>=P(t)=P0(1-t)2+2P1t(1-t)+P2t2、ただし、t∈[0,1]
によって定義される。
【０１８２】
当業者であれば理解するように、図1に示されている曲線1などのストローク曲線は、自己重複領域と呼ばれる1つまたは複数の領域を含むことができる。負荷が比較的大きい(処理量の多い)レンダリング技術を使用しなければならないことが多い、これらの領域内で、ストローク曲線の一方のセクションが、ストローク曲線の他方のセクションに侵入し、ストローク曲線の中心曲線が滑らかであるにもかかわらずストローク曲線の境界がもはや滑らかでなくなる。
【０１８３】
これらの問題のある、自己重複領域は、本発明の実施形態では、接触円の概念を使用して数学的に決定される。曲線上の与えられた点に対する接触円は、当技術分野で知られているように、曲線の一方の側から他方の側へ曲線上のその点を通って交差する、曲線上のその点において内側(凹側)法線上に載る中心を持つ円である。曲線上の特定の点で定義された接触円の中心および半径は、その点の曲率中心および曲率半径と称する。
【０１８４】
接触円の半径roscは、以下のように数学的に定義され、
【０１８５】
【数１】
2010092481.tif 000003
【０１８６】
ただし、'は、tに関する微分を表す。
【０１８７】
容易に理解できるように、自己重複領域は、曲率半径がストロークの幅の半分より小さい、つまりrosc<w/2である、ストロークの中心曲線上の点において生じる。
【０１８８】
以下の説明では、rosc<w/2である中心曲線上の点に関連付けられているストローク曲線の領域は、「赤色」領域として示され、rosc>w/2である中心曲線上の点に関連付けられているストローク曲線の領域は、「緑色」領域として示される。
【０１８９】
例えば図1に示されているような二次ベジエ曲線の場合、曲率は、常に、天底4で最大になり、天底4から離れる方向に曲線にそって移動するにつれ漸次減少する。したがって、そもそも二次ベジエ曲線が赤色領域を有している場合には、天底4は、少なくとも、「赤色」でなければならない。逆に、天底4が「緑色」である場合、曲線のすべてが緑色となる。
【０１９０】
出願人は、すべてのベジエ二次曲線を、曲線が緑色領域だけからなるか、赤色領域だけからなるか、またはこれらの2つの混合からなるかに基づき特定の型として分類することが可能であることを認識している。より具体的には、本発明の実施形態では、二次ベジエ曲線は、与えられた曲線上で4つの別々のテストを実行することにより分類される。これらのテストは以下のとおりである。
テスト1-曲線の天底は赤色か
テスト2-曲線の開始制御点は赤色か
テスト3-曲線の終了制御点は赤色か
テスト4-曲線の天底は曲線の区間[0,1]内に入っているか
【０１９１】
第1のテストでは、曲線それ自体の上に載っている点である場合もない場合もある(テスト4参照)、曲線の天底4が、赤色であるかどうかを確かめる。言い換えると、天底4の曲率半径が、ストローク幅の半分(w/2)未満であるかどうかが判定され、この判定が真であれば、天底4は赤色であるということである。
【０１９２】
上述のように、天底4は曲線上で最大の曲率を有する点であるため、第1のテストに通らない場合、つまり天底が緑色である場合、曲線上の他のすべての点(開始および終了制御点c0およびc2を含む)も緑色でなければならない。しかし、第1のテストに通った場合、つまり天底が赤色の場合、開始および終了制御点c0およびc2の一方または両方も赤色であるかどうかを次に判定する必要があり、これは第2および第3のテストで実行される。
【０１９３】
第1のテストと同様に、第2および第3のテストで、開始および終了制御点c0およびc2の曲率半径が、ストローク幅の半分(w/2)未満であるかどうかを判定し、2つの点のいずれかについて判定が真であれば、各点は赤色である。
【０１９４】
最後に、第4のテストを使用して、曲線の天底4が、開始制御点と終了制御点との間の曲線上の実際の点に対応しているかどうかを判定する。天底4が、曲線上の1つの点であれば、この天底は、ベジエ曲線のパラメータtの区間[0,1]内にあり、そうでなければ、天底は、区間の外にあり、したがって曲線の外側にある。
【０１９５】
通常、これらのテストは、上に列挙した順序で実行される、つまり、天底4が赤色であるかどうかのテストが最初に実行されるが、これらのテストは必要に応じて任意の順序で実行できることは理解されるであろう。実際には、これらのテストのうちのどれが最初に実行されるかによって、いくつかの事例において実行される必要のあるテストの数を減らすことが可能であることを出願人は認識している。例えば、天底4が最初にテストされ、緑色であることがわかった場合、制御点c0、c2も緑色であるに違いないので制御点c0、c2をテストする必要はない。その代わりに、制御点c0、c2が最初にテストされ、両方とも赤色であることがわかった場合、天底も赤色であるに違いないので天底4をテストする必要はない。
【０１９６】
これから理解されるように、これらのテストでは、以下のような8種類の曲線が定義されることになる。
【０１９７】
【表１】
2010092481.tif 000004
【０１９８】
1型と2型の曲線の場合(例えば、図8および9を参照のこと)、天底が緑色なので、ストローク曲線全体が緑である。同様に、7型の曲線の天底は、赤色であるが、天底は、区間[0,1]内に入らない、つまり、曲線それ自体の上に載っている点ではなく、また始点と終点の両方がそれ自体緑色であるため、ストローク曲線全体がここでもまた緑色になる。
【０１９９】
3型および4型の曲線の場合(例えば、図10を参照のこと)、始点と終点の両方、および天底は赤色なので、曲線全体も、赤色となる(天底が区間[0,1]内に入ろうが入るまいが関係なく)。
【０２００】
5型および6型の曲線の場合(例えば、図11を参照のこと)、天底が赤色で、始点または終点のいずれかも赤色である場合、曲線は、緑色の端点から延びる緑色領域に接する赤色の端点から延びる赤色領域を有する。8型の曲線は、同様に、赤色の天底を有するが、2つの緑色の端点を持つ(緑色の端点1つと赤色端点1つではなく)。したがって、曲線は、天底を取り囲む赤色領域に接する、それぞれ端点のそれぞれから延びる2つの緑色領域を有する。
【０２０１】
赤色領域と緑色領域との間の境界に対応する曲線上の1つまたは複数の点(5、6、および8型の曲線における)は、本発明の実施形態では、曲率半径がストローク幅の半分に等しいパラメータtの1つまたは複数の値を決定することにより、つまり、以下の式を解くことにより、計算される。
【０２０２】
【数２】
2010092481.tif 000005
【０２０３】
出願人は、すべてのストローク二次ベジエ曲線は、上で定義されている8つの型のうちの1つとして分類でき、さらに、特定のストローク曲線のレンダリングの仕方は、曲線の型の判定に依存させることができることを認識している。
【０２０４】
(レンダリングのためグラフィックス処理システムに入力されたストローク曲線が、ストローク三次ベジエ曲線または楕円弧であって、図1に示されているようなストローク二次ベジエ曲線でない場合、入力曲線を複数のストローク二次曲線セグメントに細分して、それぞれの曲線セグメントが上記の8つの型のうちの1つの型に分類され、適宜レンダリングされるようにできる。)
【０２０５】
本発明の実施形態のグラフィックス処理システムは、細分技術(つまり、入力曲線を分割し、システムで利用可能なレンダリングプロセスを別々に使用して分割曲線のそれぞれの異なる部分をレンダリングする)、モザイク細工(例えば、三角形分割)プロセス(つまり、入力曲線(幾何学的形状)を直接レンダリングできる複数のプリミティブ、例えば三角形に分割する)、および図4に概略が示され、以下でさらに詳しく説明されている、レンダリングプロセスを含む、表示するストローク曲線11をレンダリングするために多数の可能なレンダリングプロセスを使用することができる。他の好適な、所望のレンダリング技術も同様に、必要ならばサポートすることが可能である。
【０２０６】
図2に示されているように、ストローク二次ベジエ曲線11の形態のベクターグラフィックスオブジェクトは、最初にユーザー空間12内で定義され、次いで、ストローク曲線11、または典型的にはストローク曲線を定義する情報が、最初にグラフィックス処理システムに入力され、これによって表示するストローク曲線11がレンダリングされる。
【０２０７】
レンダリングプロセスの実行中、当技術分野で知られているように、ユーザー空間12内で定義されているようなストローク曲線(またはストローク曲線の一部)11は、ストローク曲線が表示されるディスプレイの同じパースペクティブ(幾何学的形状)を有する2Dサーフェス空間13内に投影される。ユーザー空間12からサーフェス空間13へストローク曲線11を投影する変換は、ユーザーサーフェス変換(TUS)と一般に呼ばれ、典型的には、非均等スケーリングを伴う。したがって、サーフェス空間13内の投影されたストローク曲線11'のストローク幅は、通常、曲線の長さにそって変化し、ストローク曲線11と同様な単一の定数値を有することはない。
【０２０８】
ストローク曲線11が、サーフェス空間13内に投影され、これにより、投影されたストローク曲線11'を定義した後、サーフェス空間13内で投影されたストローク曲線11'を覆う図2に示されている多角形などのプリミティブ14が生成される。次に、当技術分野で知られているように、プリミティブ14がラスター処理され、ラスター処理プロセスで定義されている複数のサンプリング点が(投影されたストローク曲線11'を境界とする領域内に入っているかどうかに基づき)適宜陰影付けされ、これにより、投影されたストローク曲線11'が表示される。
【０２０９】
この判定(サーフェス空間13内のサンプリング点が、投影されたストローク曲線11'内に入るかどうかの)は、ユーザー空間12内で定義されているようなストローク曲線11を正準空間15の対応する部分11"(本明細書ではストローク正準曲線セグメントと称する)にマッピングし、次いで、サーフェス空間13内のサンプリング点に対応する正準空間15内の位置が、ストローク正準曲線セグメント11"内に入るかどうかを判定する形で行われる。
【０２１０】
正準空間15内で定義される正準曲線16は、上述のように、定義済みの単一または基本的な曲線であって、平行移動、回転、および均等スケーリングのみを使用して、この曲線(または少なくともその一部)に曲線族内のすべての曲線を変換することができる。例えば、ユーザー空間12内で定義されているようなストローク曲線1が二次曲線である本発明の実施形態では、正準曲線16は、曲線y=x2である。
【０２１１】
これから理解されるように、本発明の実施形態を実装するために、ユーザー正準変換(TUC)、つまり、ユーザー空間12内で定義されているようなストローク曲線11を正準曲線16の対応する部分11"にマッピングする変換を決定する必要がある。
【０２１２】
与えられた入力二次ベジエ曲線について本発明の実施形態でユーザー正準変換を導出する方法が図3に示されている。
【０２１３】
上述のように、一般的な二次ベジエ曲線は、式
<x(t),y(t)>=P(t)=P0(1-t)2+2P1t(1-t)+P2t2、ただし、t∈[0,1]
によって定義されるが、正準二次曲線は、式
<x(t'),y(t')>=<t',t'2>
によって定義される。
【０２１４】
ユーザー正準変換は、上述のように、平行移動(行列Mtによって定義される)、回転(行列Mrによって定義される)、および/または均等スケーリング(kを定数、Iを単位行列として、行列Ms=kIによって定義される)のみからなる。
【０２１５】
本実施形態においてユーザー正準変換を決定するプロセスの第1段階は、変換の平行移動成分(平行移動行列Mt)を決定することである。必要な平行移動は、ユーザー空間12内の入力二次ベジエ曲線18の天底(底点)20を正準空間15内の正準曲線16(原点(0,0)における)の天底22へ平行移動するのに必要なものとして決定される-図3(a)を参照。入力曲線18の天底20は、これから理解されるように、最大の曲率を持つ曲線上の点であり、曲線が二次曲線であるため、パラメータtの変化が曲線上の位置の最小の変化をもたらす点でもある。
【０２１６】
入力曲線18上の2点(x,y)と(x+Δx,y+Δy)との間の距離は、
【０２１７】
【数３】
2010092481.tif 000006
【０２１８】
によって与えられ、ΔxおよびΔyがゼロに近づく極限では、曲線上の位置の無限小の変化は
【０２１９】
【数４】
2010092481.tif 000007
【０２２０】
によって与えられるが、ただし、'はtに関する微分を表す。したがって、入力曲線10の天底20の位置は、D'(t)=0となるtの値を計算することにより決定され、これは、(D(t)2)'=0を解くことと同等であり、以下の解を持つ。
ax = x0 - 2x1 + x2
ay=y0-2y1+y2
bx = 2x1 - 2x0
by = 2y1 - 2y0
【０２２１】
【数５】
2010092481.tif 000008
【０２２２】
ただし、式中、(x0,y0)は、ユーザー空間12内のストローク曲線11の開始制御点c0の位置であり(その中心曲線は、入力二次ベジエ曲線18である)、(x1,y1)は、ストローク曲線11の中間制御点c1の位置であり、(x2,y2)は、ストローク曲線11の終了制御点c2の位置である。
【０２２３】
x(t)およびy(t)に対する式にtの上記の値を代入すると、ユーザー空間12内の天底20の(x,y)座標を決定することができ、したがって、入力曲線18の天底20を正準曲線16の天底22に(つまり、正準空間15内の原点(0,0)に)移動するために必要な平行移動を決定することができる。
【０２２４】
ユーザー正準変換の平行移動成分が決定されたら、次は、回転成分(つまり、回転行列Mr)を決定する。このプロセスは、図3(b)に示されている。
【０２２５】
必要な回転は、正準空間15内の平行移動された入力曲線19上に、天底22から等距離のところにある2つの一般的な点30、32を配置することにより決定される。次いで、これら2点の間に直線34を引くことができ、必要な回転は、この直線を水平線にするための必要な回転である(つまり、直線上のすべての点が同じy値を持つようにする)。
【０２２６】
そこで、正準曲線16への平行移動された入力曲線19上の座標(列ベクトルとして与えられる)をとる回転行列Mrを以下のようにして計算することができる。
px =2axt+bx
py =2ayt+by
【０２２７】
【数６】
2010092481.tif 000009
【０２２８】
最後に、ユーザー正準変換の均等スケーリング成分(つまり、スケーリング行列Ms)を決定する。これは、図3(c)に示されている。
【０２２９】
これから理解されるように、正準空間15内へ適当に平行移動され、回転されたユーザー空間12内の入力曲線18、つまり、図3(c)の曲線21は、これで、y=kx2の形をとり、kは、決定すべきスケーリング係数である。したがって、回転行列を計算するために定義された点30と32との間の直線34の長さが、2l1であり、この直線の中点から原点における曲線21の天底へ延びる直線の長さは、l2と定義され、すると、スケーリングの必要なレベルは、以下の式で表される。
【０２３０】
【数７】
2010092481.tif 000010
【０２３１】
ユーザー空間12内で定義されているような入力ストローク曲線11の中心曲線を正準曲線16の対応する部分にマッピングするのに必要なユーザー正準変換、つまり、TUC=MsMrMt=kMrMtが計算された後、ストローク正準曲線セグメント11"によって覆われている正準空間15の実際のセクションが、決定された変換を入力ストローク曲線11のパラメータに適用することにより決定されうる。このプロセスは、図4に例示されている。
【０２３２】
図4に示されているように、ユーザー空間12内で定義されているような、制御点c0、c1、c2およびストローク幅wを有する入力ストローク曲線11は、正準曲線の対応する部分11"へのユーザー正準変換を使用してマッピングされる。ユーザー正準変換の性質上、ストローク正準曲線セグメント11"は、それ自体、単一ストローク幅w"を持つ、正準曲線16上の始点c0"と終点c2"との間に延びるストローク曲線である。
【０２３３】
ストローク正準曲線セグメント11"の始点c0"および終点c2"は、正準空間15内の入力ストローク曲線11のパラメータ(x)範囲を定める。したがって、図4に示されているように、ストローク正準曲線セグメント11"は、パラメータ位置xAおよびxBの間に延びるパラメータ範囲を有する。
【０２３４】
さらに、ストローク正準曲線セグメント11"のストローク幅w"は、ユークリッド距離は均等スケーリングを適用することで均等目盛を持つので、kw、つまり、ユーザー空間内で定義されているような入力ストローク曲線11のストローク幅wにユーザー正準変換のスケーリング係数kを掛けた値に等しい。
【０２３５】
上述のように、サーフェス空間13内のプリミティブ14内のサンプリング点が、投影されたストローク曲線11'内にあるかどうかを判定するために、サンプリング点が、ユーザーサーフェス変換の逆変換を使用してユーザー空間12内の対応する位置にマッピングされ、次いで、ユーザー空間12内のこの位置は、ユーザー正準変換を使用して正準空間15内の対応する位置にマッピングされる。最後に、正準空間15内の対応する位置が、ストローク正準曲線セグメント11"内にあるかどうかに関する判定が行われる。
【０２３６】
正準空間15内の位置は、正準空間15内の位置から正準曲線16上の点に直線(ストローク正準曲線セグメント11"に対する中心曲線を形成する)を引くことが可能な場合にストローク正準曲線セグメント11"の内側にあるものとして定義され、したがって、この直線は、曲線に対し垂直であり、その長さは、(ストローク正準曲線セグメント11"の)ストローク幅の半分以下である。この条件を満たさない正準空間15内のいかなる位置(点)も、ストローク正準曲線セグメント11"の外にある。
【０２３７】
この判定は、本実施形態では正準二次曲線の第2の特性、つまり、正準曲線の平面内の任意の点について、その曲線に垂直な、平面内の点から引くことができる直線の終点となるその曲線上の点の数は定数を上限とするという特性を使用して行われる。したがって、言い換えると、正準空間15内の任意の点((x,y)位置)について、正準曲線16に垂直な直線をその点から正準曲線16上の整数個の点まで引くことが可能である。したがって、正準空間内のそれぞれの(x,y)位置について、n=0,1,2,3として整数n個の解(曲線上のそのような点)があることになる。
【０２３８】
例えば、図5に示されているように、正準空間15内の点40は、3つのそのような解を有する。第1の解、つまり、垂直な直線が曲線16に「ヒット」する場合は、x=x1であり、点x=x1における点40から曲線16までの結果の直線は、長さd1を有する。第2および第3の解は、それぞれ、x=-x2およびx=-x3にあり、関連付けられている直線はそれぞれ長さd2およびd3を有する。
【０２３９】
したがって、正準空間15内の点(位置)に関連付けられている正準曲線16上のそれぞれの解は、第1にそのパラメータ(x)値と第2に正準空間15内の点(位置)からのその垂直距離の2つの情報によって定義されることに留意されたい。
【０２４０】
正準空間15内の特定の位置に対する正準曲線上のそれぞれの解に関するこれら2つの情報は、図6を参照しつつ以下でさらに詳しく説明されるように、本実施形態において、特定の位置が、ストローク正準曲線セグメント11"内にあるかどうかを判定するために使用される。
【０２４１】
図6は、図5にすでに示されている二次正準曲線上に重ね合わされたストローク正準曲線セグメント1"を示しており、ストローク正準曲線セグメント11"はx値の範囲xA≦x≦xBにわたって延び、関連付けられているストローク幅w"を有する。
【０２４２】
正準空間内の点40が、ストローク正準曲線セグメント11"内にあるかどうかを判定するために、最初に、点40に関連付けられている解のうちの少なくとも1つが、範囲xA≦x≦xB内に入るかどうかについて判定される。図6に示されているように、点40に対する第1の解は、所望の範囲内にある、x1のパラメータ(x)値を有することがわかる。次に、この第1の解が、ストローク幅w"の半分以下である垂直距離を有するかどうかが判定される。ここでも図6からわかるように、点40に対する垂直距離d1は、w"/2より小さい。したがって、点40は、ストローク正準曲線セグメント11"内にある。
【０２４３】
(例えば、プリミティブ14が、ストローク曲線の端部に接してぴったり囲まれている多角形として定義されている場合(例えば、図8および9に示されているように)、いくつかの事例では、正準空間内の点に関連付けられている解が正準曲線セグメントのパラメータ範囲内にあるかどうかを判定するテストなしで済ませることが可能であるが、それはパラメータ範囲内にあることがすでに知られているからである(ぴったり囲まれているプリミティブのおかげで、曲線のパラメータ範囲内にある点のみがテストされるのである)。したがって、このような場合、1つまたは複数の解が、ストローク幅w"の半分以下である垂直距離を有するかどうかを判定するだけでよい。)
【０２４４】
このようなテストは、正準空間15内で定義されている複数の離散位置に関連付けられている解に対する上記の2つの情報を格納することにより本実施形態において実行される。本実施形態では、これは正準空間15内の位置の規則的な配列について実行されるが、これは、本質的ではなく、位置は、正準空間15内の任意の所望の点において定義されうる。
【０２４５】
本実施形態では、上記の情報は、1つまたは複数の特別に構成されたグラフィックステクスチャの形で格納される。上述のように、これが特に有利なのは、この形式でデータを格納することにより、グラフィックス処理システムの既存のテクスチャマッピングプロセスを使用してストローク曲線をレンダリングできるからである。
【０２４６】
当技術分野で知られているように、グラフィックステクスチャのそれぞれのテクセル(テクスチャ要素)は通常、4つのチャネル、つまり、赤色チャネル、緑色チャネル、青色チャネル、およびアルファチャネルを有し、そのため、4つの独立のデータを格納することができる。本実施形態では、したがって、第1の解に対する値の集合(つまり、パラメータ値および距離)は、テクセルの赤色および緑色チャネル内に格納され、第2の解に対する値の集合は、テクセルの青色およびアルファチャネル内に格納される。
【０２４７】
したがって、2つより多い解を有する正準空間内の任意の位置で、必要な情報をグラフィックステクスチャの2つ以上のテクセル内に、または他のグラフィックステクスチャ内に、格納することが可能であるが、本実施形態では、グラフィックス処理システムで受け取ったすべての入力ストローク曲線は、天底にそって分割され、これは、正準空間15内の任意の位置について最大2つしかない非負パラメータ値とともにこれらの解を格納するだけでよいことを意味する。したがって、本実施形態では、グラフィックステクスチャのテクセルと正準空間5内の位置との間に1対1の対応関係がある。
【０２４８】
例えば、図5の点40に関連付けられている情報を含んでいた本実施形態で使用されるグラフィックステクスチャは、第1の解に対する値の集合、つまり(x1,d1)を格納するだけであり、第2および第3の解に対する値の集合、つまり、(-x2,d2)および(-x3,d3)を格納しない。点40の鏡像である(つまり、y軸で反射されている)、したがって、解(-x1,d1)、(x2,d2)、および(x3,d2)を有する正準空間内の点について、グラフィックステクスチャは、第2および第3の解に対する値の集合を格納するが、第1の解については格納しない。
【０２４９】
複数のグラフィックステクスチャを実際に構成(使用)することができ、それぞれ正準曲線の特定のセクション(パラメータ範囲)に関連付けられる。例えば、図7を参照すると、第1のテクスチャは、0≦x<xAの範囲内の正準曲線16のセクションについて構成され(つまり、陰影付き領域50内で定義されている複数の離散位置に対する解が格納される)、第2のテクスチャは、0≦x<xBの範囲内の正準曲線16のセクションについて構成され、第3のテクスチャは、0≦x<xCの範囲内の正準曲線のセクションについて構成される。このようにして複数のテクスチャを作成すると、ほとんどの状況では、グラフィックス処理システムによって受け取られる入力ストローク曲線11は、天底のところで分割され(必要ならば)、入力ストローク曲線11のそれぞれのセクションは、単一のテクスチャのみを使用してレンダリングされる。
【０２５０】
上述のように、サーフェス空間13内のサンプリング点が、投影されたストローク曲線11'内にあるかどうかを判定するために、サンプリング点を正準空間15内の対応する位置にマッピングする。正準空間15内のこの位置は、関連付けられている解がテクスチャ内に格納される位置に正確に対応することができる。しかし、サーフェス空間13内のサンプリング点に対応する正準空間15内の位置が、関連付けられている解がテクスチャ内に格納される位置に正確に対応しない場合が多い。そこで、テクスチャは、好適なフィルタリングまたは補間プロセスを使用してサンプリングされる。例えば、本実施形態では、双線形補間プロセスを使用してテクスチャをサンプリングし、所望の位置に最も近い4つの位置に関係する格納されているデータを得て、重み付き平均を実行して、所望の位置に対するデータを決定する。次いで、補間されたデータが上述のように使用されて、その位置に対する解のうちの少なくとも1つが、その位置がストローク正準曲線セグメント11"内にあるかどうかを判定する両方のテストに通るかどうかが判定される。解の1つが、両方のテストに通った場合、その位置は、ストローク正準曲線セグメント11"内にあり、それに応じてサーフェス空間13内のサンプリング点が陰影付けされる。
【０２５１】
この双線形補間プロセスを適切に実装できるように、本実施形態では、絶対距離ではなく符号付き距離が特別に構成されたテクスチャ内に格納される。言い換えると、それぞれの格納されている値は、正準空間15内の関連付けられている位置が、正準曲線16の上にあるのか、下にあるのかに応じて正または負のいずれかの符号を与えられる。
【０２５２】
これからわかるように、テクスチャ内のテクセルのいくつかは、4つすべての成分に対する定義済みの値を持たない。例えば、正準空間の左下象限、つまり、x<0およびy<0の領域内のサンプリング位置に対応するテクセルは、非負パラメータ値を持つ解がなく、そのようなものとして、テクスチャの4つの成分のどれについても定義された値を持たない。それに加えて、ただ1つの解(最大2つの解ではなく)、例えば、図5および6の点40のみを持つサンプリング点に対応するテクセルは、テクスチャの最初の2つの成分に対する定義された値のみを持つ。これらの「欠測」解を考慮し、テスト手順において偽陽性の結果が生じる可能性を回避するために、関連付けられているテクセル中の「欠測」解の距離成分には、比較対照されるストローク幅(の半分)より大きい値が与えられる。
【０２５３】
また、2つの明確に区別できる解を有し、したがってテクスチャの4つすべての成分に対する定義された値を有するのが、正準空間の左上象限、つまり、x<0およびy>0の領域内のサンプリング位置に対応するテクセルのみであることも理解されるであろう。したがって、2つの別々のテクスチャを作成して、第1のテクスチャに正準空間15の4つの象限すべての中の離散位置に対する第1の解の値の集合を格納し、第2のテクスチャに正準空間の左上象限のみの中の離散位置に対する第2の解の値の集合を格納することにより本実施形態におけるテクスチャ格納を最適化することが可能である。(したがって、第2のテクスチャは、第1のテクスチャのサイズの1/4にすぎない。)
【０２５４】
この(1つまたは複数の)テクスチャは、ストローク曲線をレンダリングする効率のよい方法(本明細書では「解テスト」と称する)を提供するために使用され、細分およびモザイク細工(三角形分割)などの他のレンダリングプロセスと併せて、グラフィック処理システムにおける選択オプションとして利用可能である。
【０２５５】
第1の種類の「解テスト」レンダリングでは、解の距離成分のみがテストされるが、これは、本明細書では「プレーンヒット」レンダリングと称される。プレーンヒットレンダリングは、典型的には、プリミティブが強固に結合された多角形である場合にのみ利用可能であり、したがって、(1つまたは複数の)解のパラメータ値をテストする必要がなくなる。
【０２５６】
第2の種類の「解テスト」レンダリングでは、解のパラメータ成分と距離成分の両方がテストされるが、これは、本明細書では「レンジヒット」レンダリングと称される。
【０２５７】
これから理解されるように、レンジヒットレンダリングは、正準空間15内の特定のサンプリング位置がストローク正準曲線セグメント11'内にあるかどうかをテストするために実行する必要のある計算量が多いためプレーンヒットレンダリングに比べて効率が劣り、したがって、ストローク曲線をレンダリングするときにプレーンヒットレンダリングを最大限使用することが望ましい。
【０２５８】
「解テスト」レンダリングがどのように実装されるか、例えば、プレーンヒットレンダリングを使用することが可能か、それともレンジヒットレンダリングを使用することが可能かは、最初にまずプリミティブ14がどのように定義されているかに依存するだけでなく、より重要なことだが、上述の分類技術を使用して受け取ったストローク曲線11が分類される方法にも依存する。
【０２５９】
例えば、上述のように、ストローク曲線の緑色領域(つまり、通常の非自己重複領域)については、正準空間15内の特定のサンプリング位置に対する最も近い解が、ストローク正準曲線セグメント11"内にあるかどうかをテストするだけでよいことは認識されている。
【０２６０】
その一方で、ストローク曲線の赤色領域(つまり、自己重複領域)、または以下でさらに詳しく説明されるように、通常は、赤色領域の一部のみについて、典型的には、正準空間15内の特定のサンプリング位置に対する2つの解のいずれかが、ストローク正準曲線セグメント11"内にあるかどうかをテストする必要がある(常にというわけではないが)。
【０２６１】
したがって、本実施形態では、グラフィックス処理システムが受け取ったそれぞれのストローク二次ベジエ曲線は、上述のように異なる8つの型のうちの1つとして分類され、次いで、これが必要であると判定された場合に、曲線の型に基づき2つ以上の部分に細分される(例えば、この部分で、プレーンヒットレンダリングを使用できるのか、またはレンジヒットレンダリングを使用できるのか、また天底がストロークの中心曲線上に配置されているかどうかに基づき)。ストローク曲線、またはストローク曲線の複数の部分のそれぞれ(曲線が細分されている場合)は、グラフィックス処理システムで利用可能なプロセスのうちから選択された適切なレンダリングプロセスを使用してレンダリングされる。
【０２６２】
1型曲線
この型の例示的なストローク曲線は、図8に示されている。
【０２６３】
この型の曲線の場合、天底は緑色なので、上記の説明から、したがってストローク曲線全体は、緑色であり、したがって全面的にプレーンヒットレンダリングを使用してレンダリングされうることは理解されるであろう。
【０２６４】
そのため、ストローク曲線は、多角形{pL,mL,mK,mR,pR}によって示される、単一部分(ストローク曲線全体を覆う)としてレンダリングされる。
【０２６５】
2型曲線
この型の例示的なストローク曲線は、図9に示されている。
【０２６６】
この型の曲線では、天底は緑色なので、ここでもまた、ストローク曲線全体が緑色であると理解されるであろう。しかし、この場合、天底は、ストロークの中心曲線上にある1つの点である、つまり、区間[0,1]内にあり、テクスチャは非負のパラメータ値を持つ解に対する値の集合を含むだけなので、曲線は、レンダリングされる前に天底の周りで2つの部分に細分されなければならない。第1の部分は、多角形{mL,mLK,mN,pN,pL}を境界とし、第2の部分は、多角形{mN,mRK,mR,pR,pN}を境界とする。
【０２６７】
したがって、それぞれの部分は、1型曲線を効果的に形成し、それぞれ全面的にプレーンヒットレンダリングを使用してレンダリングされる。
【０２６８】
3型曲線
この型の例示的なストローク曲線は、図10に示されている。
【０２６９】
この型の曲線では、両方の端点は赤色なので、上記の説明からストローク曲線全体が赤色であると理解されるであろう。しかし、図12からわかるように、自己重複の領域は、曲線の片側でのみ出現し(この場合は、曲線の上の領域)、したがって、ストローク曲線のこの部分でレンジヒットレンダリングを使用するだけでよい。
【０２７０】
したがって、ストローク曲線は、2つの部分、つまり、多角形{L,pR,pK,pL,R}を境界とし、レンジヒットレンダリングを使用してレンダリングされる、第1の部分および多角形{L,mL,mK,mR,R}を境界とし、プレーンヒットレンダリングを使用してレンダリングされる、第2の部分に細分される。
【０２７１】
4型曲線
この型の曲線では、天底と両方の端点は赤色なので、ストローク曲線全体が赤色であると理解されるであろう。
【０２７２】
この場合、天底は、ストロークの中心曲線上にある1つの点である(3型の曲線とは異なり)、テクスチャは非負のパラメータ値を持つ解に対する値の集合を含むだけなので、曲線は、最初に、レンダリングされる前に天底の周りで2つの部分に細分されなければならない。これらの部分はそれぞれ、これから理解されるように、3型曲線を効果的に形成し、これは、次いで、これに応じてさらにそれぞれの部分を2つの部分に細分することによりレンダリングされ、このときに、それらの部分のうちの一方はプレーンヒットレンダリングを使用してレンダリングされ、他方はレンジヒットレンダリングを使用してレンダリングされる。
【０２７３】
5型曲線
この型の例示的なストローク曲線は、図11に示されている。
【０２７４】
上述のように、この型の曲線は、緑色端点から延びる緑色領域に接する赤色端点から延びる赤色領域を有する。この場合、曲線は、赤色領域と緑色領域の間の境界線、直線{pI,mI}で細分される。次いで、緑色領域、つまり、境界の右側にある曲線の領域は、1型曲線として効果的にレンダリングされうるが、赤色領域、つまり、境界の左側にある曲線の領域は、3型曲線として効果的にレンダリングされうる。言い換えると、曲線は、多角形{pI,cI,mI,mK,mR,R,pR}を境界とする第1のプレーンヒット領域、多角形{cI,L,mL,Lh,mI}を境界とする第2のプレーンヒット領域、および多角形{pI,L,cI,pL,Rh}を境界とするレンジヒット領域としてレンダリングされるということである。
【０２７５】
6型曲線
上述のように、この型の曲線は、緑色端点から延びる緑色領域に接する、赤色端点から延び、天底を通り越す、赤色領域を有する。
【０２７６】
この場合、天底は、ストロークの中心曲線上にある1つの点である(5型の曲線とは異なり)、テクスチャは非負のパラメータ値を持つ解に対する値の集合を含むだけなので、曲線は、最初に、レンダリングされる前に天底の周りで2つの部分に細分されなければならない。これらの部分のうちの1つ、つまり、天底から赤色端点へ延びる部分は、事実上、3型曲線であり、それに応じてレンダリングされうる。他の部分、つまり、天底から緑色端点へ延びる部分は、事実上、5型曲線(赤色領域が緑色領域に接する)であり、したがって、それに応じてレンダリングされうる。
【０２７７】
7型曲線
上述のように、この型の曲線の天底は、赤色であるが、天底は、ストロークの中心曲線上にある点ではなく、2つの端点はそれ自体緑色であるため、曲線全体が緑色である。したがって、7型曲線は、1型曲線としてレンダリングされうる。
【０２７８】
8型曲線
上述のように、この型の曲線は、両方とも天底を取り囲む赤色領域に接する、端点のそれぞれから延びる2つの緑色領域を有する。
【０２７９】
典型的には、これらの曲線は、最初に、天底の周りの2つの部分に細分され(2、4、および6型曲線と同様にして)、次いで、それぞれの部分は、5型曲線としてレンダリングされる(プレーンヒットレンダリングとレンジヒットレンダリングの組合せを使用して)。しかし、いくつかの8型曲線は、全面的にプレーンヒットレンダリングを使用してレンダリングできる(つまり、2型曲線と似た方法でレンダリングされる)。
【０２８０】
これらの「特殊な」8型曲線は、赤色領域が、曲線の緑色端を超えて広がらないときに生じる。これは、赤色領域が及ぶパラメータ値が両端点の絶対パラメータ値より小さいかどうかをチェックすることにより決定されうる。赤色領域に関連付けられているパラメータ値は、数値計算が難しいため、代わりに推定値が使用される。推定値g(w)は、
【０２８１】
【数８】
2010092481.tif 000011
【０２８２】
によって与えられ、パラメータ値の上限を定める(つまり、パラメータ値は、小さくてもよいが、g(w)を決して超えない)。曲線の両端点(正準空間内に変換された後)が、区間[-g(w),g(w)]の外にある場合、曲線は、「特殊な」8型曲線である。
【０２８３】
これらの「特殊な」8型曲線は、図11に示されているように、事実上、2型曲線としてレンダリングされるが、ただし、頂点pNは通常の値
【０２８４】
【数９】
2010092481.tif 000012
【０２８５】
の代わりに「y」座標
【０２８６】
【数１０】
2010092481.tif 000013
【０２８７】
を有する。
【０２８８】
当業者であれば理解するように、異なる種類の入力ストローク曲線は、典型的には、可能であれば上述の方法でプレーンヒットおよび/またはレンジヒットレンダリングを使用してレンダリングされるが、任意のストローク入力曲線、またはその一部は、適切であり、および/または有益であるとみなされた場合に、例えば、細分または三角形へのモザイク細工などの他の利用可能なレンダリング技術、または例えば、対応する基準曲線に関係するデータが格納されている曲線の形式でない場合にグラフィックス処理システムによってサポートされている他の知られている技術のどれかを使用してレンダリングされうる。
【０２８９】
図12は、ストローク曲線をレンダリングするために本実施形態で使用されるレンダリングパイプラインを例示している。
【０２９０】
最初に、ステップ60で、ストローク曲線をユーザー空間内に定義する。ステップ62で、ストローク曲線を分類し、そこで例えば、二次曲線、楕円弧、または三次曲線であると判定する。ストローク曲線が、楕円弧または三次曲線であると判定された場合、それに応じて曲線を複数の二次曲線セグメントに細分する(ステップ64を参照)。
【０２９１】
次いで、ステップ65で、二次曲線、または二次曲線セグメントのそれぞれは、上述の8つの曲線型のうちの1つとして分類される。
【０２９２】
次に、レンダリングする、二次曲線、または二次曲線セグメントのそれぞれ、または自己重複領域が存在するためさらにセグメントを細分しなければならなかった場合には、二次曲線もしくは二次曲線セグメントの部分を、システムのグラフィックス処理ユニット(GPU)に入力し、関連付けられているストローク曲線をGPU内で生成する(ステップ66を参照)。次いで、上述の方法で、ユーザーサーフェス変換(ステップ68)を使用して入力ストローク曲線をサーフェス空間内へ変換し、変換されたストローク曲線を覆うプリミティブを生成してラスター処理する(ステップ70)。
【０２９３】
次いで、上述のプロセス、例えば、プレーンヒットレンダリング、プレーンヒットレンダリングとレンジヒットレンダリングの組合せ、モザイク細工(三角形分割)などを使用することで、ラスター処理プロセスにおいて決定されたサンプリング点のそれぞれが、変換されたストローク曲線内にあるかどうかを判定し、この判定に基づき、サンプリング点をしかるべく陰影付けする。この後者のステップは、当技術分野で知られているように、典型的には、クリップ処理およびマスク処理(ステップ72)、ペイント生成(ステップ74)、画像補間(ステップ76)、ならびにブレンド処理およびアンチエイリアス処理(ステップ78)のステップに分割される。
【０２９４】
本発明のプロセスは、少なくとも一部は、例えば、CPU、および例えば、(頂点シェーダーおよびジオメトリシェーダー内の)プログラム可能なグラフィックハードウェアを使用するか、または固定機能ハードウェア上にある、好適な従来の既存のグラフィックス処理システムを使用して、実装されうる。特に、解テスト(プレーンヒットレンダリングおよびレンジヒットレンダリングで使用される)は、典型的には、フラグメントシェーダーおよび/またはフラグメントパイプラインの他の部分で実行される。
【０２９５】
上記から、本発明は、少なくともその好ましい実施形態において、ストローク経路、および特にストローク曲線を、とりわけ、従来の固定機能3Dグラフィックスハードウェア上で、また未修正の既存のハードウェアグラフィックスアクセラレータ上で、従来の技術で可能な方法に比べて実質的により効率的な(CPUの負荷に関して)方法を用いて、レンダリングするための方法および装置を実現する。
【符号の説明】
【０２９６】
4  天底
11  ストローク曲線
11'  ストローク曲線
11"  ストローク正準曲線セグメント
12  ユーザー空間
13  2Dサーフェス空間
14  プリミティブ
15  正準空間
16  正準曲線
18  入力二次ベジエ曲線
19  入力曲線
20  天底(底点)
22  天底
30、32  一般的な点
34  直線
40  点
【図１】
2010092481.tif 000014
【図２】
2010092481.tif 000015
【図３ａ】
2010092481.tif 000016
【図３ｂ】
2010092481.tif 000017
【図３ｃ】
2010092481.tif 000018
【図４】
2010092481.tif 000019
【図５】
2010092481.tif 000020
【図６】
2010092481.tif 000021
【図７】
2010092481.tif 000022
【図８】
2010092481.tif 000023
【図９】
2010092481.tif 000024
【図１０】
2010092481.tif 000025
【図１１】
2010092481.tif 000026
【図１２】
2010092481.tif 000027
【外国語明細書】
2010092481.tif 000028
2010092481.tif 000029
2010092481.tif 000030
2010092481.tif 000031
2010092481.tif 000032
2010092481.tif 000033
2010092481.tif 000034
2010092481.tif 000035
2010092481.tif 000036
2010092481.tif 000037
2010092481.tif 000038
2010092481.tif 000039
2010092481.tif 000040
2010092481.tif 000041
2010092481.tif 000042
2010092481.tif 000043
2010092481.tif 000044
2010092481.tif 000045
2010092481.tif 000046
2010092481.tif 000047
2010092481.tif 000048
2010092481.tif 000049
2010092481.tif 000050
2010092481.tif 000051
2010092481.tif 000052
2010092481.tif 000053
2010092481.tif 000054
2010092481.tif 000055
2010092481.tif 000056
2010092481.tif 000057
2010092481.tif 000058
2010092481.tif 000059
2010092481.tif 000060
2010092481.tif 000061
2010092481.tif 000062
2010092481.tif 000063
2010092481.tif 000064
2010092481.tif 000065
2010092481.tif 000066
2010092481.tif 000067
2010092481.tif 000068
2010092481.tif 000069
2010092481.tif 000070
2010092481.tif 000071
2010092481.tif 000072
2010092481.tif 000073
2010092481.tif 000074
2010092481.tif 000075
2010092481.tif 000076
2010092481.tif 000077
2010092481.tif 000078
2010092481.tif 000079
2010092481.tif 000080
2010092481.tif 000081
2010092481.tif 000082
2010092481.tif 000083
2010092481.tif 000084
2010092481.tif 000085
2010092481.tif 000086
2010092481.tif 000087
2010092481.tif 000088
2010092481.tif 000089
2010092481.tif 000090
2010092481.tif 000091
2010092481.tif 000092
2010092481.tif 000093
2010092481.tif 000094
2010092481.tif 000095
2010092481.tif 000096
2010092481.tif 000097
2010092481.tif 000098
2010092481.tif 000099
2010092481.tif 000100
2010092481.tif 000101
2010092481.tif 000102
2010092481.tif 000103
2010092481.tif 000104
2010092481.tif 000105
2010092481.tif 000106