JP4385524B2 - ポリゴンデータの生成方法及び、これを用いた画像表示装置 - Google Patents
ポリゴンデータの生成方法及び、これを用いた画像表示装置 Download PDFInfo
- Publication number
- JP4385524B2 JP4385524B2 JP2000558490A JP2000558490A JP4385524B2 JP 4385524 B2 JP4385524 B2 JP 4385524B2 JP 2000558490 A JP2000558490 A JP 2000558490A JP 2000558490 A JP2000558490 A JP 2000558490A JP 4385524 B2 JP4385524 B2 JP 4385524B2
- Authority
- JP
- Japan
- Prior art keywords
- nurbs
- polygon
- model
- curved surface
- screen
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/30—Polynomial surface description
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Physics (AREA)
- Mathematical Analysis (AREA)
- Algebra (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
- Processing Or Creating Images (AREA)
Description
【技術分野】
本発明は、パラメトリック・サーフェスを表すNURBS(Non Uniform Rational B-Spline)曲面でモデリングされるNURBSモデルに基づいてポリゴンを生成する方法及び、それを適用した画像表示装置に関する。
【0002】
【背景技術】
図85は、従来のポリゴンを用いた画像表示装置としてのゲーム装置の一般的構成例を説明する図である。ホストプロセッサ100の制御によりディスプレイ400に表示されるオブジェクトを構成する複数のポリゴンデータが、ゲームプログラムの進行に対応してジオメトリ演算器200に入力される。
【0003】
ジオメトリ演算器200に入力されたポリゴンデータは、各々原点座標を有する3次元のローカル座標でポリゴンを定義している。ジオメトリ演算器200は、このローカル座標で定義されたポリゴンデータを全てのオブジェクトに対して共通のワールド座標系に変換する。
【0004】
さらに、このワールド座標系に置かれた視点を原点とする3次元視点座標に変換する。視点はゲームプログラムの進行に対応して変化するので、この視点の変化に対応してポリゴンの視点座標が更新される。
【0005】
次に、視点座標を原点として、オブジェクトが表示されるディスプレイ400の画面に対応するスクリーンに投影され、ポリゴンデータは、2次元平面座標に変換される。
【0006】
2次元平面座標に変換されたポリゴンデータは、次いで、レンダラー300に入力される。レンダラー300は、ポリゴンデータに基づき、ポリゴンに対するテクスチャの張りつけ、照明効果、RGBの色データの付与等のレンダリング処理を行う。
【0007】
次いで、レンダラー300は、レンダリング処理出力をビデオRAMに書込み、これを繰り返し読み出してディスプレイ400に送ることにより、オブジェクトを表示することができる。
【0008】
一方、近年、ゲーム装置等で表示される人間等のオブジェクトを、3次元コンピュータグラフィック(CG)モデリングツールにより生成されるパラメトリック・サーフェスを表すNURBS(Non Uniform Rational B-Spline)曲面でモデリングされるNURBSモデルによって定義する技術が採用されている。このNURBSモデルは、曲面を有するオブジェクトを定義するのに適した技術である。
【0009】
すなわち、オブジェクトが曲面形状を有する場合に、そのオブジェクトをポリゴンの集合で定義するよりも、NURBSモデルで定義する方が、オブジェクトのデータ量を少なくすることができる。
【0010】
そして、上述のようなオブジェクトをNURBSモデルで定義する技術を想定する場合、従来のゲーム装置では、NURBSモデルを直接扱うことができないので、まず、ゲーム開発装置において、CGモデリングツールによりNURBSモデルがポリゴンに変換され、このポリゴンのデータがゲーム装置のメモリに保存される。
【0011】
この時、NURBS曲面オブジェクトは、多数のポリゴンに変換されるため、ポリゴンに変換された後のデータ量は、非常に大きくなる。このために、これを保存する大容量のメモリが必要となる。
【0012】
ここで、1つのオブジェクトを構成するポリゴンの数は、スクリーン上に表示されるオブジェクトの大きさにより減らすことが可能である。例えば、視点の座標位置との距離が遠くなる程、オブジェクトのスクリーン上に表示される大きさは小さくなり、これを構成するポリゴンの数も小さくできる。
【0013】
しかし、上記想定されるゲーム装置においてNURBS曲面を予めポリゴンに分割したオブジェクトを用いる技術では、表示されるオブジェクトの大きさにかかわらず、これを構成するポリゴンの数を変えていない為に、1つのオブジェクトに対して、表示の大きさにかかわらず、同じ数のポリゴン処理を必要とし、1つのポリゴンが1ピクセルよりも小さな場合でも、ポリゴン処理が必要となる。
【0014】
また、NURBS曲面オブジェクトについて、ポリゴン頂点データでなくNURBS曲面の制御点の段階でジオメトリ演算処理を行うことが可能である。しかし、上記想定されるNURBS曲面オブジェクトを用いたゲーム装置では、ポリゴン頂点データの段階でジオメトリ演算処理を行っているので、処理負荷が重くなる。
【0015】
さらにまた、NURBS曲面オブジェクトを変形する場合は、ホストプロセッサにより、多量のポリゴン頂点を制御することが必要となり、ホストプロセッサとジオメトリ演算器間を接続するバスも多量なポリゴンデータを転送する為に、非常に高いバス帯域が必要とされる。
【0016】
また、NURBSモデルの曲面形状が複雑であるほど、NURBSモデル上の1つの点(即ち、ポリゴンの1つの頂点座標)を求めるための演算量も増大する。
【0017】
従って、NURBSモデルの曲面形状が複雑であるほど、NURBSモデルからポリゴンへの変換処理量も膨大となり、ゲーム装置に必要なリアルタイム処理に支障が生じるおそれがある。
【0018】
このとき、NURBSモデルが複雑な曲面形状である場合であっても、先に言及したようにそれが視点から遠い位置にあって、画面に表示されるオブジェクトのサイズが小さい場合、遊戯者にとって、その複雑な曲面形状を視覚的に判別することは難しい。
【0019】
したがって、画面上のオブジェクトのサイズが小さい場合は、その形状を忠実に多量のポリゴンによって再現する必要がなく、NURBSモデルの曲面形状を多少単純化させて不都合はない。NURBSモデルの曲面形状を単純化すれば、変換されるポリゴンの数を減らすことができるので、ポリゴンデータ量の削減を図ることができる。また、NURBSモデル上の点を求める演算量も少なくなるので、変換処理速度の向上を図ることができる。あるいは、NURBSモデルの曲面形状を単純化する代わりに、単に曲面のサンプリング点の数を減らすことも可能である。
【0020】
しかしながら、上記想定されるゲーム開発装置においてNURBSモデルをポリゴンに変換(複数のポリゴンに分割)して、ポリゴンを生成する方法では、表示されるオブジェクトの大きさにかかわらず、NURBSモデルを単純化することはせず、複雑な形状のNURBSモデルのサイズが小さい場合であっても、その曲面形状のまま、NURBSモデル上の点を演算し、ポリゴンに分割していた。
【0021】
そのため、従来のゲーム装置(画像表示装置)は、膨大なポリゴンデータを記憶する大容量のメモリを必要とし、また、ポリゴンデータの演算手段(CPUなど)に大きな負荷がかかっていた。
【0022】
【発明の概要】
したがって、本発明の目的は、NURBS曲面オブジェクトをポリゴンに変換する技術において、効率的なポリゴンの生成方法及び、これを用いた画像表示装置を提供することにある。
【0023】
さらに、本発明の目的は、NURBS曲面オブジェクトをポリゴンに変換する技術において、変換後のポリゴンの保存のための記憶容量を小さくすることを可能とするポリゴンの生成方法及び、これを用いた画像表示装置を提供することにある。
【0024】
また、本発明の目的は、NURBS曲面オブジェクトをポリゴンに変換する技術において、ホストプロセッサと、ポリゴン描画プロセッサ(レンダリング処理用プロセッサ)間のポリゴンデータ等のデータ転送量を削減可能とするポリゴンの生成方法及び、これを用いた画像表示装置を提供することにある。
【0025】
さらにまた、本発明の目的は、NURBS曲面オブジェクトをポリゴンに変換する技術において、NURBS曲面オブジェクトのデータを直接処理することにより、NURBS曲面オブジェクトからポリゴンに変換するための演算量及び、ポリゴンを描画するプロセッサに与える負荷を最適化することができるポリゴンの生成方法及び、これを用いた画像表示装置を提供することにある。
【0026】
さらに、本発明の目的は、NURBS曲面オブジェクトをポリゴンに変換する技術において、NURBS曲面オブジェクトのデータを直接処理することにより、表示される大きさに応じてNURBS曲面オブジェクトの詳細度を最適化することを可能とするポリゴンの生成方法及び、これを用いた画像表示装置を提供することにある。
【0027】
さらに、本発明の目的は、NURBSモデルをポリゴンに変換して、ポリゴンを生成する技術において、ポリゴンのデータ量を少なくすることができるポリゴン生成方法及びそれを適用した画像表示装置を提供することにある。
【0028】
また、本発明の目的は、NURBSモデルをポリゴンに変換して、ポリゴンを生成する技術において、その変換処理量を軽減することができるポリゴン生成方法及びそれを適用した画像表示装置を提供することにある。
【0029】
さらに、本発明の目的は、NURBS曲面モデルのデータを直接扱う際のトリミングのための演算をできるだけ単純化するトリミング曲線の処理方法及び、これを用いた3次元画像処理システムを提供することにある。
【0030】
さらにまた、トリミングされたNURBS曲面モデルをリアルタイムに描画することを可能とするトリミング曲線の処理方法及び、これを用いた3次元画像処理システムを提供することにある。
【0031】
上記の本発明の課題を達成するポリゴンの生成方法及びこれを用いた画像表示装置は、基本的特徴として、プログラムの進行に対応して、NURBSオブジェクトデータを視点を原点とする座標に座標変換し、且つディスプレィ上にオブジェクトを描画する詳細度を決定し、決定されたオブジェクトを描画する詳細度に従って、NURBSオブジェクトデータをポリゴンにより構成されるオブジェクトに変換する際の該ポリゴンの分割数を求め、該分割数に従って変換されるポリゴンの頂点の計算を行う。さらに、計算された頂点により構成されるポリゴンに対し、レンダリング処理を行う。
【0032】
前記基本的特徴において、具体的態様として、上記計算された頂点のうち前記ディスプレィ上に表示する表示画面から全ての頂点が外れるポリゴンを削除し、残ったポリゴンの頂点に対して、頂点の属性値を計算する。
【0033】
さらにまた、一の態様として、上記計算された頂点を共有する、ポリゴンの2辺の外積を求め、求めた外積の方向と視点方向とからポリゴンの表裏を判定し、裏となるポリゴンを削除した後、残ったポリゴンの頂点に対して、頂点の属性値を計算する(但し、両面表示の属性を持つポリゴンは削除しない)。
【0034】
さらに、一の態様として、前記オブジェクトを描画する詳細度は、前記ディスプレィの表示面積と、この表示面積に表示されるオブジェクトの占める割合によって決定されることを特徴とする。
【0035】
さらにまた、別の態様として前記オブジェクトを描画する詳細度は、プログラムに含まれる実行シーン毎に、前記生成されるポリゴンデータに対するレンダリング処理が過負荷とならないように該プログラムによって調整されることを特徴とする。
【0036】
上記本発明の課題を達成するトリミング曲線の処理方法は、基本的構成として、パラメトリック空間上でu,v方向の複数の頂点で表されるパラメトリック曲面に対応して、u,v方向の頂点数と等しい大きさの2次元配列を生成する。ついで、前記パラメトリック曲面上のトリミング曲線を、前記2次元配列上の直線線分による多角形へ変換する。さらに、変換された多角形内の頂点を有効とするか、無効とするかの判定を行う。
【0037】
更なる本発明の課題と特徴は、以下の図面に従って説明される発明の実施の形態から明らかとなる。
【0038】
【発明を実施するための最良の形態】
以下に本発明の実施の形態を図面に従い説明する。なお、図において、同一又は、類似のものには、同一の参照番号及び、参照記号を付して説明する。
【0039】
ここで、本発明の実施例を説明するに先立って、本発明の理解を容易とするために本発明の対象とされるNURBSモデルについて説明する。
NURBS曲面は、階数分の制御マトリクス(例えば、4×4階ならば16ケ)によって形成されるNURBSモデルの構成要素と定義できる。そして、図86は、NURBSモデルのNURBS曲面を構成するNURBS曲線を説明する図である。
【0040】
NURBS曲線は、「重み(ウエイト)付きの制御点」、曲線にいくつの制御点が影響を与えるかを示す「階数」及び、制御点を混ぜ合わせるブレディング関数を決めるためのパラメータである「ノット列(ノットベクトルとも言う)」から形成される。
【0041】
重み(ウエイト)付きの制御点Qiの基本フォーマットは、3次元座標(x,y,z)とウエイトωを有している。階数Kは、(階数=次数+1)の関係で表される。
【0042】
図86(a)は、階数が2の場合であって、2つの制御点Q1及びQ2によって、一次曲線が形成され、図86(b)は、階数が3の場合であって、3つの制御点Q1、Q2及びQ3によって、二次曲線が形成され、図86(c)は、階数が4の場合であって、4つの制御点Q1、Q2、Q3及びQ4によって三次曲線が形成される。
【0043】
ノット列のフォーマットは、要素u0,u1,u2,…,umで表され、要素の数は、(制御点の数+階数)となる。そして、NURBS曲線上の点P(u)は、次の式(1)により求められる。
【0044】
【数1】
ここで、imax−(imin−1)=階数K
【0045】
また、Mi、K(u)はブレンディング関数で、次のCox-deBoorの漸化式(2)で求められる。
【0046】
【数2】
k=1の時、Mi,1(u)=1 (ui ≦ u < ui+1)
0 (u < ui, ui+1≦u)
【0047】
例えば、図87に示す様に、制御点4つ(Q0〜Q3)、4階(従って、三次曲線)によってNURBS曲線を形成する場合、ノット列は、u0,u1, u2,…,u7の8つが必要である。ブレンディング関数は、図88に示す様に4つのM0,4(u)、M1,4(u)、M2,4(u)、M3,4(u)が必要である。そして、Cox-deBoorの漸化式を展開して、u3≦ u < u4の範囲で曲線が存在することが分かる。
【0048】
さらに、階数を増やすことにより、NURBS曲線は複雑に形成されるが、図89に示すように、通常4階程度のNURBS曲線を1つのセグメントとして、いくつかのセグメントを接続することによって複雑なNURBS曲線を形成する。
【0049】
ただし、隣り合うセグメントを形成する際には、以下の例のようにパラメータを少しずつずらして用いる。この例でも、4階NURBS曲線とする。
【0050】
図89において、曲線セグメント1は、制御点Q0、Q1、Q2、Q3を有し、ノット列はu0, u1, u2, u3, u4, u5, u6, u7(u3≦u<u4に曲線が存在)、ブレンディング関数は、M0,4(u)、M1,4(u)、M2,4(u)、M3,4(u)である。
【0051】
同様に、曲線セグメント2は、制御点Q1, Q2, Q3, Q4を有し、ノット列は、u1, u2, u3, u4, u5, u6, u7, u8(u4≦u<u5に曲線が存在)、ブレンディング関数は、M1,4(u)、M2,4(u)、M3,4(u)、M4,4(u)である。
【0052】
また、同様に、曲線セグメント3は、制御点Q2、Q3、Q4、Q5を有し、ノット列は、u2, u3, u4, u5, u6, u7, u8, u9(u5≦u<u6に曲線が存在)、ブレンディング関数は、M2,4(u)、M3,4(u)、M4,4(u)、M5,4(u)である。
【0053】
曲線全体としては、制御点がQ0〜Q5の6つであり、ノット列は、u0〜u9の10ケ、ブレンディング関数は、M0,4(u)〜M5,4(u)の6種類(uの値を変える毎に再計算が必要)である。
【0054】
さらに一般化して考えると、K階のNURBS曲線のセグメントmケを形成するためには、制御点が(K−1+m)ケ、ノット列が(2K−1+m)ケ必要であり、更にブレンディング関数は、(K−1+m)種類である。
【0055】
上記したNURBS曲線を拡張することにより、NURBS曲面、そしてNURBSモデルが得られる。図90に示すNURBS曲面を考えると、このNURBS曲面は基本的にNURBS曲線の応用である。
【0056】
NURBS曲線を形成する際に定義したノット列(これをuノット列という)の他にもう一つのノット列(これをvノット列という)を定義する。さらに、制御点をu,v座標上にマトリクス状に定義する。
【0057】
ウェイト付き制御点Qij(それぞれ3次元座標:x,y,z、ウェイトωを持つ)及び、u方向、v方向に対して階数K,Lが与えられる。さらに、ノット列u0,u1,u2,…,um、v0,v1,v2,…,vn(要素の数は、それぞれの方向に対する制御点の数+階数)となる。
【0058】
上記のパラメータを用いて、以下の式(3)によってNURBS曲面を形成するデータ上の点P(u,v)が求められる。
【0059】
【数3】
ここで、imax - (imin - 1)=K, j max - (jmin - 1) =L
【0060】
Mi,K(u),Nj,L(v)は、ブレンディング関数で、それぞれ以下のCox-deBoorの漸化式で求められる。
【0061】
【数4】
k=1の時、Mi,1(u) =1 (ui≦ u < ui+1)
0 (u < ui or ui+1 ≦ u)
上記(4)式は、先の式(2)と同様である。
【0062】
【数5】
l=1の時、Nj,1(v) =1 (vj ≦v <vj+1)
0 (v <vj orvj+1 ≦v)
【0063】
上記のように、NURBS曲面上の点P(u,v)は3次元座標:x,y,zとして求めることができる。ところで、一般的なコンピュータ・グラフィック・システムでは、この3次元座標データの他に以下の例のような3種類のアトリビュート・データを持っている。
▲1▼2次元テクスチャ座標:s, t
▲2▼法線ベクトル:(Nx, Ny, Nz)
▲3▼カラー:R,G,B及び半透明度:α
【0064】
NURBS曲面上の点P(u,v)に対するアトリビュート・データを求める方法の例としては、制御点Qijに下記のアトリビュート・データを付加して、3次元座標と同じ計算式を用いる方法がある。
【0065】
すなわち、ウェイト付き制御点Qijのフォーマットとして、3次元座標:x,y,z、2次元テクスチャ座標:s, t、法線ベクトル:(Nx,Ny,Nz)、カラー、半透明度:R,G,B,α、及びウェイト:ωである。このウェイト:ω以外のそれぞれのパラメータを先に説明した計算式P(u,v)、Mi,k、Nj,lに当てはめる。
【0066】
さらに、複雑なNURBSモデルを形成する場合は、上記NURBS曲線の説明と同様に、4階程度のNURBS曲面を1つのパッチとして、いくつかのパッチを接続することによって複雑なNURBS曲面を形成する。曲面の場合もやはり、隣り合うパッチを形成する際にはパラメータを少しずつずらして用いる。また、制御点はマトリクス状に定義し、ノット列や(ノット列の値から求める)ブレンディング関数はu方向、v方向に対して定義する。
【0067】
従って、一般化して考えると、K階×L階NURBS曲面のパッチm×nケを形成するためには、制御点は、(K−1+m)× (L−1+n)ケ必要であり、ノット列はu方向に (2K−1+m)ケ、およびv方向に (2L−1+n)ケ必要である。さらに、ブレンディング関数は、u方向に (K−1+m)種類、およびv方向に (L−1+n)種類必要である。
【0068】
図1は、本発明に従うポリゴンの生成方法を適用した画像表示装置の対象となる、上記のNURBS曲面オブジェクトをポリゴンに変換する技術を用いた画像表示装置としてのゲーム装置の構成例概念ブロック図である。
【0069】
図85に示したジオメトリ演算器200を備えた従来例システムとの比較において、本発明の対象となるNURBS曲面オブジェクトをポリゴンに変換する技術を用いた画像表示装置では、ジオメトリ演算器200に対応する構成が、モデルビュー変換器201、ポリゴン生成器202及び、Bスプライン演算器203で構成されている。
【0070】
さらに、図1において、ホストプロセッサ100の制御により出力されるデータは、ポリゴンデータではなく、上記のNURBS曲面で構成されるオブジェクトデータである。
【0071】
図2は、図1の構成の動作を説明する本発明に従うポリゴンデータ生成方法を適用する概略動作フロー図である。
【0072】
以下詳細に説明される本発明の実現に際しては、画像表示装置にハードウェア要素を組み込んで実現される場合のほか、図示しない記録媒体に格納されたプログラムを画像表示装置において実行制御することにより、あるいは、ファームウェアとして実現することも可能である。
【0073】
図1の動作を図2を参照して説明すると、ホストプロセッサ100の制御によりプログラムの進行に対応してNURBS曲面オブジェクトデータがモデルビュー変換器201に転送される(ステップS1)。
【0074】
モデルビュー変換器201において、NURBS曲面オブジェクトデータに対して、モデルビュー変換(ステップS2)と、本発明の特徴としてオブジェクトを描画する詳細度(LOD:Level Of Detail)を決定する(ステップS3)。
【0075】
ここで、モデルビュー変換は、ローカル座標で得られるNURBS曲面オブジェクトデータの座標を、ワールド座標に変換し、更に視点座標(視点を原点とし、奥行きをZ軸とした座標系)に変換する処理である。
【0076】
これらの変換処理は、NURBS曲面オブジェクトのデータに含まれる制御点座標と、ホストプロセッサ100から送られるオブジェクト変換行列の乗算によって行われる。
【0077】
さらに、LODの決定は、後に具体例として説明するが、モデルビュー変換後、オブジェクトのスクリーンに投影される大きさに基づいて決定される。予めオブジェクトのデータの中にオブジェクトの大きさを表すための値を用意し、その値によって、スクリーンに投影することによりオブジェクトがスクリーンに投影される時の大きさを知ることができる。
【0078】
次に、本発明の特徴として、決定されたLODにしたがってポリゴンの分割数が求められ、分割するポリゴンの頂点計算が行われる(ステップS4)。
【0079】
ここで、上記のLODの決定と、ポリゴンの分割数について、以下に説明する。
【0080】
図3は、オブジェクトがディスプレィ画面に投影された時の画面に占める面積の割合を、概算値Scとして求める説明図である。
【0081】
LODは、この概算値Scと画面解像度Rによって後で説明する方法で決定される。視点Oから中心前方向にz座標が与えられ、中心線から上下、左右方向にそれぞれ45°ずつ開いた視野角を基準にする。
【0082】
図3に示すように、視野角が45°であり、両サイド合わせて90°であることを想定して、あるオブジェクト(モデル)のサイズをSo、オブジェクトの基準点の視点座標系における奥行きをZ、上下の視野角係数をAud、左右の視野角係数をAlr、ユーザーによって与えられる調節のための係数をCとすれば、Sc=(So/Z)2 ×Aud×Alr×C
で表される。
【0083】
視野角係数はスクリーンそのもののサイズに反比例して決定される。視点Oからスクリーンの端 xl までの距離を r'、視点Oからスクリーンの中心 xmまでの距離をlとすると、r'cosθ'=l である。
スクリーンの中心から端までの長さ (xl−xm)は、θ'=45°の時
(xl - xm) = r' sinθ' = 1 である。
【0084】
次に、任意の角度θの場合について検討すると、図4に示すような図になる。そして、次の三角関数の関係があるので、
【0085】
【数6】
角度θにおけるスクリーンの中心から端までの長さ r sinθを求める。
【0086】
ここで、視野角によらず視点からスクリーンまでの距離はlなので、
r cosθ = r' cosθ' = 1、従って、r sinθ= tanθ である。
【0087】
視野角係数Aud、Alrはスクリーンそのもののサイズに反比例して決定される。例えば、θが30°の時、rsinθの値は上式に代入して1/√3なので、視野角係数は√3となる。
【0088】
LODは、上記に求めたオブジェクトの画面占有面積の概算値Scと画面解像度のパラメータRによって決定される。オブジェクトの基準点の視点座標系での奥行きZが、ある値から2倍の値に変わると、Scの値は1/4の値に変わる。この際、LODの値は+1される。
【0089】
例えば、LODが4種類、Nをある定数とすると、図5(A)に示すような関係となる。
【0090】
また、例えばゲームの種類等によって、画面解像度が高い時ほどオブジェクトを細かく(すなわちLODの値をできるだけ小さく)表示したいという要因もある。
【0091】
例えば、画面解像度が800×600から1024×768に変わると、画面全体の画素数は48万画素から約78万画素に増える。その比率(78 /48=1.625)の分だけ、LODの値が小さく維持されるScの区間が大きくなるようにする。
【0092】
したがって、上記の例に当てはめると、図5(B)に示すような関係となる。
【0093】
この様に決定されたLODによって、モデルのu方向、v方向における変換するポリゴンの分割数が決まる。
【0094】
例えば、ユーザーがLODと、u,vの分割数の関係を図6のようなテーブルを与えていた場合、図7に示すようなオブジェクトが、LOD=2の時には図示されるように複数のポリゴンに変換される。
【0095】
ただし、この図7では説明を単純にするために4角形ポリゴンに変換しているが、実際には3角形ポリゴンを形成する。これは、4角形ポリゴンが歪んで表示が不自然になることを避けるためである。
【0096】
さらに図1に戻り説明すると、上記の様にLODに基づき、モデルビュー変換器201によって決定された変換するポリゴン数にしたがって、ポリゴン生成器202とBスプライン演算器203により、NURBS曲面オブジェクトのデータからポリゴンの頂点座標および頂点の属性データが計算される。
【0097】
さらに、ポリゴン生成器202は、計算されたポリゴンの頂点座標および頂点の属性データからポリゴンデータを生成し、ポリゴン描画プロセッサ300に転送する。ポリゴン描画プロセッサ300は、先に図85において説明したレンダラー300に相当する機能を有する(ステップS5)。
【0098】
また、Bスプライン演算器203は、ポリゴン生成器202から送られるBスプライン関数のノットベクトルによって初期化され、与えられた曲面上のパラメータ値および階数値にしたがって、Bスプライン関数の値をポリゴン生成器202に戻す。
【0099】
さらに、上記のポリゴンデータを生成する段階(ステップS5)において、頂点座標の他に、テクスチャ座標、法線ベクトル、頂点のカラー等の頂点の属性データの計算も行われる。これらの属性データの計算は、ポリゴンの頂点座標の計算後、不可視ポリゴンの除去が行われた後で、残されたポリゴンに対して行われる。
【0100】
ついで、ポリゴン描画プロセッサ300において、レンダリング処理が行われ、ポリゴンデータは、図1においては、図示していないディスプレィ装置に送られ表示される(ステップS6)。
【0101】
次に、本発明の特徴とする上記の各ステップについて、実施例に基づき詳細に説明する。
【0102】
図8は、本発明を適用する画像表示装置の実施例構成図である。図8において、図1のホストプロセッサ100は、メインCPU100及びメインCPU用メモリ101に相当して構成される。ポリゴン描画プロセッサ300に対し、レンダリング処理のためのZバッファメモリ、フレームバッファ及び、テクスチャメモリを含むポリゴン描画プロセッサ用メモリ301が備えられる。
【0103】
また、図1のモデルビュー変換器201及びポリゴン生成器202の機能は、サブCPU210及び、サブCPU用メモリ211により実現される。さらに、Bスプライン演算器203の機能は、DSP(デジタル・シグナル・プロセッサ)203により実現される。
【0104】
メインCPU100は、図示しない大容量記憶デバイスに接続され、そこに記録されたNURBS曲面オブジェクトデータをサブCPU210に転送する。
NURBS曲面オブジェクトデータは、以下のデータを含んでいる。
【0105】
▲1▼NURBS曲面オブジェクトの形状に関するデータ(これはワールド座標もしくはオブジェクトのローカル座標の値)、▲2▼NURBS曲面オブジェクトがテクスチャを持つ場合のテクスチャ座標に関するデータ、▲3▼NURBS曲面オブジェクトが、ポリゴン描画プロセッサ300におけるレンダリングにおいて法線ベクトルが必要な場合の法線ベクトルに関するデータ及び、▲4▼NURBS曲面オブジェクトがカラーを必要とする場合の頂点カラーに関するデータ、▲5▼オブジェクトの大きさを表すデータである。
【0106】
さらに、上記▲1▼〜▲5▼のNURBSデータには、以下のデータが含まれている。▲6▼図85に示したuおよびv方向の制御点Qijの数、▲7▼制御点座標とウェイト:NURBS曲面の場合は、uおよびv方向の2次元配列の構造をしており、2次元配列における制御点Qijのそれぞれは3次元空間座標値(x,y,z)を持っている。また、それぞれの制御点はウェイトωの値も持っている。▲8▼u,v方向のそれぞれのBスプライン関数(ウェイトωを有しない関数)の階数(次数+1)及び、▲9▼u,v方向のそれぞれのBスプライン関数を定義するためのノットベクトル等である。
【0107】
ここで、上記▲1▼〜▲5▼のNURBS曲面オブジェクトのデータの他に、オブジェクトの座標を視点座標に変換するためのモデルビュー変換行列及び、LODによってポリゴンへの分割数を決めるためのデータが、メインCPU100からサブCPU210に転送される。
【0108】
サブCPU210は、メインCPU100から送られてきたNURBS曲面オブジェクトを視点座標に変換する。この変換は、NURBS曲面オブジェクトの形状に関するNURBSデータに含まれる制御点座標と、上記のメインCPU100から転送されるモデルビュー変換行列の乗算によって行われる。
【0109】
サブCPU210は、オブジェクトを視点座標に変換後、オブジェクトのスクリーンに投影される大きさによってそのオブジェクトのLODを決定する。予めオブジェクトのNURBSデータの中に当該オブジェクトの大きさを表すための値を用意する。この値からオブジェクトがディスプレイ装置のスクリーン面に投影されるときの大きさを容易に知ることができる。
【0110】
上記において決定されたオブジェクトのLOD及び、メインCPU100から送られてきた、LODによってポリゴンへの分割数を決めるためのデータから、ポリゴンの分割数を決定する。
【0111】
例えば、ポリゴンへの分割数を決めるためのデータとして、図9に示すようなテーブルが形成されている。すなわち、図9において、各LODに対応して、u方向及び、v方向への分割数が与えられている。
【0112】
このように、ポリゴンの分割数はメインCPU100から送られてくるポリゴンの分割数を決めるためのデータによって決定されるので、ユーザは、このポリゴンの分割数を決めるためのデータに含まれる値を、ポリゴン描画プロセッサ300に対して過負荷とならないように、プログラム作成段階において、分割数を設定することができる。
【0113】
次に、サブCPU210は、NURBS曲面オブジェクトデータからポリゴンデータの生成を行う(図2のステップS5に対応する)。これは次の3つの段階で行われる。
【0114】
第1に、NURBS曲面オブジェクトの表面を適切な間隔でサンプリングして、ポリゴンの頂点座標を計算する。
【0115】
第2に、計算された頂点座標からなるポリゴンに対して、全ての頂点座標値が、2次元スクリーン表示領域に含まれないポリゴンを除去(即ち、クリッピング)し、また表裏判定により不可視となるポリゴンを除去する。
【0116】
なお、一部の頂点のみが2次元スクリーン表示領域から外れる場合は、2次元スクリーン表示領域端に新しい頂点が定義される。また、両面表示の属性を持つNURBS曲面オブジェクトからは、両面表示の属性を持つポリゴンが生成される。
【0117】
第3に、上記クリッピング及び、表裏判定により除去されなかった各ポリゴン(頂点)に対してその頂点の属性値(テクスチャ座標、法線ベクトル、頂点カラー)をNURBS曲面オブジェクトの表面からサンプリングする。そして、得られた頂点データをポリゴンデータとしてポリゴン描画プロセッサ300に転送する。
【0118】
ここで、上記属性データの省略について図により説明する。例えば、図13に示すように、つりがね状のNURBS曲面モデルをポリゴン変換した図形の一部が画面に表示されるとする。
【0119】
NURBS曲面モデルをポリゴンに変換する方法は、上記したようにNURBS曲面上のサンプリング点を計算して求め、そのサンプリング点を接続するという方法である。
【0120】
この方法は、頂点座標に対してだけでなく、属性データであるテクスチャ座標、法線ベクトル、頂点カラーなどに対しても適用される。
【0121】
したがって、ポリゴンに変換した段階で完全に画面外に位置していたり、画面内にあっても裏向きになっているポリゴンに対しては、属性データの計算を省略できる。但し、両面表示の属性を持つポリゴンに対しては、たとえ裏向きになっていても属性データの計算を省略できない。この図13のNURBS曲面を展開すると、図14に示す様になる。
【0122】
ポリゴンを構成する全ての頂点が画面外なら、そのポリゴンは完全に画面外に位置しているといえる。さらに、ポリゴンを構成する2辺の外積を計算すれば、その符号により表裏の判定は可能である。
【0123】
ただし、この図13、14では図7と同様に、説明を単純にするために4角形ポリゴンに変換しているが、実際は3角形ポリゴンを形成する。これは、4角形ポリゴンが歪んで表示が不自然となることを避けるためである。
【0124】
次に、本発明の特徴とする上記第1のNURBS曲面オブジェクトの頂点座標の計算の手順の一方法について、図10のポリゴンの頂点座標計算動作フロー(ステップS01)を参照して更に説明する。
【0125】
u,v方向のノットベクトル(UKNOT, VKNOT)および階数(K,L)をBスプライン演算器203即ち、DSP203に送り、これを初期化する(ステップS02)。Bスプライン演算器203は、NURBS曲面オブジェクトデータのブレンディング関数値を計算する機能を有する。
【0126】
オブジェクトのLODによって得られた、u, v方向のポリゴン分割数(Nu、Nv)より、パラメータ変数u、vの増分Δu、Δvを計算する(ステップS03)。このパラメータ変数u、vの増分Δu、Δvは、次の式で表される。
Δu=(パラメータ変数uの最大値−最小値)/Nu
Δv=(パラメータ変数vの最大値−最小値)/Nv
次いで、変数iv(v方向の頂点のインデックス)を0で、変数vをパラメータ変数vの最小値で初期化する(ステップS04)。
【0127】
変数vをBスプライン演算器203に送り、パラメータ変数vにおけるブレンディング関数値、Njmin,L(v),Njmin+1,L(v),……、Njmax,L(v)、および対応する制御点のv方向のインデックス値の範囲[jmin,jmax]を得る(ステップS05)。
【0128】
同様に、変数iu(u方向の頂点のインデックス)を0で、変数uをパラメータ変数uの最小値で初期化する(ステップS06)。ついで、パラメータ変数uにおけるブレンディング関数値、Mimin,K(u),Mimin+1,K(u),……、Mimax,K(u)、および対応する制御点のu方向のインデックス値の範囲[imin,imax]を得る(ステップS07)。
【0129】
上記ステップS05によって得られたv方向のブレンディング関数値と制御点のインデックス値と、上記ステップS07によって得られたu方向のブレンディング関数値と制御点のインデックス値より、同次空間座標系におけるNURBS曲面オブジェクト座標を計算する(ステップS08)。
【0130】
さらに、ステップS08によって得られた値を同次座標成分(w')で除算することよって、NURBS曲面オブジェクトのパラメータ変数u,vにおける座標値が得られる。得られた頂点座標値(x, y, z)および変数(u,v)の値を2次元配列(iu, iv)に保存する(ステップS09)。
【0131】
次いで、変数iuに1を加算し、変数uに増分Δuを加算する(ステップS10)。そして、もしiu <Nuならば、上記ステップS06の処理に戻る(ステップS11)。そうでなければ以下の処理を行う。すなわち、変数ivに1を加算し、変数vに増分Δvを加算する(ステップS12)。
【0132】
もしiv < Nvならば、上記ステップS05の処理に戻る(ステップS13)。そうでなければ曲面のポリゴン変換は終了する。以上の処理によって、2次元配列に曲面オブジェクトの座標データが保存される。
【0133】
ここで、上記ポリゴンの座標計算処理において、図1に示す構成では、ブレンディング関数(Bスプライン関数)値を得るためにBスプライン演算器203を用いている。
【0134】
図8の実施例においては、このBスプライン演算器203は、比較的単純な多量の浮動少数演算が行われることから、サブCPU210から直接アクセスできるDSP203によって実現されている。
【0135】
このBスプライン演算器203は、上記したように、メインCPU100から転送されるNURBS曲面データに含まれるノットベクトルによって初期化され、Bスプライン関数の階数およびパラメータ変数値を与えることによって、Bスプライン関数の演算を行う。
【0136】
そして、有効な制御点のインデックス値の最大値および最小値、Bスプライン関数値(ブレンディング関数値)をサブCPU210に返す。
【0137】
Bスプライン関数は、先に説明したように、式(2)で示された“Cox-deBoorの漸化式"によって計算される。
【0138】
以下に、このBスプライン演算器203の処理手順の一方法を図11のBスプライン演算器203の動作フロー図を参照して説明する。
【0139】
既にBスプライン演算器203には、求めるBスプライン関数のノットベクトル(KNOT[n])および階数(K)が内部にあるメモリに転送されているものとする(ステップ20)。Bスプライン演算器203の内部のメモリは、複数のBスプライン関数のノットベクトルおよび階数を保存することができる様に構成される。
【0140】
次いで、外部よりパラメータ変数値tが与えられる(ステップS21)。与えられたパラメータ変数値tのノットベクトルの有効区間
(KNOT[i] ≦ t < KNOT[i+1])を探し、このインデックス値iの値を、有効インデックス値(I)とする(ステップS22)。
【0141】
さらに、配列N[0]=0、N[1]=0、…、N[K−2]=0、N[K−1]=1、N[K]=0で初期化する(ステップS23)。
【0142】
配列Nに対して、上記のCox-deBoorの漸化式の計算を行う(ステップS24〜30)。配列N[0],N[1],…,N[K−1]の値をBスプライン関数値として返す。また、有効インデックス値IのI−(K−1)の値を有効な制御点インデックスの最小値、Iを有効な制御点のインデックス値の最大値として返す(ステップS31)。なお、図12は、上記の変数及び、演算方法を示す図である。
【0143】
次いで、上記ポリゴン変換処理におけるNURBS曲面オブジェクトの頂点座標の計算により得られた頂点座標の2次元配列から3角形ポリゴンを形成し、そのポリゴン(頂点)の可視/不可視の判定を行う。以下のものが不可視ポリゴンとして除去される。
【0144】
1)ビューボリュームに含まれていないポリゴン
2)視線に対して後ろ向きのポリゴン(ポリゴンの向きは頂点座標より知ることができる)。
【0145】
メインCPU100から転送されるNURBS曲面オブジェクトデータは、モデルの形状に関するNURBSデータの他に、頂点の属性データであるテクスチャ座標、法線ベクトル、頂点カラー等もNURBSデータとして定義されており、上記の不可視ポリゴンの除去によって残ったポリゴン(頂点)に対してこれらの属性値の計算を行う(あるいは、別の方法として、法線ベクトルはオブジェクトをポリゴンに分割した後に、それぞれの接線ベクトルを用いて算出しても良い。また、頂点カラーは定義しなくて、オブジェクト全体に1つのカラーを定義しても良い。)。
【0146】
属性値の計算も上記の頂点座標の計算と同様に行われるが、各頂点におけるパラメータ変数値u,vは頂点データの中に保存されている。これにより、それぞれの属性に対して定義されたNURBSのノットベクトル及び、階数をBスプライン演算器203に転送した後、各頂点データの中に保存されたパラメータ変数値u,vをBスプライン演算器203に与えることによって、NURBSの計算のためのBスプライン関数値を得ることができる。
【0147】
サブCPU210は、以上の処理によって得られたポリゴンの頂点座標、テクスチャ座標、法線ベクトル、カラー値を、ポリゴンデータとしてポリゴン描画プロセッサ300に転送する。必要によっては転送の前にポリゴンデータの並べ替え等を行なう。
【0148】
次に、本発明の特徴の1つとしてNURBSモデルの単純化方法について説明する。NURBSモデルを単純化するための第一の方法は、LODの値に応じて、NURBSモデルの階数を変更することである。
【0149】
すなわち、オブジェクトの投影サイズが小さい場合(LODが大きい場合)、遊戯者が複雑な曲面形状を視覚的に判別しにくい点に着目し、NURBSモデルの階数を下げることによってNURBSモデルを単純化し、NURBSモデルデータ量を少なくする。
【0150】
図15は、NURBSモデルを単純化する第一の方法を説明するための図である。図15に基づき制御点Q0、Q1、Q2、Q3、ウエイトω0、ω1、ω2、ω3、ノット列[t0、t1、t2、t3、t4、t5、t6、t7]から構成されるNURBS曲線の階数を下げる例について説明する。
【0151】
図15(a)は、4階のNURBS曲線を示す図であって、1ヶの三次曲線L1が示される。この三次曲線L1は、4つすべての制御点Q0、Q1、Q2、Q3の影響を受ける曲線セグメントであって、ノット列の要素t3-t4間が、この曲線セグメントL1の有効な範囲である。
【0152】
図15(b)は、図15(a)と比較して、階数を1つ下げた3階のNURBS曲線を示す図であって、2ヶの二次曲線L2、L3が示される。二次曲線L2は、制御点Q0、Q1、Q2の影響を受ける曲線セグメントであって、二次曲線L3は、制御点Q1、Q2、Q3の影響を受ける曲線セグメントである。また、ノット列の要素t2-t3間が、曲線セグメントL2の有効な範囲であり、ノットt3-t4間が、曲線セグメントL3の有効な範囲である。
【0153】
図15(c)は、図15(b)と比較して、さらに階数を1つ下げた2階のNURBS曲線を示す図であって、3ヶの一次曲線L4、L5、L6が示される。一次曲線L4は、Q0、Q1の影響を受ける曲線セグメントであって、一次曲線L5は、制御点Q1、Q2の影響を受ける曲線セグメントであって、一次曲線L6は、制御点Q2、Q3の影響を受ける曲線セグメントである。
【0154】
また、ノットt1-t2間が、曲線セグメントL4の有効な範囲であり、ノットt2-t3間が、曲線セグメントL5の有効な範囲であり、ノットt3-t4間が、曲線セグメントL6の有効な範囲である。
【0155】
このように、制御点4つで構成される曲線セグメントは、階数が下がるにつれて、そのなめらかさが減少し、形状が単純化していく。
【0156】
図16は、4×4階のNURBS曲面の階数を下げる例を示す図である。図16(a)には、4×4階のNURBS曲面が4パッチ示される。1つの曲面パッチは、4つの曲線セグメントで構成される。なお、図16(a)において、uノット列[u0、u1、u2、u3、u4、u5、u6、u7、u8]のうち、要素u3、u4、u5間が、曲線セグメントの有効な範囲であって、vノット列[v0、v1、v2、v3、v4、v5、v6、v7、v8]のうち、要素v3、v4、v5間が、曲線セグメントの有効な範囲である。
【0157】
次に、図16(b)には、図16(a)と比較して、階数を1つ下げた3×3階のNURBS曲面が9パッチ示される。この場合の1つの曲面パッチも、4つの曲線セグメントで構成されるが、各曲線セグメントは、3つの制御点から影響を受ける3階曲線(2次曲線)である。
【0158】
そして、図16(b)において曲線セグメントが有効な範囲は、uノット列[u0、u1、u2、u3、u4、u5、u6、u7]のうちの要素u2、u3、u4、u5間、vノット列[v0、v1、v2、v3、v4、v5、v6、v7]のうちの要素v2、v3、v4、v5間である。
【0159】
さらに、図16(c)には、図16(b)と比較して、さらに階数を一つ下げた2×2階のNURBS曲面が16パッチ示される。この場合の1つの曲面パッチも、上記同様に4つの曲線セグメントで構成されるが、各曲線セグメントは、2つの制御点から影響を受ける2階曲線(1次曲線)である。
【0160】
そして、図16(c)において曲線セグメントが有効な範囲は、uノット列[u0、u1、u2、u3、u4、u5、u6]のうちの要素u1、u2、u3、u4、u5間、vノット列[v0、v1、v2、v3、v4、v5、v6]のうちの要素v1、v2、v3、v4、v5間である。
【0161】
そして、上述の図16を一般化し、K×L階の曲面パッチを(K−1)×(L―1)階の曲面パッチにする場合の、NURBSモデルのパラメータの数を考えてみる。まず、制御点、ウエイトの数は変化しない。ノット列の要素の数は、uノット列、vノット列それぞれ−1となる。上述したように、ノットの数は、制御点の数+階数なので、uノット列、vノット列それぞれ最後の要素が必要なくなる。
【0162】
一方、パッチの数は、階数を−1とすることによって逆に、uノット列、vノット列に対してそれぞれ+1される。即ち、階数−1する前のパッチの数がm×nヶであれば、階数−1した後のパッチの数は、(m+1)×(n+1)ヶになる。
【0163】
このように、階数が下がると、パッチの数は増加するが、ノット列の要素の数が減少するので、上記のNURBS曲面上の点P(u,v)を求める式(3)、及びブレンディング関数値を求める式(4)、(5)を使って、NURBS曲面上の点P(u,v)を求める際の演算量が減少する。
【0164】
例えば、階数K、L両方がそれぞれ4→3→2と小さくなると、上記式(3)における 積の項(MNωQ及び、MNω)は、
42(=16)→32(=9)→22(=4)と減少する。
【0165】
また、ブレンディング関数M、Nを求める演算量についても、図17に示すように、階数が下がることによって少なくなる。図17は、式(3)で点Pの計算に必要なブレンディング関数Mを示した図である。
【0166】
具体的には、図17(a)は、4階曲面パッチ上の点Pの計算に必要なブレンディング関数Mであり、全体で引き算2回及び割り算1回の項が12ヶ、掛け算の項が10ヶ、足し算の項が3ヶある。また、図17(b)は、3階曲面パッチ上の点Pの計算に必要なブレンディング関数Mであって、全体で、引き算2回及び割り算1回の項が6ヶ、掛け算の項が4ヶ、足し算の項が1ヶある。さらに、図17(c)は、2階曲面パッチ上の点Pの計算に必要なブレンディング関数Mであって、引き算2回及び割り算1回の項が2ヶあるだけで、掛け算の項はゼロ、足し算の項もゼロである。なお、ブレンディング関数Nについても同様である。
【0167】
このように、階数が下がることによって、ブレンディング関数M、Nを求めるための演算量が減少する。そして、上述したように、ブレンディング関数M、Nを使った式(3)の演算量も減少する。
【0168】
このブレンディング関数M、Nを求める式(4)、(5)は、NURBSモデルをポリゴンに変換する際に、Bスプライン演算器203によって演算される。また、点Pを求める式(3)は、ポリゴン生成器202で演算される。
【0169】
したがって、このポリゴン生成器202及びBスプライン演算器203の演算処理量を軽減することができ、NURBSモデルからポリゴンへ変換するときの速度を向上させることができる。
【0170】
また、複雑なNURBSモデル(階数が高いほど、また、制御点の数が多いほど、NURBSモデルの形状は複雑である)ほど、その形状をポリゴンで再現するためには、多数のポリゴンに変換する必要がある。従って、多くのNURBSモデル上の点Pが必要となるため、本発明により、階数を下げて各点Pの演算量を少なくすることは、ポリゴン生成器202及びBスプライン演算器203の負荷を軽減するのに有効である。
【0171】
このように、本発明の方法により、LODに応じて、曲面パッチの形状は単純化される。このとき、画面上でのオブジェクトの大きさが小さければ、階数が高いときの複雑な曲面形状と、階数を下げたときの単純な形状を判別することは難しい。
【0172】
したがって、画面上でのオブジェクトが小さくなるにつれて、即ち、LODが大きくなるにつれて、NURBSモデルの階数を下げることで、画面の表示を実質的に変更することなく、NURBSモデルからポリゴンへの変換の際の演算量を減らすことができる。
【0173】
図18は、単純化前のNURBSモデルの階数が4階であるときのLODと階数との対応テーブルの例を示す図である。図18によれば、LOD1又はLOD2のときは、NURBSモデルの階数は変化しないが、LOD3で階数が1つ下がり、LOD4でさらに1つ下がるように設定されている。
【0174】
これにより、画面上でのオブジェクトのサイズが小さくなる場合は、NURBSモデル上の点Pを求める演算量を少なくすることができる。
【0175】
図19は、LODによってNURBSモデルの形状を単純化する上記方法に対して第ニの方法を説明するための図である。上記方法では、NURBSモデルの形状を単純化するためにNURBSモデルを定義する階数が下げられる。
【0176】
このとき、階数を下げる都度、ノット列の有効範囲が広がっていく(そして、曲線セグメントの数、曲面パッチの数が増えていく)。そのため、ノット列の要素の値に基づいて、曲面上のサンプリング点を求め、ポリゴンの頂点座標とする場合、求める頂点座標の数が増え、その分だけ演算量が増加してしまう場合が考えられる。(その代わり、階数を下げても制御点の変更を考慮しなくてよい。) そこで、第二の方法として、階数を下げてもノット列の有効範囲が変わらないように、階数を1つ下げた時に、最初の制御点を無効とし、さらに、最初の要素を削除する。このとき、先の方法で述べられたように、最後の要素も削除される。
【0177】
図19では、図15と同様に、制御点Q0、Q1、Q2、Q3、ウエイトω0、ω1、ω2、ω3、ノット列[t0、t1、t2、t3、t4、t5、t6、t7]から構成されるNURBS曲線の階数を一段階ずつ下げる例について説明する。
【0178】
図19(a)は、図15(a)と同様の図であって、4階のNURBS曲線を示す図であって、1ヶの三次曲線が示される。この三次曲線は、4つすべての制御点Q0、Q1、Q2、Q3の影響を受ける曲線セグメントであって、ノット列の要素t3-t4間が、この曲線セグメントの有効な範囲である。
【0179】
図19(b)には、図15(b)と同様に、階数を1つ下げた3階のNURBS曲線が示されるが、最初の制御点Q0を無効とし、最初の要素t0も削除される。従って、この場合に形成される曲線セグメントは、図示されるように、1ヶの二次曲線であって、曲線セグメントの数は増加しない。そして、ノット列の有効な範囲も変化しない。
【0180】
さらに、図19(c)には、図15(c)と比較して、さらに階数を1つ下げた2階のNURBS曲線が示されるが、さらに、この場合の最初の制御点Q1を無効とし、最初の要素t1も削除される。
【0181】
したがって、この場合に形成される曲線セグメントは、図示されるように、1ヶの1次曲線であって、曲線セグメントの数は、1ヶのままである。また、ノット列の有効範囲も変化しない。
【0182】
上述した曲線セグメントを曲面パッチに拡張しても、上述と同様である。すなわち、階数を下げてもu方向及びv方向それぞれ端の一列分の制御点を無効とし、u方向及びv方向それぞれの最初の要素を削除することで、曲面パッチの数は変化せず、ノット列の有効範囲も変化しない。
【0183】
これにより、曲面パッチの形状が、元の形状と比較して、しぼんだような形状となるが、画面上でのオブジェクトのサイズが小さい場合、その違いを視覚的に判別することは難しい。そして、階数を下げても、曲面パッチの数が増えないので、その曲面パッチ上の点Pを求める演算量を減少させることができる。
【0184】
この第二の方法を一般化すると、K×L階の曲面パッチを(K−1)×(L−1)階の曲面パッチにする場合のパラメータの数を考えると、制御点マトリクスにおけるu方向及びv方向のそれぞれ最初の一列分の制御点を無効とし、ノット列においては、最初と最後の要素が削除される。
【0185】
図20は、上記NURBSモデルを単純化する第二の方法におけるLODと階数との対応テーブルの例を示す図である。図20に示されるように、LODが大きくなるにつれて(画面上のオブジェクトのサイズが小さくなるにつれて)、階数は一段階ずつ下がり、そのとき、有効な制御点の数も1つずつ減少していく。また、ノット列における要素の数も、最初と最後の要素が削除されるので、2つずつ削除される。
【0186】
第二の方法においても、オブジェクトの投影サイズが小さい場合(LODが大きい場合)、遊戯者は複雑な曲面形状を視覚的に判別しにくい点に着目する。
そして、第三の方法では、オブジェクトの投影サイズが小さい場合、NURBSモデルの制御点を減らし、且つ階数を下げることによって、NURBSモデルを単純化する。
【0187】
図21は、4×4階のNURBS曲面を3×3階のNURBS曲面に単純化する例を示す図である。図21(a)には、u方向、v方向に対して5×5=25ヶの制御点Q00〜Q44により構成される4×4階のNURBS曲面が4パッチが示される。
【0188】
各制御点のウエイトをそれぞれω00〜ω44とする。また、uノット列は、[u0、u1、u2、u3、u4、u5、u6、u7、u8]であり、その要素数は、制御点数(5)+階数(4)により、9つである。また、vノット列は、[v0、v1、v2、v3、v4、v5、v6、v7、v8]であり、その要素数は、uノット列同様に9つである。
【0189】
この4×4階の曲面パッチ4つを、できるだけ大きさの等しい3×3階の曲面パッチ1つに単純化する。そのために、制御点をu方向、v方向それぞれ1つおきに削除する。
【0190】
これにより、4×4階の曲面パッチ4つは、図21(b)に示されるように、u方向、v方向に対して3×3=9ヶの制御点により構成される3×3階の曲面パッチ1つに単純化される。
【0191】
また、このとき、残った制御点のウエイトωは、削除前に周囲に存在した制御点の和をとって平均化した値を利用してもよいし、そのまま変更せずに利用してもよい。平均値を用いる方法は、削除された制御点のウエイトが大きかった場合であっても、曲面パッチは、削除される制御点のウエイトもある程度加味されて単純化される。従って、単純化前後の曲面パッチの形状が大きく変わってしまうことが防止されるので好ましい。
【0192】
この平均化する方法について、図22を参照しながら以下に説明する。
【0193】
図22(a)は、単純化前の制御点マトリクスを示し、図22(b)は、単純化後の制御点マトリクスを示す図である。そして、図22(b)に示されるように、例えば、マトリクスにおける四隅の端点の一つであって、単純化後に残った制御点Q00のウエイトω00'には、単純化前の制御点Q00自身のウエイトω00と、削除された周囲の制御点Q01、Q11、Q10のウエイトω01、ω11、ω10との和(4つのウエイト)の平均値が用いられる。
【0194】
同様に、マトリクスにおける四隅以外の端点の一つであって、単純化後に残った制御点Q20のウエイトω10'には、単純化前の制御点Q20自身のウエイトω20と、削除された周囲の制御点Q10、Q11、Q21、Q31、Q30のウエイトω10、ω11、ω21、ω31、ω30との和(6つのウエイト)の平均値が用いられる。
【0195】
さらに、マトリクスにおける端点以外の点であって、単純化後に残る制御点Q22のウエイトω11'には、単純化前の制御点Q22自身のウエイトω22と、削除された周囲のウエイトω11、ω12、ω13、ω23、ω33、ω32、ω31、ω21との和(9つのウエイト)の平均値が用いられる。
【0196】
また、制御点の数と階数を減らすと、u方向、v方向それぞれのノット列の要素数も減らさなけらばならない。具体的には、図21(b)の曲面パッチのu、vノット列の要素数は、制御点数(3)+階数(3)=6つとなるので、単純化前の9つから3つ減らす必要がある。
【0197】
その際に、曲線セグメントの始点と終点に対応するノットの値が変わらないように、且つ曲線セグメントの数が半分になるようにする必要がある。元の曲線セグメントの数が奇数のときは、減少後の数を±1する。
【0198】
例えば、図21のように、4階の曲面パッチ4つを3階の曲面パッチ1つに単純化する場合、4階の曲面パッチ4つのノット列[u0、u1、u2、u3、u4、u5、u6、u7、u8]のうちの曲線セグメントが有効な範囲の要素u3、u4、u5については、中央の要素u4を削除し、曲線セグメントの始点と終点に対応する要素u3及びu5は残す。
【0199】
そして、曲線セグメントが無い範囲の前後3つずつの要素u0、u1、u2及びu6、u7、u8については、最初と最後の要素を残し中央の要素u1、u7を削除する。
【0200】
したがって、uノット列[u0、u2、u3、u5、u6、u8]が3階の曲面パッチ1つのuノット列[u0'、u1'、u2'、u3'、u4'、u5']となる。
【0201】
また、例えば、制御点が7つ、階数が4階で、要素数が7+4=11のuノット列[u0、u1、u2、u3、u4、u5、u6、u7、u8、u9、u10]を、制御点を1つおきに削除し4つとし、階数を3階に下げ、要素数が4+3=7のuノット列[u0'、u1'、u2'、u3'、u4'、u5'、u6']とする場合は、まず、曲線セグメントが有効な範囲の要素u3、u4、u5、u6、u7のうちの両端の要素u3及びu7を残し、一つおきにノットを削除する。
【0202】
即ち、ノットu4、u6を削除する。従って、要素u5は残る。そして、曲線セグメントのない範囲の前後3つずつのノットu0、u1、u2及びu8、u9、u10については、最初と最後の要素u0、u2及びu8、u10を残し、中央のノットu1、u9を削除する。したがって、uノット列[u0、u2、u3、u5、u7、u8、u10]がuノット列[u0'、u1'、u2'、u3'、u4'、u5'、u6']となる。vノット列も同様に、[v0、v2、v3、v5、v7、v8、v10]が[v0'、v1'、v2'、v3'、v4'、v5'、v6']となる。
【0203】
図23は、3×3階のNURBS曲面を2×2階のNURBS曲面に単純化する例を示す図である。
【0204】
図23(a)には、u方向、v方向に対して4×4=16ヶの制御点Q00'〜Q33'により構成される3×3階のNURBS曲面が4パッチ示される。各制御点のウエイトをそれぞれω00'〜ω33'とする。また、uノット列は、上記[u0'、u1'、u2'、u3'、u4'、u5'、u6']=[u0、u2、u3、u5、u7、u8、u10]であり、その要素数は、制御点数(4)+階数(3)により、7つである。
【0205】
また、vノット列は、上記[v0'、v1'、v2'、v3'、v4'、v5'、v6']=[v0、v2、v3、v5、v7、v8、v10]であり、その要素数は、uノット列同様に7つである。
【0206】
この3×3階の曲面パッチ4つを、できるだけ大きさの等しい2×2階の曲面パッチ1つに単純化する。そのために、制御点をu方向、v方向それぞれ2つずつ削除する。
【0207】
このとき、上述の場合と同様に、1つおきに制御点を削除すると、制御点の数が偶数なので、端の制御点が削除されてしまい、単純化後の曲面パッチの大きさが変わってしまう。従って、この場合は、真ん中の制御点2つを削除する。即ち、これにより、3×3階の曲面パッチ4つは、図23(b)に示されるように、u方向、v方向に対して2×2=4ヶの制御点により構成される2×2階の曲面パッチ1つに単純化される。
【0208】
そして、この場合も、制御点の数と階数の減少により、u方向、v方向それぞれのノット列の要素数も減らさなけらばならない。具体的には、図23(b)の曲面パッチのu、vノット列の要素数は、制御点数(2)+階数(2)=4つとなるので、3つ減らす必要がある。
【0209】
削除するノットの選択方法は、上述と同じである。即ち、曲線セグメントの有効な範囲の要素u2'、u3'、u4'(=u3、u5、u7)については、両端の要素u2'、u4'(=u3、u7)を残し、真ん中の要素u3'(=u5)を削除する。そして、その前後の曲線セグメントがない範囲の要素u0'、u1'(=u0、u2)及びu5'、u6'(=u8、u10)については、端の要素u0'(=u0)及びu6'(=u10)を残し、それ以外の要素u1'(=u2)及びu5'(=u8)を削除する。
従って、uノット列[u0'、u2'、u4'、u6']=[u0、u3、u7、u10]が2階の曲面パッチ1つのuノット列[u0''、u1''、u2''、u3'']となる。
また、vノット列も同様に[v0'、v2'、v4'、v6']=[v0、v3、v7、v10]が[v0''、v1''、v2''、v3'']となる。
【0210】
このように、制御点を減らし、且つ階数を下げると、ノットの数が減少するので、上記した式(3)、(4)、(5)を使って、NURBS曲面上の点P(u,v)を求める際の演算量が減少する。その減少量は、上述の図17での説明における減少量と同じである。
【0211】
ただし、この第三の方法の場合は、曲面パッチの数も減少するので、求めるべき点P(u,v)の数も減少するので、演算量をさらに大幅に減少させることができる。
【0212】
図24は、単純化前のNURBSモデルを定義する制御点の数が7×7つであって、階数が4階であるときの、LODに対応する制御点の数と階数の対応テーブルの例を示す図である。図24によれば、LODが1又は2のときは、NURBSモデルの制御点の数及び階数は変化しないが、LOD3で、制御点の数は、4×4に減り、階数も一つ下がり、3階となる。
【0213】
さらに、LOD4で、制御点の数は、2×2に減り、階数もさらに一つ下がり2階となる。これにより、画面上でのオブジェクトのサイズが小さくなる場合は、曲面パッチの数が減り、且つ各曲面パッチ上の点Pを求めるための演算量も減る。従って、NURBSモデルからポリゴンへの変換処理量を大幅に減らすことができ、処理速度の向上につながる。
【0214】
また、曲面パッチの形状も減り、且つ単純化するので、変換されるポリゴンの数も減少し、ポリゴンデータの量も減少する。
【0215】
そして、上述の第三の単純化方法を一般化し、K×L階の曲面パッチ4つを、(K−1)×(L―1)階の曲面パッチ1つにする場合の、NURBSモデルのパラメータの数を考えてみる。
【0216】
このとき、有効な制御点の数は、(K+1)×(L+1)ヶから(K−1)×(L−1)ヶに減少する。このように、u方向及びv方向において、それぞれ2つずつ制御点の数を減らす場合において、(K+1)又は(L+1)が奇数の場合、u方向及びv方向に並んでいる制御点のうち、中央の制御点を囲む2行2列を無効とする。また、(K+1)又は(L+1)が偶数の場合、u方向及びv方向に並んでいる制御点のうち、中央の制御点2行2列を無効とする。
【0217】
そして、制御点が2点減り、階数が1つ下がるので、ノット列の要素の数は、uノット列、vノット列それぞれ−3となる。まず、u方向及びv方向それぞれの曲線セグメントの数が1/2になるようにするため、曲線セグメントの有効な範囲では、端の要素を残し、一つおきに要素を削除する。そして、曲線セグメントの有効な範囲の前後にある曲線セグメントが有効でない範囲では、端の要素を残し、u方向及びv方向それぞれ1つずつ要素を削除する。
【0218】
図25は、図24のテーブルに対応するNURBSモデルの形状及び制御点マトリクスの状態を模式的に表した図である。図25(a)は、LOD1又はLOD2に対する単純化前のNURBSモデルの形状と制御点マトリクスを示す図である。
【0219】
このとき、NURBSモデルは、4階のNURBS曲面16ヶで構成される。そして、制御点マトリクスにおいては、制御点(●)は、u方向及びv方向それぞれ7ヶずつであり、uノット列及びvノット列の各要素(◆)の数は、それぞれ11ヶである。
【0220】
図25(b)は、LOD3に対応するNURBSモデルの形状と制御点マトリクスを示す図である。NURBSモデルは、3階のNURBS曲面4ヶで構成される。そして、制御点マトリクスにおいて、制御点は、端の制御点を残して、1つおきに無効とされる。また、要素は、上述したように、曲線セグメントが有効な範囲及び無効な範囲それぞれにおいて、端の要素を残して、1つおきに無効とされる。
【0221】
即ち、図25(b)の○印で囲まれた制御点(u方向及びv方向それぞれ4ヶずつ)及び要素(u方向及びV方向それぞれ7ヶずつ)が有効となる。
【0222】
図25(c)は、LOD4に対応するNURBSモデルの形状と制御点マトリクスを示す図である。NURBSモデルは、2階のNURBS曲面1ヶで構成される。そして、制御点マトリクスにおいては、図25(b)の制御点マトリクスに対して、端の制御点を残して、さらに、真ん中2行2列の制御点を無効とされる。そして、要素も、曲線セグメントが有効な範囲及び無効な範囲それぞれにおいて、端の要素を残して、さらに1つおきに無効とされる。即ち、図25(c)の○印で囲まれた制御点(u方向及びv方向それぞれ2ヶずつ)及び要素(u方向及びv方向それぞれ4ヶずつ)が有効となる。
【0223】
上記した第一,第二、第三のNURBS曲面の単純化方法は、図8に示した画像表示装置において実現可能である。
【0224】
図8において、上記のNURBS曲面を単純化する第一,第二、第三の方法の実行において、サブCPU210は、上記において決定されたNURBSモデルのLODに基づいて、NURBSモデルの階数を下げる、又は制御点を減らし、且つ階数を下げ、NURBSモデルのデータを図18、図20或いは図24のテーブルデータに基づいて単純化する。
【0225】
このとき、図18、図20或いは図24のテーブルデータは、メインCPU100から送られる。
【0226】
このように、制御点の数及び階数は、メインCPU100から送られてくるテーブルデータによって決定されるので、ユーザは、このデータに含まれる値を、ポリゴン描画プロセッサ300に対して過負荷とならないように、プログラム作成段階において、設定することができる。
【0227】
次に、本発明の実施例として、NURBSモデルを構成する制御点のうち、不要な制御点を除去する方法について説明する。具体的には、NURBSモデルの制御点の座標が視点座標に変換された段階で、NURBSモデルの表裏判定、又はスクリーン内外判定を行い、スクリーンに表示されない曲面パッチにのみ関わる不要な制御点をあらかじめ除去する。これにより、NURBSモデルをポリゴンに変換する際の変換処理量を軽減する。
【0228】
また、この実施の形態における制御点の除去処理は、図1のモデルビュー変換器201によって実行される。
【0229】
まず、NURBSモデルの表裏判定に基づいて、不要な制御点を除去する方法について説明する。図26(a)は、制御点8×7ヶからなる4×4階の球体のNURBSモデルを示す図である。なお、制御点QtとQbは、8つの制御点が重なっている制御点として扱われる。このNURBSモデルが画面(スクリーン)に図26(b)のように表示されるものとする。
【0230】
また、図27は、このNURBSモデルを模式的に展開した図であって、4つの制御点で囲まれた1つの領域が、1つの曲面パッチを表す。また、斜線が施された曲面パッチは、視線方向に対して表向きであって、画面に表示される領域を有する曲面パッチであり、斜線が施されていない曲面パッチは、視線方向に対して裏向きであって、画面に表示されない曲面パッチである。
【0231】
例えば、図27における曲面パッチP1及びP2は、図26(b)に示されるように表示される。図26(b)から明らかなように、曲面パッチP1では、その全ての領域は表側にあり、曲面パッチP1全てがスクリーンに表示されるが、曲面パッチP2では、その一部の領域は表向きであるが、残りの領域は裏向きにあり、表向きの領域だけがスクリーンに表示される。
【0232】
さらに、図27における曲面パッチP3は、全ての領域が裏向きであるため、画面に表示されない。
【0233】
このような表示されない曲面パッチ(全ての領域が裏向きである曲面パッチ)はポリゴンに変換する必要はない。従って、この表示されない曲面パッチにのみに関わる制御点を除去することによって、ポリゴンに変換する曲面パッチの数が減り、NURBSモデルからポリゴンへの変換処理量を低減できる。
【0234】
そして、曲面パッチの少なくとも一部の領域が視線方向に対して表向きであるか否かは、以下に説明する曲面パッチの表裏判定方法によって判定される。
【0235】
図28は、上記曲面パッチの表裏判定方法の原理を説明するための図である。図28において、視点座標系における視点座標Oから各制御点に延びる視線ベクトルAと、NURBSモデルを構成する各制御点の法線ベクトルBとのそれぞれの内積から、各制御点の法線ベクトルBが視点座標O側を向いているかを判定する。以下、各制御点の法線ベクトルBの視点座標O側への向きを表向き、視点座標O側と反対側への向きを裏向きと呼ぶ。
【0236】
視線ベクトルAの成分を(x1、y1、z1)、各制御点の法線ベクトルBの成分を(x2、y2、z2)としたときの内積A・Bは、
A・B=x1x2+y1y2+z1z2=|A|・|B|cosθ
によって求められる。
【0237】
このように、内積A・Bを求めることにより、視線ベクトルAと法線ベクトルBの角度(cosθ)が求められるので、法線ベクトルBの向きを判定することができる。すなわち、視線ベクトルAに対する法線ベクトルBの角度θが90°以上270°以下の間(cosθが0又はマイナス値の間)は、法線ベクトルBは表向きと判定され、0°以上90°未満、及び270°より大きく360°(0°)以下の間(cosθがプラス値の間)は、法線ベクトルBは裏向きと判定される。従って、図28(a)に示される法線ベクトルBは表向き、図28(b)に示される法線ベクトルBは裏向きである。
【0238】
図29は、各制御点の法線ベクトルの向きの表裏分布を示す図である。図29において、白丸で描かれた制御点の法線ベクトルは、表向きと判定された制御点であって、黒丸で描かれた制御点の法線ベクトルは、裏向きと判定された制御点である。そして、4×4階の各曲面パッチに関わる16ヶの制御点のうち、表向きの制御点の数に応じて、曲面パッチの表裏判定が行われる。
【0239】
図30は、表裏判定された曲面パッチを示す図である。図30において、各曲面パッチに関わる16ヶの制御点のうち、表向きの制御点の数が、所定のしきい値(例えば6ヶ)以上ある曲面パッチは、スクリーンの表側と判定され、表向きの制御点の数がしきい値未満の曲面パッチは、スクリーンの裏側と判定される。
【0240】
例えば、曲面パッチP1に関わる4×4=16ヶの制御点(破線H1内に含まれる制御点)のうち、表向きの制御点は15ヶであり、曲面パッチP1は表向きと判定される。また、曲面パッチP2に関わる4×4=16ヶの制御点(破線H2内に含まれる制御点)のうち、表向きの制御点は10ヶであり、曲面パッチP2も表向きと判定される。一方、曲面パッチP3に関わる16ヶの制御点(破線H3に含まれる制御点)のうち、表向きの制御点は5ヶであるので、曲面パッチP3は裏側と判定される。
【0241】
このように、全ての曲面パッチに対して表裏判定を行った結果、表側と判定された曲面パッチのいずれにも関わらない制御点(図中、二重丸で囲まれた制御点)が除去される。
【0242】
なお、上記所定のしきい値を大きくするほど、表側と判定される曲面パッチの数が減り、しきい値を小さくするほど、表側と判定される曲面パッチの数が増える。そして、少なくとも画面に表示される曲面パッチ(図27参照)全てが表側の曲面パッチと判定されるように、しきい値を設定する必要がある。
【0243】
ただし、NURBSモデルの両面表示、トリミング、半透明などの要因により、裏側の曲面パッチも表示される可能性がある場合は、その曲面パッチに関わる制御点は除去されない。
【0244】
さらに、上述において、視線ベクトルAは、各制御点ごとに与えられたが、曲面パッチごとに与えられてよい。即ち、ある曲面パッチに関わる16ヶの制御点に対して同じ視線ベクトルが与えられる。また、複数の曲面パッチにより構成されるNURBSモデルごと、さらには、少なくとも1つのNURBSモデルが表示される画面ごとに与えられてもよい。
【0245】
当然に、各制御点ごとに与えられた視線ベクトルAにより求められた内積が最も正確であるので、制御点ごとの視線ベクトルAを用いることにより、最も精度の高い曲面パッチの表裏判定が可能となる。
【0246】
次に、NURBSモデルの画面内外判定に基づいて、不要な制御点を除去する方法について説明する。図31(a)は、図26(a)と同様の制御点8×7ヶからなる4×4階の球体のNURBSモデルを示す図である。このNURBSモデルが画面(スクリーン)に図31(b)のように表示されるものとする。
【0247】
また、図32は、このNURBSモデルを模式的に展開した図である。例えば、図32における曲面パッチP4及びP5は、図31(b)に示されるように表示される。図31(b)から明らかなように、曲面パッチP4は、画面内にあるが、曲面パッチP5は、画面外にあるので、画面に表示されない。
【0248】
このような画面外の曲面パッチ(全ての領域が画面の外側にある曲面パッチ)P5はポリゴンに変換する必要はない。従って、画面外の曲面パッチにのみ関わる制御点を除去することによって、ポリゴンに変換する曲面パッチの数が減り、NURBSモデルからポリゴンへの変換処理量を低減できる。
【0249】
そして、曲面パッチが画面外にあるか否かは、以下に説明する曲面パッチの画面内外判定方法によって判定される。
まず、図33に示されるように、隣り合う制御点同士及び対角関係にある制御点同士が、制御点を頂点とする三角形を形成するように線分で結ばれる。そして、各線分と画面の各辺との位置関係に基づいて、曲面パッチの画面内外判定が行われる。
【0250】
そして、内外判定の実施例として、その画面内外判定に必要な次のテーブルが用意される。即ち、ある1つの曲面パッチPに関わる16ヶの制御点(図33において、破線H内に含まれる制御点)によって作られる線分それぞれに対応するフラグを有するパッチテーブルが設定される。
【0251】
さらに、ある1つのNURBSモデルに関わる全ての制御点それぞれに対応するフラグを有する制御点テーブルが設定される。
【0252】
図34は、曲面パッチの画面内外判定方法を説明するための図である。図34(a)は、曲面パッチPに関わる制御点全てが、画面の外側にある場合を説明する図である。
【0253】
まず、曲面パッチPに関わる制御点によって作られる線分のうちの1本が選択される。そして、その線分の両端の制御点の座標と、画面の4つの辺のうちの1辺とを比較し、線分の両端の制御点の座標が、画面の1辺より外側である場合、曲面パッチPのパッチテーブルにおけるその線分のフラグが立つ(フラグの値は「1」となる)。
【0254】
また、一方の制御点又は両方の制御点が、スクリーンの1辺より内側である場合は、その線分のフラグは立たない(フラグの値は初期値「0(ゼロ)」のままである)。
【0255】
さらに詳しく説明すると、視点座標系における画面の4つの辺K1、K2、K3、K4のうち、縦方向に延びる2本の辺(縦辺)K1、K3は、視点座標の平面XY座標におけるY方向に延びる辺であり、横方向に延びる2本の辺(横辺)K2、K4は、上記平面XY座標におけるX方向に延びる辺と想定する。
【0256】
例えば、縦辺K3と線分とを比較する場合は、線分の両端の制御点のX座標と、その縦辺K3のX座標とを比較し、制御点のX座標が、縦辺K3のX座標の値以下である場合は、その制御点は画面の内側であると判定され、縦辺K3のX座標の値より大きい場合は、画面の外側であると判定される。反対に、縦辺K1と線分とを比較する場合は、制御点のX座標が、縦辺K1のX座標の値より小さい場合は、その制御点は画面の外側であると判定され、縦辺K1のX座標の値以上の場合は、画面の内側であると判定される。
【0257】
一方、横辺K2と線分とを比較する場合は、線分の両端の制御点のY座標と、その横辺K2のY座標とが比較される。そして、制御点のY座標が、横辺K2のY座標の値以上である場合は、その制御点は画面の内側であると判定され、横辺K2のY座標の値より小さい場合は、画面の外側であると判定される。反対に、横辺K4と線分とを比較する場合は、制御点のY座標が、横辺K4のY座標の値より大きい場合は、その制御点は画面の外側であると判定され、横辺K4のY座標の値以下の場合は、画面の内側であると判定される。
【0258】
このように、画面のある一辺に対して、線分の両端のそれぞれの座標が外側であるか、内側であるかの比較を行い、線分の両方の座標が外側である場合、その線分のフラグが立つ。
【0259】
さらに、フラグが立っていない線分について、上記比較を画面の他の一辺に対して順次行っていく。そして、ある曲面パッチに関わる線分と画面の全ての一辺との比較が終了したときに、その曲面パッチのパッチテーブルのフラグが全て立っていた場合、制御点テーブルにおけるこの曲面パッチに関わる全ての制御点のフラグの値は、「0(ゼロ)」のままとする。
【0260】
即ち、この場合は、曲面パッチPに関わる線分全てが、画面の4つの辺のいずれか1辺との比較において、画面の外側と判定された場合である。
【0261】
一方、図34(b)は、曲面パッチに関わる制御点が画面の内側にある場合を示す図である。この場合、パッチテーブルにおいて、画面の内側にある制御点Qiを端点とする2本の線分Li、Ljに対応するフラグが立たない。このような場合は、制御点テーブルにおけるこの曲面パッチに関わる全ての制御点のフラグの値が立てられる(フラグを「1」にする)。フラグが立てられた制御点は除去されない。
【0262】
こうして、NURBSモデルを構成する複数の曲面パッチについて、上記線分の判定が終了したときに、制御点テーブルにおいて、最終的にフラグが立たなかった制御点が除去される。
【0263】
なお、対角関係にある制御点を結ぶ線分を設けるのは、図35に示すように、1つの曲面パッチが画面を覆うような場合に、曲面パッチが画面外と判定されることを防止するためである。即ち、図35のような場合、制御点を格子状に結んだ線分Lmだけで上述の画面内外判定を行うと、この曲面パッチは画面内に存在するにもかかわらず、画面外と判定されてしまい、この曲面パッチに関わる制御点が除去されるおそれがある。
【0264】
そして、対角関係にある制御点間を結ぶ線分Lnと画面の各辺とを比較すると、この線分のいずれか一方の制御点は画面の内側であると判定されるので、このような不都合を回避することができる。
【0265】
このようにして、ポリゴンに変換される前のNURBSモデルの段階で、画面表示されない曲面パッチにのみ関わる制御点をあらかじめ除去することにより、NURBSモデルからポリゴンへの変換処理量を低減することができる。
【0266】
さらに、本発明の実施例として、制御点を操作して曲面パッチを変形する際の法線ベクトルの計算方法について説明する。この法線ベクトルの計算処理は、図1のモデルビュー変換器201によって実行される。
【0267】
図36(a)は、図26(a)、図31(a)と同様の制御点8×7ヶからなる4×4階の球体のNURBSモデルを示す図である。
【0268】
このNURBSモデルを図36(b)に示すように、右端の制御点Qを右方向に移動して、NURBSモデルが右に引っ張られた形状に変形した場合について説明する。この場合、移動した制御点に関わる曲面パッチは、NURBSモデルの右半分を構成する曲面パッチ16ヶである。さらに、図37は、このNURBSモデルを模式的に展開した図である。図37によれば、移動する制御点Qに関わる曲面パッチ(即ち、NURBSモデルの右半分を構成する曲面パッチ)に斜線が施されている。
【0269】
図38は、かかる移動される制御点に基づく法線ベクトルの計算方法を説明するための図である。まず、図38(a)に示されるように、制御点を格子状に接続する線分を生成する。そうすると、制御点Qを移動することによって、長さが変化する線分は、制御点Qとそれに隣接する4つの制御点との線分Lu、Ld、Ll及びLrである。
【0270】
したがって、この4本の線分に基づいて法線ベクトルの計算が行われる制御点は、移動する制御点Q、及びそれに隣接する4つの制御点Qu、Qd、Ql、Qrの計5つの制御点となる。
【0271】
移動する制御点Qの法線ベクトルを計算する場合、図38(b)に示されるように、その制御点Qを1つの頂点とする4つの四角形D1、D2、D3及びD4を想定する。そして、図38(c)に示されるように、それぞれの四角形を構成する線分のうち、移動する制御点Qから延びる2本のベクトルを想定する。
【0272】
具体的には、図38(c)において、制御点Qから制御点Quに延びる線分LuのベクトルをVu(=Qu−Q)、制御点Qから制御点Qdに延びる線分LdのベクトルをVd(=Qd−Q)、制御点Qから制御点Qrに延びる線分LrのベクトルをVr(=Qr−Q)、制御点Qから制御点Qlに延びる線分LlのベクトルをVl(=Ql−Q)と定義する。
【0273】
かかる定義により、四角形D1においては、ベクトルVuとVl、四角形D2においては、ベクトルVuとVr、四角形D3においては、ベクトルVdとVl、四角形D4においては、ベクトルVdとVrが、制御点Qから延びる2本の線分のベクトルである。
【0274】
即ち、この2本のベクトルは、各ベクトルと各ベクトルに対して制御点Qを中心とした所定の回転方向に隣り合うベクトルである。そして、次のように各四角形における2本のベクトルの外積(即ち、法線ベクトル)を計算し、さらに、それを正規化する。
【0275】
四角形D1における外積A=Vu×Vl、正規化ベクトルA’=A/|A|
四角形D2における外積B=Vr×Vu、正規化ベクトルB’=B/|B|
四角形D3における外積C=Vl×Vd、正規化ベクトルC’=C/|C|
四角形D4における外積D=Vd×Vr、正規化ベクトルD’=D/|D|
が計算される。
【0276】
一般に、ベクトルS=(Sx、Sy、Sz)、ベクトルT=(Tx、Ty、Tz)における外積S×Tは、
S×T=(SyTz−SzTy、SzTx−SxTz、SxTy−SyTx)
により表される。
【0277】
また、正規化ベクトルS’は、
S’=S/|S| (|S|=√(Sx2+Sy2+Sz2))
により表される。
【0278】
そして、正規化された4つの外積(法線ベクトル)A’、B’、C’、D’を平均化し、さらに、その平均化された外積(法線ベクトル)を正規化することにより、移動した制御点Qに対する新しい法線ベクトルVnew’が得られる。平均化された外積をVnewとすると、
Vnew=(A’+B’+C’+D’)/4
で表されるので、新しい法線ベクトルVnew’は、
Vnew’=Vnew/|Vnew|
となる。
【0279】
残りの4点についても、同様の計算により新しい法線ベクトルを求めることができる。例えば、制御点Qlの新しい法線ベクトルは、図39に示すように、制御点Qlを頂点とする4つの四角形を想定し、上述と同様の計算を行うことにより求めることができる。
【0280】
また、図40は、隣り合う複数の制御点を同時に移動する場合の例を示す図である。図40においては、白丸で示された3つの制御点が同時に移動する。このような場合において、新しい法線ベクトルを計算する必要がある制御点は、移動する3つの制御点に加えて、それらに隣接する制御点(大きな黒丸で示された制御点)である。また、移動する制御点の座標について、法線ベクトルの計算に用いられる制御点の座標は、移動後の座標である。
【0281】
さらに、上記実施例では制御点Qを1つの頂点とする4つの四角形の外積を求め、平均化し、新しい法線ベクトルを計算したが、2つのみの外積を求め、平均化し、新しい法線ベクトルを計算してもよい。また、1つのみの四角形の外積を求めて新しい法線ベクトルとしてもよい。
【0282】
当然4つの四角形の外積を求め、平均化した新しい法線ベクトルが最も正確であるので、4つの四角形の外積を求め、平均化し、新しい法線ベクトルを計算することにより、最も精度の高い法線ベクトルの計算が可能となる。
【0283】
再計算された制御点の法線ベクトルは、あらかじめデータとして与えられていた法線ベクトルから置換されて使用される。そして、NURBSモデル上のサンプリング点の法線ベクトルは、NURBSモデルの計算式(上述の式(3))に従って、サンプリング点に関わる制御点の法線ベクトルを混ぜ合わせることによって求められる。
【0284】
即ち、本発明の方法によれば、NURBSモデルが変形する場合も、サンプリング点の法線ベクトルの算出を、NURBSモデルを変形しない場合と同様に、NURBSモデルの計算式(式(3))に従って、高速に行うことができるようになる。
【0285】
従って、NURBSモデルの変形の有無にかかわらず、NURBSモデルの計算式(式(3))を使って、サンプリング点の法線ベクトルを求めることができる。
【0286】
なお、NURBSモデルの計算式(式(3))を用いて、法線ベクトルを混ぜ合わせてサンプリング点の法線ベクトルを求める方法は、NURBSモデルの曲面上のサンプリング点にて接平面を算出し、その垂線を法線ベクトルとする方法に対して演算量に関して優れている。なぜならば、接平面を算出する方法では、NURBSモデルの変形の有無にかかわらず、全てのサンプリング点で複雑な計算を行って、接平面を算出しなければならないからである。
【0287】
また、制御点のウエイトを変更する場合、NURBSモデル上のサンプリング点の計算式(式(3))に従って、制御点の法線ベクトルを混ぜ合わせる段階で、その変更が反映される。
【0288】
したがって、NURBSモデル上のサンプリング点での法線ベクトルにおいても、ウエイトの変更は反映される。
【0289】
上記本発明の方法により、ポリゴンで構成されたオブジェクトを変形する場合と比較して、高速にオブジェクトを変形することができる。なぜならば、ポリゴンで構成されたオブジェクトを変形する場合は、オブジェクトを構成するポリゴン全ての頂点の法線ベクトルを再計算する必要がある。これに対し、本発明の方法によれば、NURBSモデルでオブジェクトが構成されている段階で、オブジェクトの変形のために移動させた制御点とその周囲の制御点の法線ベクトルだけを再計算すればよいからである。
【0290】
ここまで、上記した実施例においては高速且つ奇麗に画像処理を行なうためにNURBS曲面上の点を適切にサンプリングしてポリゴン・データを生成しているが、本発明では、更にNURBS曲面上の点を高速かつ適切にサンプリングする方法も提案される。
【0291】
具体的には、本発明の特徴は、第1にNURBSオブジェクトのスクリーン投影サイズ等を概算して求めるLOD(Level Of Detail)の値によって、NURBSオブジェクトを複数の曲面領域(リージョン)に分割する際の分割数を少なくすることである。
【0292】
これは、NURBSオブジェクトのスクリーン投影サイズが小さいほど複雑な形状が視覚的に判別しにくいという点に着目したことによる。分割数が決まったら、NURBSオブジェクトに対応するu,vノット列の全有効区間を分割する。この時、u,vそれぞれ有効区間の数(ノットの数)が均等になることが望ましい。
【0293】
第2に、曲面リージョンの各(曲)辺に対応する制御点のグループを結んで得られるスクリーン上でのエリアから、曲面リージョンをポリゴンに分割する際の分割数を算出する。
【0294】
これは、制御点のグループを結んで得られるスクリーン上でのエリアが大きいほど曲面リージョンの辺が長く、あるいは曲率が大きくなっていると想定されるためである。
【0295】
曲面リージョンの辺のそれぞれにポリゴン分割数を設定することにより、1つのNURBSオブジェクトの中でも、きめ細かく、かつ無意味にポリゴン数を増やすことなくポリゴン分割を行うことができる。
【0296】
最後に、分割数が決まった後、各曲面リージョンを適切なu,vノット間隔で区切ってポリゴンに分割する。この時、u,vノット間隔がそれぞれ均等になることが望ましい。また、一般にリージョンの各(曲)辺で分割数が異なるので、特定の規則に従ってリージョンの内部分割点を算出して調整する。
【0297】
ここで、NURBSオブジェクトをポリゴンへ分割する例として、7x7制御点、4x4階のNURBSオブジェクトをポリゴンへ分割することを考える(制御点Q00〜Q66、ノット列 [u0,…,u10]、[v0,…,v10])。
【0298】
まず、LODの値による曲面リージョンへの分割数がu,v方向とも2であると仮定する。その場合、NURBSオブジェクトは図41に示すようにu5,v5の曲線で区切られ、4つのリージョン00〜11に分割される(u,vノット列の有効区間は、それぞれu3,…,u7、v3,…,v7で、計16区間ある。)。
【0299】
次に、曲面リージョンの各(曲)辺に影響を与える制御点がどこであるかを考える。4x4階のNURBSオブジェクトでは、1つのu,vノット区間で区切られる部分に対して4x4(=16)ケの制御点が影響を与えている。
例えば,図41では、左下隅のu3〜u4,v3〜v4で区切られる区間Aに影響を与える制御点は図42に示される制御点マトリクスからQ00〜Q33である。
同様にその右隣のu4〜u5,v3〜v4で区切られる区間Bに影響を与える制御点はQ01〜Q34である。
【0300】
しかしながら、u4,v3〜v4の1辺のみについてみると、図42に示す2つの制御点マトリクスの共通部分であるQ01〜Q33の3x4(=12)ケのみが影響を与えている。なぜなら、上記2つの部分は裂け目なく接しているからである。
【0301】
上記の考え方を応用して、図43(A)に示すu3〜u4,v3の辺やu3,v3〜v4の辺について考察すると、u3,v3〜v4の辺に影響を与える制御点は、図43(B)に示すQ00〜Q32の3x4(=12)ケ、u3〜u4,v3の辺に影響を与える制御点は、図43(C)に示すQ00〜Q23の3x4(=12)ケである。
【0302】
さらに応用することにより、結局、NURBSオブジェクトの曲面リージョン00の各(曲)辺に影響を与える制御点は図44に示すごとくである。他の曲面リージョンの辺についても、同様に考えることができる。
【0303】
曲面リージョンの各(曲)辺に対応する制御点のグループを選び出し、次いで、それらの制御点をスクリーン座標に変換する。図45は、その一例であり、図45(B)に示すように、制御点Q00〜Q42のグループが選択された時、図45(A)に示すように制御点がスクリーン座標に変換される。
【0304】
次いで、図45(A)に示すように、隣合う制御点同士を結んで4辺形を形成し、それぞれの4辺形の面積を算出する。なお、図45(A)において、点線は辺の形状に対応する図である。
【0305】
そして、算出した各4辺形の面積の総和をとって「制御点のグループを結んで得られるスクリーン上でのエリア」とする。各4辺形の面積を求める計算は、図46に示すように例えば、制御点Q00〜Q11を有する4辺形を直角三角形に分解して、下記式(6)のように求められる。
【0306】
【数7】
【0307】
上記式でx,yはスクリーン上のx,y座標である。そして、t10からみたQ10の方向及び、t01からみたQ01の方向の2つの方向により、2つの3角形の面積の和をとるのか差をとるのかが決まる。
【0308】
この時、スクリーン上でのオブジェクトの大きさが小さい時など、全ての4辺形の面積を足して正確にエリアの大きさを算出する必要がない場合もある(形状の複雑さによらずエリアの大きさが変わらないので、正確にエリアの大きさを算出することは画像処理の効率が悪い。)。
【0309】
したがって、LOD(Level Of Detail)によって対象とする制御点の数を変えることも可能である。すなわち、スクリーン上でのオブジェクトの大きさが小さい時ほど、対象とする制御点の数を少なくして、概算のエリアの大きさを算出するようにする。
【0310】
図47は、LOD(Level Of Detail)によって対象とする制御点の数を変え、概算のエリアの大きさを算出する例を説明する図である。図47(A)でLOD=1の時の制御点の数を基準にすると、図47(B),図47(C)に示すように、LODが大きくなり、従って、表示されるオブジェクトの大きさが小さくなる程、制御点の数を少なくして概算のエリアの大きさを算出している。そして、各曲面リージョンの各(曲)辺に対して算出したエリアの大きさに比例して、辺の分割数を決定する。
【0311】
次に、各曲面リージョンの分割数が決まったら、u,vノット区間を分割する。この時u,vの間隔が均等になることが望ましい。図48は、u,vノット区間の分割を説明する図である。図48(A)において、黒点はオブジェクトの辺の区切りである。また、黒点を結ぶ辺に付された括弧数字は、辺の分割数である。
【0312】
例えば、図48において、リージョン10の黒点Aとリージョン00の黒点Bを結ぶ辺を左辺、これに対応する右辺をリージョン11の黒点Cとリージョン01の黒点Dを結ぶ辺とし、黒点Aと黒点Cを結ぶ辺を上辺、更に黒点Bと黒点Dを結ぶ辺を下辺と考えることができる。
【0313】
さらに、図48(A)において、各辺の括弧数字は辺の分割数である。ここで、一般に、リージョンの4(曲)辺の上と下、左と右とで分割数が異なる。したがって、図48(B)に示すように、内部分割点を作って、ポリゴンの3角形ストリップと3角形ファンとに分ける。
【0314】
ここで、ポリゴンの3角形ストリップとは図49(A)に示される様に、順次1つだけ新たな頂点を生成し、生成された頂点と2つの頂点を共有するように交互に3角形ポリゴンを接続して形成されるパターンである。
【0315】
また、3角形ファンとは図49(B)に示すように、1つの頂点を全ての3角形ポリゴンが共有する様に繋ぐパターンである。図48(B)において、パターンFA,FB、が3角形ファンであり、その他は3角形ストリップにポリゴンが並べられている。
【0316】
ここで、NURBSオブジェクトをいったん曲面リージョンにすることのメリットを考える。NURBSオブジェクトをポリゴンに分割する時、LODの値によって直接ポリゴン分割数を決めることをしないで、本発明のこの方法では、一旦曲面リージョンに分割している。これは、NURBS形状の中でも比較的平坦な部分と曲率の高い部分とがあり、できるだけ各部分に相応したポリゴン分割数にするためである。
【0317】
例えば、図50に示す様な比較的平坦な部分と曲率の高い部分を持つ折りたたみ図形に対する処理を考える。図50(A)に示す元のNURBSオブジェクトに対し、LODの値によって図50(B)のように、直接ポリゴン分割数を決める場合は、比較的平坦な部分と曲率の高い部分に対する分割数が同じになり、曲率の高い部分の表示が表し難い。
【0318】
一方、一旦図50(C)に示すような曲面リージョンにして(3つの曲面リージョンに分割している)から、図50(D)に示すように、代表制御点間の距離に従って、ポリゴン分割数を決める場合は、曲率の高い部分に対する好ましい表示が可能である。
【0319】
図51は、図49(A)に示したNURBSオブジェクトに対し、LODの値によって直接ポリゴン分割数を決めた場合(図51(A))と、曲面リージョンにしてから、ポリゴン分割数を決めた場合(図51(B))を比較して示す図である。図51(B)の方が、曲率が良く表されている。
【0320】
次に図52に示す図を例にして、曲面パッチをどのように3角形ポリゴンに分割するかを説明する。図52(A)に示す図は、区切り点(0,0)−(1.0,0)間の辺A, 区切り点(0,0)−(0,1.0)間の辺B,区切り点(1.0,1.0)−(1.0,0)間の辺C,区切り点(0,1.0)−(1.0,1.0)間の辺Dを有する。そして、辺A, 辺B,辺C,辺Dのそれぞれの分割数は、3,2,4,4である。
【0321】
かかる図52(A)に示す図に対し、第1に、図52(B)に示すように、ある一(曲)辺Aを底として、両隣の辺B,Cの分割点を底に近い方から1つずつ、どちらかの隣の区切り点に至るまで結ぶ。図52(B)では、区切り点(0,1.0)に至るまで結ぶ。
【0322】
それによってできた辺E、辺Fを底辺と同じ分割数(図52の例では分割数3)で、ノットの間隔ができるだけ均等になるように分割し、内分点を作る。そして、作られた内分点を結んで3角形ストリップ(図49(A)参照)を形成する。
【0323】
そして、上記処理により図52(B)に示す様に、ポリゴンに分割していない部分aは3辺形になる。
【0324】
第1の処理によってできた内分点の辺Fを底として、図52(C)に示すごとく同様に両隣の辺の分割点を底に近い方から1つずつ、どちらかの辺の分割点がなくなるまで結ぶ。
【0325】
次に第2の処理として、上記辺Gを(底辺−1)(底辺が1の時には分割しない)の分割数で分割し、内分点をつくる。そして、上記第1の処理と同様に内分点を結んで3角形ストリップを形成する。
【0326】
そして、第2の処理により、ポリゴンに分割していない部分bは、多くとも2辺のみに分割点を持つ3辺形になる。
【0327】
第3の処理として、この分割点のない辺Hを底として、図52(D)に示す様に、両隣の辺の分割点を底に近い方から1つずつ、どちらかの辺の分割点がなくなるまで結ぶ。それによってできた各4辺形の対角線を結んで3角形を2つずつ形成する。図52(D)の例では4辺形は1つのみである。
【0328】
次に第4の処理として、第3の処理により、ポリゴン分割していない部分cは、多くとも1辺のみに分割点を持つ3辺形になる。したがって、図52(E)に示すように残っている分割点と分割点を持たない2辺の接点を結んで3角形ファン(図49(B)参照)を形成する。
最終的に、曲面パッチは図52(F)のように複数の3角形ポリゴンに分割される。
【0329】
ここで、図52により説明した分割方法では曲面パッチの任意の1(曲)辺Aを底としている(図53(A)参照)。しかし、たまたま最も分割数の少ない辺B(分割数は2である。)を底とした場合は、ポリゴンの曲面近似誤差が許容範囲を超えてしまう可能性がある。すなわち、図53(B)では、最も分割数の少ない辺Bを底としたことにより、分割が荒すぎることになる。
【0330】
したがって、これを防ぐには底辺を任意とせず、次の条件1または2のようにする方法も可能である。
条件1:底辺を最も分割数の多い辺にとる。(この場合、近似誤差が最も小さくなる代わりに、発生するポリゴン数も多くなる。)
条件2:底辺を、全ての辺の分割数を平均した値に最も近い分割数の辺にとる。
【0331】
上記したNURBS曲面パッチを3角形ポリゴンに分割する方法を一般化してそのアルゴリズムを次のように纏めることができる。
1.上記条件1又は条件2のいずれかにより底辺を求める。
2.左右の辺のうち、短かい方のU又はVステップ数だけ、ただし左右の辺のステップ数が同じなら(ステップ数−1)だけ、かつ各ステップについて底辺のステップ数だけ、UV値を補間して求める。これにより3角形ストリップ情報が生成される。
なお、上記“左右の辺のステップ数が同じなら(ステップ数−1)だけ”という要件は、図53(C)に示すような場合に、辺Xを4分割としないためである。
3.左右の辺のうち(長いステップ数−1−短いステップ数)または(次の辺のステップ数−1)の短かい方のU又はVステップ数だけ、かつ各ステップについて(底辺のステップ数−1)のステップ数だけ、UV値を補間して求める。
ただし上記2.で左右の辺のステップ数が同じであったなら3.では何もしない。 ここで、新たな3角形ストリップ情報が生成される。
この3.のステップが複数回ある場合は、図53(D)に示すように、ステップ数は1ずつ少なくなる。
4.底辺を、左右の辺のうち長い方の辺の、残りのステップの部分に切り替える。
5.切り替えられた底辺に対する左右の辺のうち(短かいステップ数−1)だけ3角形ストリップを生成する。
6.残りのステップを用いて3角形ファンを生成する。
【0332】
ここで、上記NURBSオブジェクトの分割における計算処理について考察する。
【0333】
NURBSオブジェクトを曲面リージョンに分割し、更にサンプリング点を取って3角形ストリップや3角形ファンに分割する際、3角形ストリップまたは3角形ファンを生成する毎に各ポリゴンの頂点のu,vノット値から3D頂点座標を算出したのでは、曲面リージョンの各頂点に対し2,3回重複計算をすることになってしまい効率が悪い。
【0334】
そこで、本発明では、曲面リージョンの全ての頂点を包含できるようなテーブルを用意し、いったん各頂点のu,vノット値を格納する。また、3角形ストリップや3角形ファンに戻すための接続情報も作成する。
そして、格納されたu,vノットの値からポリゴンの3D頂点座標を算出するようにする。これにより各頂点に対する重複計算がなくなるので効率が良い。
【0335】
かかる3D頂点座標の計算回数を少なくする例を図54に示す。図54(A)では、3角形ストリップを生成する毎に頂点座標を計算する場合である。したがって、ストリップ#1、#2は頂点を8ケ有し、ストリップ#3は頂点を7ケ、ストリップ#4は頂点を4ケ有し、ひとつのファンは頂点を4ケ有する。
【0336】
したがって、頂点は合計31ケ有する。これら31ケの頂点は、ストリップ#1〜#4及び、ファンに対して、重複して有している。したがって、31回の頂点計算において重複した計算機会が生じることになる。
【0337】
これに対し、図55に示すようにポリゴンに分割した時の頂点番号をテーブルに登録する。図55に示すテーブルに登録されたNURBSオブジェクトの頂点番号に対応する(u,v)から3D頂点座標x,y,zを算出する。これにより、図54(B)に示す様に、ストリップ#1〜#4およびファンはこれら頂点を結ぶ接続情報によって特定される。
【0338】
すなわち、ストリップ#1は頂点3−7−2−6−1−5−0−4の如くである。ファンは頂点13が重複し、接続情報として13=16−17−12で特定される。
【0339】
このようにテーブルを用いることにより、頂点の数18ケに対応する頂点の計算回数で済むことができる。
【0340】
ここで、上記のように、テーブルに登録された頂点番号から3D頂点座標を計算することによって、先に図13、図14について説明したと同様にポリゴンがスクリーンの内側に位置するか外側に位置するか、また、視点から表向きになっているか裏向きになっているかがわかる。
【0341】
したがって、3D頂点座標を算出した段階でスクリーンの外側に位置するポリゴンや、視点から裏向きになっているポリゴンの頂点を除去することが可能である。これによって、その後のアトリビュート(テクスチャ座標、法線、カラー、半透明度など)についての頂点のNURBS演算の負荷を軽減することができる。
【0342】
また、3D頂点座標を算出した段階でトリミングも行い、さらにポリゴンの頂点を除去することも可能である。
【0343】
図56は、かかるポリゴンの削除を説明する図である。NURBSオブジェクトの頂点3、7を含む3角形即ち、ポリゴンはスクリーンSCの外側にあるため非表示となる。したがって、頂点3、7は頂点計算対象から削除することが可能である。
【0344】
あるいは、スクリーンSCの内側であっても、トリミングにより削除される場合は、非表示である。図56に示す例では頂点8を含む点線半円がトリミングによって削除されるので、この点線半円に含まれる頂点8を有する3角形が非表示になるので、頂点8の計算を削除することができる。
【0345】
また、視点から裏向きになっているポリゴンの頂点も削除できるが、このポリゴンが裏であるか否かの判定は、2辺の外積(法線ベクトル)を求めてその向きから判断することにより可能である。
【0346】
次に、NURBS曲面上のサンプリング点のデータを算出する式を検討して、更に演算の負荷を軽減する方法を提案する。
【0347】
NURBS曲面上の点P(u,v)は、先に示した式(3)〜式(5)により求められる。そして、実際には各制御点Q、曲面上の点Pは次のようなパラメータを持っており、それぞれのパラメータを上記式(3)〜式(5)を使って算出しなければならない。
【0348】
▲1▼ 3D座標:x, y, z
▲2▼ 2Dテクスチャ座標:s, t
▲3▼ 法線ベクトル:(Nx, Ny, Nz)
▲4▼ カラー、半透明度:R, G, B, α
なお、上記▲2▼〜▲4▼は、アトリビュートである。
例えば、曲面上の点Pの3D座標xPを算出するためには、次の式(7)の計算を行わなければならない。
【0349】
【数8】
【0350】
したがって、できるだけ多くの不用なサンプリング点を除去することは、演算の負荷を軽減するために有効である。
【0351】
ここで、上記したようにNURBS曲面上の点をサンプリングしてポリゴンに分割するための方法において適用可能なサンプリング点を算出するために必要な、Bスプライン、ブレンディング関数(Cox-deBoor の漸化式)の値の算出を高速に行なう本発明に従う演算装置の構成例を説明する。
【0352】
この演算装置の原理を先に説明すると、入力をノットの値u、及びノット列
[u0,u1,u2,…,um-1](m=制御点数+階数K)とし、出力としてブレンディング関数の値Mx,k(Mの個数は階数と同じ)を算出する。
【0353】
ブレンディング関数は漸化式なので、ある階数でのブレンディング関数の値を算出するためには、1つ小さい階数でのブレンディング関数の値を算出しなければならない。
【0354】
したがって、ブレンディング関数の値は、階数の小さい方から1階ずつ算出する。ただし、パイプライン的に演算を行うので、ある階の最後のブレンディング関数の値を算出するタイミングと次の階の最初のブレンディング関数の値を算出するタイミングは重複する。
【0355】
また、図88で説明し、更に図57に示すように、Cox-deBoorの漸化式の例では、ある階のブレンディング関数の値は1つ小さい階のブレンディング関数の値を用いた積項から算出される。例えば、Mx,2はMx,1とM(x+1),1から算出される。
【0356】
ここで両端から2つずつ、計4つの積項は他の積項に比べて、1つ小さい階のブレンディング関数の値を算出するための2つの積項の加算の分だけ早く算出することができる。
【0357】
このことを利用して、4つの演算器を使って両端から2つずつ、計4つ(演算器が2つの場合は、1つずつ、計2つ)の積項を1ステップで並列に算出し、そして加算器を使って2つの積項を加算して1つのブレンディング関数の値を算出する。すなわち、ブレンディング関数の値は、1つの階の中では、両端から中央に向かって順に算出する。
【0358】
図58は、5階のナーブス曲線についての演算例である。この演算で、図57で説明した原理に従って図59に示すステップ順に行なわれる。
【0359】
例えば、図58において、ステップ1ではM4,1=1からM3,2, M4,2を求める。さらに、ステップ2では、M2,3、M4,3が決定しているのに対して、ステップ3でM3,3は決定している。これは、M3,3の演算途中に加算行程が入っているためである。次に、ステップ3でM1,4、M4,4を決定しているのに対してステップ4でM2,4、M3,4は決定している。
【0360】
これは、Cox-deBoorの漸化式ではM1,4、M4,4は、M2,3、M4,3だけから算出されるのに対して、M2,4、M3,4はM3,3も必要としているためである。
【0361】
上記漸化式を高速に演算するために、演算装置は、図1に示すBスプライン演算器203において、図60に示すような減算入力ノット列を2つずつ減算する減算器SB、2つの減算器SBの出力の除算を求める除算器DIV、更に除算器DIVの出力と加算器ADDの出力を乗算する乗算器MXを有し、パイプライン的に演算する演算器OPCを単位演算器として有する。
【0362】
また、図60の演算器構成において、除算器は、図61に示すように、一方の入力を符号を反転する逆算器ROと乗算器MXにより構成できる。したがって、図60において、漸化式を高速に演算する装置は、基本的に加減算回路と、乗算器で構成することができる。
【0363】
そして、演算装置は、図62に全体構成を示すように、図60の単位演算器を4つ(#0〜#3)有して構成される。(ローコスト化のためには演算器2つで構成しても良い。)さらに、4つの単位演算器#0〜#3の出力を加算する加算器ADDを有する。さらに、各単位演算器#0〜#3の動作を調整するシーケンサSCCと、出力を一旦保留するレジスタRegを有する。
【0364】
この図62に示す演算装置の入力データはノットの値u、及びノット列[u0,u1,u2,…,um-1](m=制御点数+階数K)であり、出力データとしてブレンディング関数の値Mx,k(Mの個数は階数と同じ)を算出する。そして、これら入出力データは、入出力バスを通してポリゴン生成器202に接続される。
【0365】
図62に示す演算装置の演算手順を図63に示す。図63において、横軸にクロックCLK、縦軸に#0〜#3の演算器の処理手順を示す。演算器の処理手順において、減算器SUB、除算器DIV及び乗算器MXの処理内容が示されている。
【0366】
ここで、上記に示した演算装置(図62)とその演算手順(図63)を、更に多数の、且つ/あるいは高階数のパッチからなるNURBSオブジェクトに適用することを検討する。
【0367】
まず、多数のパッチの場合、隣り合う各パッチに適用するBスプライン、ブレンディング関数は、図64の例のように1つずつずれているだけである。したがって、多数のパッチのうち隣り合う各パッチに対して、演算装置に入力するノット及び、ノット列を1つずつずらせば、図62に示す演算装置とその演算手順(図63)を使用することができる。
【0368】
ここで、高階数のパッチの場合、より低階のパッチに比べて必要なブレンディング関数の数が多く、且つ各ブレンディング関数を算出する手順が複雑である。ただし、ある階数でのブレンディング関数の値は1つ小さい階数でのブレンディング関数の値を使って算出することから分かるように、より低階のブレンディング関数の値を算出するための演算手順は、高階のブレンディング関数を算出する場合にもそのまま使用できる。
【0369】
すなわち、ある階数でのブレンディング関数を算出する演算手順は、(ある階数−1)の階数でのブレンディング関数を算出する演算手順、その後(ある階数−1)の階数でのブレンディング関数を使って、ある階数でのブレンディング関数を算出する演算ということになる。かかる関係が例として図65に示す4階のブレンディング関数を算出する演算手順でも現れている。
【0370】
ここまで、NURBS曲面モデルを複数のポリゴンに分割して、画像表示を行なう装置における本発明に従う実施例を上記に種々説明して来たが、通常、ビデオゲーム装置等で表示される人間などの3次元座標モデル画像は、複数の小部分(以下、この小部分をセクションと言う)で構成される。
【0371】
そして、セクション部分に円形等の閉接曲線即ち、トリミング曲線で表されるトリミング部分が形成される場合がある。かかるトリミング部分を考慮してポリゴン化を行う際に、例えば、特開平1−201777号公報に記載の技術では、NURBS曲面を含むパラメトリック曲面のu、vの格子とトリミング曲線の線分との交差点及び、トリミング曲線の線分の頂点を算出している。
【0372】
そして、算出された新たな頂点とともにポリゴン化を行っている。したがって、かかる従来の方法では、ポリゴンの頂点数をいたずらに増加することになる。これにより、演算量が著しく増加し、CPUの演算処理の負荷が大きくなる。
【0373】
またNURBS曲面のトリミングされてないポリゴンに対しても、トリミングされているかどうかの判定を行っている。したがって1つのNURBS曲面セクションをポリゴン化する際に多大な演算量が必要とされる。
【0374】
この為に、上記特許公開公報に記載の技術に従うトリミング曲線の処理方法は、ビデオゲーム装置等のインタラクティブ、且つリアルタイムな用途を有する3次元画像処理システムには適用し難いものである。
【0375】
本発明は、実施例として、かかるNURBS曲面モデルのデータを扱う際のトリミングのための演算をできるだけ単純化するトリミング曲線の処理方法及び、これを用いた3次元画像処理システムを提供する。
【0376】
さらに、本発明は、トリミングされたNURBS曲面モデルをリアルタイムに描画することを可能とするトリミング曲線の処理方法及び、これを用いた3次元画像処理システムを提供する。
【0377】
上記本発明の課題を達成するトリミング曲線の処理方法は、基本的構成として、次の処理ステップを有し、これを用いた3次元画像処理システムは、対応する処理手段を有して構成される。
【0378】
かかる処理ステップの概要を説明しておくと、パラメトリック空間上でu,v方向の複数の頂点で表されるパラメトリック曲面に対応して、u,v方向の頂点数と等しい大きさの2次元配列を生成する。ついで、前記パラメトリック曲面上のトリミング曲線を、前記2次元配列上の直線線分による多角形へ変換する。さらに、変換された多角形内の頂点を有効とするか、無効とするかの判定を行う。
【0379】
さらに、具体的態様として、前記において、変換された多角形内の頂点を有効とする場合、この多角形を描画対象とし、変換された多角形内の頂点を無効とする場合、この多角形を描画対象から削除する。
【0380】
さらに、前記有効と判定された頂点に基づき三角形ポリゴンを生成する。具体的態様として、3つの頂点が有効と判定される場合に、有効と判定される3つの頂点を含む三角形ポリゴンを生成する。あるいは、3つの頂点の内少なくとも1つの頂点が有効と判定される場合に、該有効と判定される1の頂点を含む三角形ポリゴンを生成する。
【0381】
本発明のここでの実施例であるトリムされた曲面のリアルタイム描画の方法も図1の本発明に従う画像表示装置において実行される。特に、図1のポリゴン生成器202で実行される。
【0382】
図66は、上記したu方向、v方向のNURBS曲面等のパラメトリック曲面モデルで形成されるセクションの一例である。このパラメトリック曲面モデル1のセクションは、トリミング曲線2により規定されるトリミング領域を有している。
【0383】
本発明は、かかるトリミングされたNURBS曲面等のパラメトリック曲面モデルをリアルタイムに描画するための手法に関するものである。図67の処理フロー図を参照して、本発明に従うトリミングされたパラメトリック曲面モデルをリアルタイムに描画するためのポリゴン生成処理を説明する。
【0384】
図67は、図1のポリゴン生成器202及び、Bスプライン演算器203における動作処理フロー図であり、特に、ステップS32の処理はポリゴン生成器202及び、Bスプライン演算器203両方において実行され、他のステップS31及び、ステップS33からステップS35の処理は、ポリゴン生成器202において、実行される。
【0385】
この時、ポリゴン生成器202、及びBスプライン演算器203のそれぞれにおける処理は、図示しないメモリに格納されるプログラムにより実行制御される。先ず図66に示すパラメトリック曲面モデルを構成するuおよびv方向の頂点数の大きさの2次元配列を図68の様に作成し、初期化する(ステップS31)。 以下、この2次元配列を“頂点配列"という。
【0386】
通常は、先に説明した様に各頂点(図68における黒点)のデータとして座標値等の複数のデータが含まれているが、ここで作成する頂点配列の各要素は、頂点の有効/無効を示すフラグだけでも構わない。つまり作成された2次元配列は頂点の有効/無効を示すためのフラグからなるビットマップともいえる。
【0387】
初期化はトリミング曲線毎に与えられた“トリミングフラグ"の値によって行われる。このフラグは、上記の頂点配列の要素に含まれるフラグとは異なる。ここで、“トリミングフラグ"とは、トリミング曲線の内部をトリミングするか、外部をトリミングするかを指定するためのフラグである。
【0388】
そして、このトリミングフラグは、トリミング曲線データの中にあらかじめ含まれている。例えば、トリミングフラグの値が「1」の時は、トリミング曲線の内部の領域が有効であることを意味し、値が「0」の時はトリミング曲線の外部の領域が有効であることを意味する。
【0389】
図69は、トリミングフラグによる指示の例を示す図である。図69(A)は、トリミングフラグが「1」であり、トリミング曲線の内部の領域が有効である。反対に、図69(B)は、トリミングフラグが「0」であり、トリミング曲線の外部の領域を有効としている。
【0390】
ポリゴン生成部202において、トリミングフラグの値が「1」の場合は、頂点配列の全ての要素を「0」で初期化する。トリミングフラグの値が「0」の場合は頂点配列の全ての要素を「1」で初期化する。頂点配列の要素の値が「0」の場合はその頂点は無効であることを示し、値が「1」の場合は頂点が有効であることを示す。
【0391】
図68に示す例において、曲面はu方向に9つ、v方向に7つの頂点で構成されている。図68に示す頂点配列から図70に示す様にトリミング曲線2を線分によって構成される多角形に変換する(ステップS32)。以下、この多角形に変換されたものを適宜、トリミング多角形20と称す。かかるトリミング多角形20への変換は、Bスプライン演算器203を用いて行われる。
【0392】
トリミング曲線2がもともと多角形として与えられている場合には特にこの変換は必要ではない。NURBS曲線等のパラメトリック曲線によって与えられている場合は、あらかじめ指定された曲線の分割数にしたがって曲線を多角形20に変換する。
【0393】
次に得られたトリミング多角形20の内部にある各頂点の有効/無効の判定を行う(ステップS33)。トリミング多角形20の内部が有効であるか、無効であるかは、先に説明したトリミング曲線2のトリミングフラグの値によって異なる。
【0394】
ここで、頂点の有効/無効の判定は、ポリゴン生成器202において、トリミングフラグを参照して行われる。ラスタグラフィックスの多角形(凹多角形を含む)の塗り潰しのアルゴリズムを用いることによってトリミング多角形の内部に含まれる頂点を判定する。そして判定された頂点に対して、トリミングフラグの値が書き込まれる。
【0395】
以下に、トリミング多角形20の内部にある頂点の有効/無効の判定(多角形の塗り潰し)の方法について、具体的に説明する。
【0396】
図71は、かかるトリミング多角形20の内部にある頂点の有効/無効の判定の説明の為に、図70を書き改めた図である。図71において、トリミング多角形20のv座標の最小値Vminを求め、その値よりも大きい最小のvを求める。図71において、このvはVstartになる。
【0397】
次いで、vのラインと交差するトリミング多角形の全ての辺の交点を求め、uの値を、小さい順にソートする。ソートされたものをu0, u1, u2, …, un-1とする(nは交点の数であり、ui≦ui+1)。図71の例では、vがv'のラインである場合、交点は4つあり、ソートされたそれぞれの交点は、図示されるように、u0, u1, u2 ,u3になる。
【0398】
次いで、交点u0, u1, u2, …, un-1を2値ずつ組として(つまり、u0とu1、u2とu3、…、un-2とun-1を組とする)、それぞれの区間に含まれている頂点にトリミングフラグの値を書き込む。
【0399】
図71の例では、トリミング多角形20内のトリミングフラグの値は、「0」であるため、トリミングフラグとして「0」の値を書き込むことによってトリミング多角形20の内部の点が無効になる(図では白丸で示している)。
【0400】
上記処理が終わると、さらに、vをひとつ下の行に移動する。もしvがトリミング多角形のv座標の最大値vmaxを越えていなければ上記と同様の処理を繰り返す。Vmaxを越えていた場合は,この処理は終了する。したがって、図71において、vはvendまで移動する。
【0401】
図67の処理フローにおいて、他にもトリミング曲線がある場合は、ステップS31の処理に戻る。以上の処理によって有効とされた頂点からポリゴンを生成する(ステップS35)。
【0402】
次に、有効とされた頂点からポリゴンを生成する内容を説明する。本発明の実施例において、ねじれ等の問題を避けるために三角形ポリゴンを生成する。
【0403】
今、図72に示されるように頂点P(i,j)とそれに隣接する頂点をQ,R,Sで示している。そして、4頂点P,Q,R,Sを分割して、三角形ポリゴンを形成する。この時、どのように三角形に分割するかを、変数typeにより示す。
【0404】
この変数typeの値によって4つの頂点は、図73に示すように、
type=0(図73(A))、type=1(図73(B))に分類される。したがって、図71に示す例では、まず、図74に示す様に、頂点(0,0), (0,1), (1,0)によって、一つの三角形ポリゴンを形成する。続いて頂点(0,1), (1,0), (1,1)、頂点(0,1), (0,2), (1,1)の順番でポリゴンを形成していく。
【0405】
頂点(2,2)、頂点(2,3)および頂点(2,4)は無効である。このため、これらの頂点を使用したポリゴンの形成は行わない。したがって、頂点(1,1), (1,2), (2,1)によるポリゴンが形成された後、頂点(1,4), (1,5), (2,5)のポリゴンが形成される。続いて頂点(1,5), (2,5), (2,6)のポリゴンが形成される。
【0406】
ここで、前記図73に従う方法によって生成されたポリゴンからなる曲面上のトリミングによって除かれる領域は、図74に例示される様に、トリミング曲線2即ち、トリミング多角形20によって囲まれる領域よりも大きくなる。また、トリミング曲線2の外側を切り取る場合には、トリミングされた曲面はトリミング曲線2によって囲まれる領域よりも小さくなる。
【0407】
本発明ではできるだけ演算を簡略化しているため、このようにトリミング曲線2とトリミングされる領域に差が生じる。
【0408】
図75は、かかる図74に例示される様なポリゴンを生成するための動作フローチャートである。図75において、v方向にi番目、u方向にj番目の頂点は、頂点(i,j)として示される。M、Nはそれぞれu,v方向の頂点数を示している。
【0409】
また,便宜上、図72に示したように頂点P(i,j)に隣接する頂点をQ,R,Sで示している。そして、4頂点P,Q,R,Sを分割して、三角形ポリゴンを形成する。この時、どのように三角形に分割するかを変数typeにより示す。
【0410】
この変数typeの値によって4つの頂点は、図73に示したように、
type=0(図73(A))、type=1(図73(B))に分類される。
【0411】
このような前提において、ポリゴン生成器202に含まれるレジスタに、初期値として、i=0,j=0,type=0をセットする。同時に頂点P,Q,R、Sのそれぞれに対応し、同様にポリゴン生成器202に含まれる座標レジスタにそれぞれP(i,j)、Q(i,j+1)、R(i+1,j)、S(i+1,j+1)をセットする(ステップS40)。
【0412】
次に、頂点Pが、有効か否かを判断し(ステップS41)、無効であれば、頂点P以外が有効かを判断する(ステップS42)。頂点P以外が有効であれば、頂点Q,R,Sによって、三角形ポリゴンを形成する(ステップS43)。
【0413】
また、ステップS41、ステップS44で、頂点Pが有効、頂点Qが無効であれば、頂点Q以外が有効かを判断する(ステップS45)。頂点Q以外が有効であれば、頂点P,R,Sによって、三角形ポリゴンを形成する(ステップS46)。
【0414】
同様に、ステップS41、ステップS44、ステップS47で、頂点P、Qが有効、頂点Rが無効であれば、頂点R以外が有効かを判断する(ステップS48)。頂点R以外が有効であれば、頂点P,Q,Sによって、三角形ポリゴンを形成する(ステップS49)。
【0415】
さらに、ステップS41、ステップS44、ステップS47、ステップS50で、頂点P、Q、Rが有効、頂点Sが無効であれば、頂点P,Q,Rによって、三角形ポリゴンを形成する(ステップS51)。
【0416】
さらにまた、ステップS41、ステップS44、ステップS47、ステップS50で、頂点P、Q、R、Sが全て有効であれば、typeの値に従って、2つの三角形ポリゴンを生成する(ステップS52)。
【0417】
type=0の時は、図73(A)に示した様に、頂点P,Q,R及び、頂点Q,R,Sによって、2つの三角形ポリゴンを形成する。また、type=1の時は、図73(B)に示した様に、頂点P,Q,S及び、頂点P,R,Sによって、2つの三角形ポリゴンを形成する。
【0418】
この様に、三角形ポリゴンが形成されると、j及び、iを1ずつ歩進し、上記ステップS40からS52の処理を、セクションに含まれる頂点数分くり返す(ステップS53)。
【0419】
一方、これとは逆に、トリミング曲面のトリミングされる領域がトリミング曲線2によって囲まれる領域よりも小さいか、あるいは外側をトリミングされた曲面がトリミング曲線2によって囲まれる領域よりも大きい方が望ましい場合もある。
【0420】
この場合は、有効/無効の判定がされた頂点配列に対するポリゴンの生成の方法を変えることによって対応することができる。すなわち、先の方法では、三角形の全ての頂点が有効だった場合に対してのみポリゴンが生成される。
【0421】
これに対し、三角形を構成するための頂点のいずれかひとつが有効ならば三角形を生成する。これによりトリミング曲面のトリミングされる領域がトリミング曲線2によって囲まれる領域よりも小さいか、あるいは外側をトリミングされた曲面がトリミング曲線2によって囲まれる領域よりも大きくすることができる。
【0422】
すなわち、図72に示した格子状に配置された4つの頂点P、Q,R,Sの内、いずれかの頂点が、有効ならば、図76に示す様に三角形ポリゴンを生成する。
【0423】
図76(A)は、全ての頂点が有効であり、2つの三角形ポリゴンが生成される。同様にして、図76(B)は、3頂点が有効な場合、図76(C)は、2頂点が有効な場合であり、それぞれ2つの三角形ポリゴンが生成される。
【0424】
図76(D)は、図72に示す格子状に配置された4つの頂点P、Q,R,Sの内、1つの頂点のみが有効の場合である。この場合は、有効な1個の頂点を含む1つの三角形ポリゴンが生成される。
【0425】
このようにポリゴンを生成することによって、トリミング曲線20を有するセクションには、図77に示すポリゴンが生成される。この場合は、図74の例と比較すると、トリミング曲面のトリミングされる領域がトリミング曲線20によって囲まれる領域よりも小さくすることができる。
【0426】
ここで、上記の図66のトリミング曲線2によるトリミング方法と異なる他のトリミング方法を提案する。
【0427】
その第1の方法は、オブジェクトの2次元(2D)テクスチャ・データに対して、2Dポリゴン(または2Dポリライン)で構成したトリミング用の形状を切り取ったり、そのポリゴンに別のテクスチャを与えて貼り付けることによりトリミングを行なう方法(テクスチャによるトリミングと呼ぶ)である。
【0428】
更に他の方法は、3次元座標系にトリミング用のオブジェクトを定義して、オブジェクトの各ピクセルをフレームバッファに描画する際に、ピクセルがトリミング用のオブジェクトの内部となったら描画しなかったり、別のテクスチャを与えたりする方法(ボリュームマスクによるトリミングと呼ぶ)である。
【0429】
上記のテクスチャによるトリミングの具体的実施例を説明する。
トリミングの対象とするオブジェクト(NURBS等の曲面オブジェクトでも、ポリゴン・オブジェクトでも良い)に貼り付ける2Dテクスチャ・データを操作することによって、トリミングを行う。
【0430】
例えば、NURBSオブジェクトにuv平面で定義した2Dテクスチャを貼り付けると仮定して、その2Dテクスチャ上に事前にトリミングしたい形状を(1つまたは複数の)2Dポリゴンで構成して描画する。
この時、2Dポリゴンを“透明”と考えて描画する部分を切り取っても良いし、2Dポリゴン用に別のテクスチャを用意して元のテクスチャと置き換えても良い。
【0431】
トリミング形状を(テクスチャパターンではなく)2Dポリゴンで構成する利点は、形状をリアルタイムかつインタラクティブに変形しやすいことである。
【0432】
あるいは、トリミング形状を、トリミング曲線のサンプリング点同士を接続した2Dポリラインで構成し、テクセル毎にポリラインの内/外判定をしてトリミングを行っても良い。こちらの方が描画に時間がかかる代わりに、2Dポリゴンを描画するための特別の描画器を必要としない。
【0433】
図78は、テクスチャによるトリミングの実施例を説明する図である。
【0434】
図78(A)に示すように3×3の9パッチからなるNURBS曲面オブジェクトを想定する。このオブジェクトに図78(B)に示すuv平面で定義した2Dテクスチャ・データを貼り付ける。
【0435】
ここで、このNURBS曲面オブジェクトにおいてトリミングを行い、図78(C)に示すように穴の空いた曲面にすることを考える。
【0436】
まず、図79に示すようにトリミングはuv平面上に定義された2Dテクスチャを操作することによって行う。その2Dテクスチャにトリミングしたい形状を構成し描画するが、トリミング面の構成には2通りある。
【0437】
1つは、図79(A)に示すようにトリミングしたい形状を2Dポリゴンで構成する方法である。図79(A)に示すような2Dポリゴンを透明と考えて、描画する部分を切り取るようにして図79(C)に示すように曲面オブジェクトに穴を空ける。
【0438】
ここで、2Dポリゴンでトリミング領域を構成することによりトリミングの形状をリアルタイムに且つインタラクティブに変形しやすい利点が得られる。
図79(B)は、トリミングしたい形状をトリミング曲線のサンプリング点同士を接続した2Dポリラインで構成し、テクセルごとにポリラインの内/外判定をする方法である。
【0439】
同様にこの場合も2Dポリライン内を透明と考えて、描画する部分を切り取るようにして図79(C)のように曲面オブジェクトに穴を空ける。
【0440】
図80は、図79のトリミング方法の応用であって、2Dポリゴン(図80(A))又は、2Dポリライン(図80(B))用に別のテクスチャを用意して元のテクスチャ置き換えることも可能である(図80(C))。
【0441】
また、図81は、トリミング面の外側を透明に置き換えて、トリミング面だけ取り出す方法である。図81において、図81(A)は、2Dポリゴンによる場合、図81(B)は、2Dポリラインによる場合であって、ともに図81(C)に示すように、外側を透明に置き換えてトリミング面だけ取り出している。
【0442】
図82は、上記のボリュームマスクによるトリミングを説明する図である。
【0443】
トリミングの対象とするオブジェクトをピクセル毎にフレームバッファに描画する際、3D座標系(ローカル座標、ワールド座標、視点座標のどれでもいずれでも良い)に定義したボリュームマスク(トリミング用のオブジェクト)の内部に位置するかどうかを判別する。もし内部(あるいは外部としても良い)であったら描画しなかったり、予め用意した別のテクスチャを与えたり、トリミング用のオブジェクトの方を描画したりすることによってトリミングを行う。
【0444】
図82において、例えば、図82(A)に示すようなトリミングの対象とするNURBS曲面オブジェクトを考える。また、図82(B)のような3D座標系に定義されたボリュームマスクがある。図82(C)、(D)は、このオブジェクト(図82(A))とボリュームマスク(図82(B))が重なっている例をそれぞれ正面から見た図、側面から見た図である。
【0445】
各ピクセルをフレームバッファに描画する際、オブジェクトがボリュームマスクに囲まれている部分か否かを判断する。
【0446】
オブジェクトの点がボリュームマスクの内側か外側かを判別することは、図83に示す方法により可能である。
【0447】
図83に示すように、視点から見て描画しようとするピクセル(オブジェクトの点)の手前に偶数回ボリュームマスクが横たわっていたら、そのピクセルはボリュームマスクの外側とみなす。奇数回ならボリュームマスクの内側とみなす。図83(A)、(B)はいくつかの例を示し、サンプリング点P1〜P6の判別結果を示す。図83(A)の点P2では、手前に零回ボリュームマスクが横たわっているので、この場合も外側と判断される。
判別が終わったら、ボリュームマスクの内側、外側にそれぞれの方法で描画する。描画方法を図84に示す。
【0448】
図84(A)では、ボリュームマスクの内側のピクセルを描画しない。これにより、奥の裏面ポリゴンPGが描画される。図84(B)ではボリュームマスクの内側のピクセルを描画しない。これにより、オブジェクト奥の背景BGが描画される。
【0449】
さらに、図84(C)では、ボリュームマスクの内側のピクセルを描画しない。そして、予め用意しておいたボリュームマスクの内側の画像を描画する。図84(D)では、ボリュームマスクの内側のピクセルに、予め用意しておいた別のテクスチャを張り付け描画する。
【0450】
【産業上の利用可能性】
以上実施の形態を図面を参照して説明したように、本発明は、NURBS曲面オブジェクトをポリゴンに変換する技術において、NURBS曲面オブジェクトのデータを直接処理する。これにより、表示されるNURBS曲面オブジェクトの現実感(リアリティ)を最適化することを可能とするポリゴンの生成方法及び、これを用いた画像表示装置が提供される。
【0451】
本発明によれば、NURBSモデルをポリゴンに変換する技術において、画面上に表示されるオブジェクトのサイズに応じて、NURBSモデルが単純化される。このように、視覚的に複雑な形状の判別が難しい程度に、オブジェクトのサイズが小さい場合は、NURBSモデルの形状を単純化することにより、NURBSモデルをポリゴンに変換する際の演算量及びポリゴンのデータ量を削減することができる。
【0452】
また、NURBSモデルを形成する曲面パッチの表裏判定又は画面内外判定に基づいて、画面上に表示されない曲面セクションにのみ関わる不要な制御点が除去される。これにより、NURBSモデルをポリゴンに変換する際のポリゴン数を減らすことができ、変換処理量が低減する。
【0453】
さらに、NURBSモデルの段階で制御点を移動して、NURBSモデルを変形した場合にも、その変形によって変化した制御点の法線ベクトルを高速に再計算することにより、適切にNURBSモデルのシェーディングを行なうことができる。
【0454】
本発明により更にNURBSオブジェクトのスクリーン投影サイズなどを概算して求めるLODの値によって、NURBSオブジェクトを複数の曲面リージョンに分割する際の分割数を少なくできる。また、曲面リージョンの各(曲)辺に対応する制御点のグループを結んで得られるスクリーン上でのエリアから、曲面リージョンをポリゴンに分割する際の分割数が算出される。そして、この算出される分割数に従って、NURBSオブジェクトに対応するu,vノット列の全有効区間が、u,vそれぞれ有効区間のノット数が均等になるように分割される。
【0455】
本発明において、更に上記分割の計算に際し、曲面リージョンの頂点を包含できるようなテーブルを用意し、一旦各頂点のu,vノット値を格納する。そして、格納されたu,vノットの値からポリゴンの3D頂点計算を算出するようにする。これにより各頂点に対する重複の頂点計算をなくし計算効率を高めている。また、テーブルに登録された頂点番号から3D頂点座標を算出した段階で、スクリーンの外側に位置するポリゴンや、視点から裏向きになっているポリゴンの除去が可能である。これにより、その後のアトリビュート(属性)についての頂点のNURBS演算回数を削減している。
【0456】
本発明において、NURBS曲面上の点を適切にサンプリングしてポリゴンに分割するために、漸化式であるブレンディング関数の値の演算が行なわれる。そして、このブレンディング関数の値の算出を高速に行なう方法として、ある階数でのブレンディング関数の値を1つ小さい階数でのブレンディング関数の値を基に算出するようにし、パイプライン的に演算を行うことを可能としている。
【0457】
これにより、ブレンディング関数の値を演算する演算器として、減算、除算、乗算をパイプライン的に演算する演算器により構成することを可能としている。また、本発明によりトリミングを行なう方法が提供される。パラメトリック曲面のu,v方向の頂点数に等しい大きさの2次元配列に対し、多角形に変換されたトリミング曲線による塗りつぶしを行なう。そして、トリミング曲線内の頂点を有効とするか否かの判断により、トリミングを行なう。これにより、トリミングに必要とする演算量が削減される。
【0458】
さらにまた、本発明により高速にトリミングを行なう方法が提供される。その方法の1つは、オブジェクトの2Dテクスチャ・データに対して、2Dポリゴン(または2Dポリライン)で構成したトリミング用の形状を切り取ったり、そのポリゴンに別のテクスチャを与えて貼り付けたりすることによりトリミングが可能である。
【0459】
別の方法として3D座標系にトリミング用のオブジェクトを定義して、オブジェクトの各ピクセルをフレームバッファに描画する際に、ピクセルがトリミング用のオブジェクトの内部となったら描画しないようにし、あるいは別のテクスチャを与えることによってもトリミングが可能である。
【図面の簡単な説明】
【図1】 本発明の対象とするNURBS曲面オブジェクトをポリゴンに変換する技術を用いた画像表示装置の構成例概念ブロック図である。
【図2】 図1の構成の動作を説明する本発明に従うポリゴンデータ生成方法を適用する概略の動作フロー図である。
【図3】 オブジェクトがディスプレィ画面に投影された時の画面に占める面積の割合を、概算値Scとして求める説明図である。
【図4】図3の説明図を任意の角度θの場合に、一般化した図である。
【図5】 オブジェクトの画面占有面積の概算値ScとLODの対応関係の一例を示す図である。
【図6】 LODと、u,vの分割数の対応関係の一例を示すテーブルである。
【図7】 オブジェクトの一例を示す図である。
【図8】 本発明の画像表示装置の実施例構成図である。
【図9】 ポリゴンへの分割数を決めるためのデータとして形成されたテーブルを示す図である。
【図10】 ポリゴンの頂点座標計算動作フローを示す図である。
【図11】 Bスプライン演算器203の動作フローを示す図である。
【図12】 パラメータ変数及び、演算方法を示す図である。
【図13】 属性データの省略について、説明する図である。
【図14】 図13のNURBS曲面を展開して示す図である。
【図15】 NURBSモデルを単純化する第一の方法を説明するための図である。
【図16】 4×4階のNURBS曲面の階数を下げる例を示す図である。
【図17】 式(3)で点Pの計算に必要なブレンディング関数Mを示した図である。
【図18】 単純化前のNURBSモデルの階数が4階であるときのLODと階数との対応テーブルの例を示す図である。
【図19】 第一の方法の別の方法を説明するための図である。
【図20】 第一の方法の別の方法におけるLODと階数との対応テーブルの例を示す図である。
【図21】 4×4階のNURBS曲面を3×3階のNURBS曲面に単純化する例を示す図である。
【図22】 制御点のウエイトを平均化する方法を説明するための図である。
【図23】 3×3階のNURBS曲面を2×2階のNURBS曲面に単純化する例を示す図である。
【図24】 単純化前のNURBSモデルを定義する制御点の数が7×7つであって、階数が4階であるときの、LODに対応する制御点の数と階数の対応テーブルの例を示す図である。
【図25】 図24のテーブルに対応するNURBSモデルの形状及び制御点マトリクスの状態を模式的に表した図である。
【図26】 制御点8×7ヶからなる4×4階の球体のNURBSモデルを説明する図である。
【図27】 図26のNURBSモデルを模式的に展開した図である。
【図28】 曲面パッチの表裏判定方法の原理を説明するための図である。
【図29】 各制御点の法線ベクトルの向きの表裏分布を示す図である。
【図30】 表裏判定された曲面パッチを示す図である。
【図31】 制御点8×7ヶからなる4×4階の球体のNURBSモデルを説明する図である。
【図32】 図31のNURBSモデルを模式的に展開した図である。
【図33】 制御点を線分で接続した図である。
【図34】 曲面パッチのスクリーン内外判定方法を説明するための図である。
【図35】 1つの曲面パッチが画面を覆う場合を示す図である。
【図36】 制御点8×7ヶからなる4×4階の球体のNURBSモデルを説明する図である。
【図37】 図36のNURBSモデルを模式的に展開した図である。
【図38】 法線ベクトル計算方法を説明するための図である。
【図39】 制御点Qlの新しい法線ベクトルを求める場合に想定される制御点Qlを頂点とする4つの四角形を示す図である。
【図40】 隣り合う複数の制御点を同時に移動する場合の例を示す図である。
【図41】 4つのリージョン00〜11に分割されるNURBSオブジェクトを説明する図である。
【図42】 図41のオブジェクトの区切られる区間Aに影響を与える制御点に対する制御点マトリクスを示す図である。
【図43】 図42に示す考え方を応用して示される、辺に影響を与える制御点を説明する図である。
【図44】 図41のNURBSオブジェクトの曲面リージョン00の各(曲)辺に影響を与える制御点を説明する図である。
【図45】 曲面リージョンの各(曲)辺に対応する制御点のグループを選び出し、それらの制御点をスクリーン座標に変換することを説明する図である。
【図46】 各4辺形の面積を求める計算方法を説明する図である。
【図47】 LOD(Level Of Detail)によって対象とする制御点の数を変える例を説明する図である。
【図48】 u,vノット区間の分割を説明する図である。
【図49】 ポリゴンの3角形ストリップ及び3角形ファンを説明する図である。
【図50】 比較的平坦な部分と曲率の高い部分を持つ折りたたみ図形に対する処理を説明する図である。
【図51】 図51は、LODの値によって直接ポリゴン分割数を決めた場合と、曲面リージョンにしてからポリゴン分割数を決めた場合を比較して示す図である。
【図52】 曲面パッチを3角形ポリゴンに分割する手順を説明する図である。
【図53】 曲面パッチの任意の1(曲)辺の選択によるポリゴン分割数ヘの影響を説明する図である。
【図54】 3D頂点座標の計算回数を少なくする例を示す図である。
【図55】 ポリゴンに分割した時に登録される頂点番号のテーブルを示す図である。
【図56】 ポリゴンの削除を説明する図である。
【図57】 Cox-deBoorの漸化式の例を説明する図である。
【図58】 5階のナーブス曲線についての演算例である。
【図59】 図57で説明した原理に従って行なわれるステップ順を説明する図である。
【図60】 漸化式を高速に演算するための演算装置を構成する単位演算器の構成例を示す図である。
【図61】 図60の演算器構成における除算器の構成例を示す図である。
【図62】 図60の単位演算器を含んで構成される漸化式を高速に演算するための演算装置の構成例を説明する図である。
【図63】 図62の演算装置の処理手順を示す図である。
【図64】 多数のパッチの場合の隣り合う各パッチに適用するBスプライン、ブレンディング関数の特徴を説明する図である。
【図65】 4階のブレンディング関数を算出する演算手順を示す図である。
【図66】 u方向、v方向のパラメトリック曲線1で形成されるNURBS曲面等のパラメトリック曲面モデルで形成されるパッチの一例を示す図である。
【図67】 トリミングされたパラメトリック曲面モデルをリアルタイムに描画するためのポリゴン生成処理方法のフロー図である。
【図68】 パラメトリック曲面モデルを構成するuおよびv方向の頂点数の大きさの2次元配列を示す図である。
【図69】 トリミングフラグによるトリミング曲線の内部の領域が有効/無効を指示する例を示す図である。
【図70】 図68に示す頂点配列に対してトリミング曲線2を線分によって構成される多角形に変換する例を示す図である。
【図71】 トリミング多角形20の内部にある頂点の有効/無効の判定の説明の為に、図70を書き改めた図である。
【図72】 三角形ポリゴンを形成するための4頂点P,Q,R,Sを説明する図である。
【図73】 4頂点P,Q,R,Sを分割して、三角形ポリゴンを形成する変数(type)を説明する図である。
【図74】 図71に示す例を図73で説明する変数に従って、三角形ポリゴンを形成する例を示す図である。
【図75】 有効/無効の判定がされた頂点配列に対するポリゴンの生成の方法を変える手法を採用して、ポリゴンを生成するための動作フローチャートである。
【図76】 格子状に配置された4つの頂点P、Q,R,Sの内、いずれかの頂点が、有効ならば、三角形ポリゴンを生成する例を説明する図である。
【図77】 図71に示す例を図75に従いポリゴンを生成した図である。
【図78】 テクスチャによるトリミングの実施例を説明する図である。
【図79】 トリミングをuv平面上に定義された2Dテクスチャを操作することによって行う方法を説明する図である。
【図80】 図79の方法において、異なるテクスチャをトリミング領域に貼り付ける例である。
【図81】 図79の方法において、定義したトリミングの部分だけを表示して、それ以外の部分を透明ピクセルとして処理し、表示しない例である。
【図82】 ボリュームマスクによるトリミングを説明する図である。
【図83】 オブジェクトの点がボリュームマスクの内側か外側かを判別する方法を説明する図である。
【図84】 図83の判別後にボリュームマスクの内側、外側にそれぞれの方法で描画する描画方法を説明する図である。
【図85】 従来のポリゴンデータを用いた画像表示装置の一般的構成例を説明する図である。
【図86】 NURBS曲面の前提となるNURBS曲線を説明する図である。
【図87】 制御点4つ(Q0〜Q3)、4階(従って、三次曲線)によってNURBS曲線を形成する例を示す図である。
【図88】 図87に対応してブレンディング関数を示す図である。
【図89】 いくつかのセグメントを接続することによって複雑なNURBS曲線を形成する例を説明する図である。
【図90】 NURBS曲面を説明する図である。
Claims (15)
- パラメトリック・サーフェスを表すNURBS曲面によりモデリングされるNURBSモデルをポリゴンに変換し,該ポリゴンで構成されるオブジェクトを画面上に表示する画像処理装置において,
NURBSモデルの座標を記憶する記録媒体と,
視点の座標及び/又は方向の変化に対応して,前記記録媒体に記憶される前記NURBSモデルの座標を前記視点を原点とする視点座標系の座標に変換する変換部と,
前記視点座標系の座標に変換された前記NURBSモデルの画面に対する詳細度を決定する決定部と,
前記詳細度に応じて前記NURBSモデルを定義する階数を下げることにより,前記NURBSモデル形状を単純化する単純化部と,
前記単純化されたNURBSモデルに基づいて,ポリゴンを生成する生成部とを備えることを特徴とする画像処理装置。 - 請求項1において,
前記決定部は,画面の表示領域に対する該表示領域に表示されるオブジェクトの占める領域の割合によって,前記詳細度を決定することを特徴とする画像処理装置。 - 請求項1又は2において,
前記単純化部は,前記NURBSモデルを一段階単純化する場合,NURBSモデルを定義するノット列の最後の要素を削除して,K×L階のNURBS曲面m×nヶを,(K−1)×(L−1)階のNURBS曲面(m+1)×(n+1)ヶにすることを特徴とする画像処理装置。 - 請求項1又は2において,
前記単純化部は,前記詳細度に応じて,前記NURBSモデルを定義する階数を下げ,且つ有効な制御点の数を減らすことによって,前記NURBSモデルを単純化することを特徴とする画像処理装置。 - 請求項4において,
前記単純化部は,前記NURBSモデルを一段階単純化する場合,前記NURBSモデルを定義する制御点マトリクスの最初の行列要素及び,ノット列の最後の要素を削除することを特徴とする画像処理装置。 - 請求項4において,
前記単純化部は,前記NURBSモデルを一段階単純化する場合,K×L階のNURBS曲面m×nヶを,(K−1)×(L−1)階のNURBS曲面m×n/4ヶにすることを特徴とする画像処理装置。 - 請求項6において,
前記単純化部は,NURBSモデルの一部または全部を構成する(K+1)×(L+1)ヶの隣接する有効な制御点に対し,該(K+1)又は(L+1)が奇数の場合,中央の制御点を囲む2行2列を無効とし,該(K+1)又は(L+1)が偶数の場合,中央の制御点2行2列を無効として,(K−1)×(L−1)階のNURBS曲面m×n/4ヶにすることを特徴とする画像処理装置。 - 請求項6において,
前記単純化部は,前記単純化後に有効な制御点のウエイトに,前記有効な制御点のウエイトと,その周囲の無効になった制御点のウエイトとの平均値を用いることを特徴とする画像処理装置。 - 請求項6乃至8のいずれかにおいて,
前記単純化部は,前記NURBモデルを定義するノット列のうち,前記NURBSモデルを構成する曲線セグメントが有効な範囲では,端の要素を残し,1つおきに要素を削除し,該曲線セグメントが有効な範囲の前後にある曲線セグメントが有効でない範囲では,端の要素を残し,それぞれ1つずつ要素を削除することを特徴とする画像処理装置。 - パラメトリック・サーフェスを表すNURBS曲面によりモデリングされるNURBSモデルから,画面上に表示されるオブジェクトを構成するポリゴンを生成する画像処理装置におけるポリゴン生成方法であって,
視点の座標及び/又は方向の変化に対応して,前記画像処理装置に記憶される前記NURBSモデルの座標を,前記視点を原点とする視点座標系の座標に変換するステップと,
前記視点座標系の座標に変換された前記NURBSモデルの画面に対する詳細度を決定するステップと,
前記詳細度に応じて前記NURBSモデルを定義する階数を下げることにより,前記NURBSモデルの形状を,単純化するステップと,
前記単純化されたNURBSモデルに基づいてポリゴンを生成するステップとを備えることを特徴とするポリゴン生成方法。 - 請求項10において,
前記詳細度は,画面の表示領域に対する該表示領域に表示されるオブジェクトの占める領域の割合によって,決定されることを特徴とするポリゴン生成方法。 - 請求項10又は11において,
前記NURBSモデルは,前記詳細度に応じて,前記NURBSモデルを定義する階数を下げ,且つ有効な制御点の数を減らすことによって,単純化されることを特徴とするポリゴン生成方法。 - 画像処理装置に,パラメトリック・サーフェスを表すNURBS曲面によりモデリングされるNURBSモデルをポリゴンに変換し,該ポリゴンで構成されるオブジェクトを画面上に表示させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体であって,
前記画像処理装置に,
視点の座標及び/又は方向の変化に対応して,前記画像処理装置の記録媒体に記憶される前記NURBSモデルの座標を,前記視点を原点とする視点座標系の座標に変換するステップと,
前記視点座標系の座標に変換された前記NURBSモデルの画面に対する詳細度を決定するステップと,
前記詳細度に応じて,前記NURBSモデルを定義する階数を下げることにより,前記NURBSモデルの形状を単純化するステップと,
前記単純化されたNURBSモデルに基づいて,ポリゴンを生成するステップとを実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。 - 請求項13において,
前記詳細度は,画面の表示領域に対する該表示領域に表示されるオブジェクトの占める領域の割合によって,決定されることを特徴とするプログラムを記録したコンピュータ読み取り可能な記録媒体。 - 請求項13又は14において,
前記NURBSモデルは,前記詳細度に応じて,前記NURBSモデルを定義する階数を下げ,且つ有効な制御点の数を減らすことによって,単純化されることを特徴とするプログラムを記録したコンピュータ読み取り可能な記録媒体。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP18909398 | 1998-07-03 | ||
JP28143498 | 1998-10-02 | ||
JP29059898 | 1998-10-13 | ||
JP6183499 | 1999-03-09 | ||
PCT/JP1999/003639 WO2000002165A1 (fr) | 1998-07-03 | 1999-07-05 | Procede permettant de produire des donnees de polygone et afficheur d'images utilisant lesdites donnees |
Publications (1)
Publication Number | Publication Date |
---|---|
JP4385524B2 true JP4385524B2 (ja) | 2009-12-16 |
Family
ID=27464089
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000558490A Expired - Lifetime JP4385524B2 (ja) | 1998-07-03 | 1999-07-05 | ポリゴンデータの生成方法及び、これを用いた画像表示装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US6600485B1 (ja) |
EP (1) | EP1011078A4 (ja) |
JP (1) | JP4385524B2 (ja) |
WO (1) | WO2000002165A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11891091B2 (en) * | 2019-02-06 | 2024-02-06 | Texas Instruments Incorporated | Semantic occupancy grid management in ADAS/autonomous driving |
Families Citing this family (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6700576B1 (en) * | 1999-03-25 | 2004-03-02 | 3Dlabs, Inc., Ltd. | Variable stride circle rendering apparatus and method |
US6798411B1 (en) * | 1999-10-29 | 2004-09-28 | Intel Corporation | Image processing |
JP2001149642A (ja) * | 1999-12-01 | 2001-06-05 | Namco Ltd | ゲーム装置及びゲーム装置の残像表示方法 |
US7180523B1 (en) * | 2000-03-31 | 2007-02-20 | Intel Corporation | Trimming surfaces |
US6980218B1 (en) * | 2000-08-23 | 2005-12-27 | Nintendo Co., Ltd. | Method and apparatus for efficient generation of texture coordinate displacements for implementing emboss-style bump mapping in a graphics rendering system |
WO2002025587A2 (en) * | 2000-09-19 | 2002-03-28 | Technion Research And Development Foundation Ltd. | Method and apparatus for shape deformation and placement |
JP4656615B2 (ja) * | 2001-01-12 | 2011-03-23 | 株式会社バンダイナムコゲームス | 画像生成システム、プログラム及び情報記憶媒体 |
JP4639010B2 (ja) * | 2001-08-23 | 2011-02-23 | Tool株式会社 | 大規模図形データ高速描画方法および装置 |
KR100861161B1 (ko) * | 2002-02-06 | 2008-09-30 | 디지털 프로세스 가부시끼가이샤 | 3차원 표시 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체, 3차원 표시 장치, 및 3차원 표시 방법 |
JP3979162B2 (ja) * | 2002-04-22 | 2007-09-19 | ソニー株式会社 | 画像処理装置およびその方法 |
US7042455B2 (en) * | 2003-05-30 | 2006-05-09 | Sand Codex Llc | System and method for multiple node display |
US20050156930A1 (en) * | 2004-01-20 | 2005-07-21 | Matsushita Electric Industrial Co., Ltd. | Rendering device and rendering method |
US7136067B2 (en) * | 2004-01-26 | 2006-11-14 | Microsoft Corporation | Using externally parameterizeable constraints in a font-hinting language to synthesize font variants |
US7187382B2 (en) | 2004-01-26 | 2007-03-06 | Microsoft Corporation | Iteratively solving constraints in a font-hinting language |
US7292247B2 (en) * | 2004-01-26 | 2007-11-06 | Microsoft Corporation | Dynamically determining directions of freedom for control points used to represent graphical objects |
US7236174B2 (en) * | 2004-01-26 | 2007-06-26 | Microsoft Corporation | Adaptively filtering outlines of typographic characters to simplify representative control data |
US20050275760A1 (en) * | 2004-03-02 | 2005-12-15 | Nvidia Corporation | Modifying a rasterized surface, such as by trimming |
JP4255449B2 (ja) * | 2005-03-01 | 2009-04-15 | 株式会社ソニー・コンピュータエンタテインメント | 描画処理装置、テクスチャ処理装置、およびテセレーション方法 |
US8180605B1 (en) | 2005-11-23 | 2012-05-15 | Livermore Software Technology Corporation | Methods and systems for creating a smooth contact-impact interface in finite element analysis |
TWI319166B (en) * | 2006-03-06 | 2010-01-01 | Via Tech Inc | Method and related apparatus for graphic processing |
US8031957B1 (en) * | 2006-07-11 | 2011-10-04 | Adobe Systems Incorporated | Rewritable lossy compression of graphical data |
EP1995673A1 (en) * | 2007-05-21 | 2008-11-26 | Archi. Con.Des Inventions (Uk) Limited | Computer-aided design apparatus |
US8194193B2 (en) * | 2008-02-08 | 2012-06-05 | The Boeing Company | Method and apparatus for a wide field of view display |
JP5112968B2 (ja) * | 2008-06-24 | 2013-01-09 | 株式会社リコー | 画像閲覧装置 |
CN101599181B (zh) * | 2009-07-01 | 2012-04-25 | 浙江大学 | 一种代数b样条曲面的实时绘制方法 |
KR20110057599A (ko) * | 2009-11-24 | 2011-06-01 | 삼성전자주식회사 | 벡터 오브젝트의 제어점 필터링 방법 및 장치 |
JP5430456B2 (ja) | 2010-03-16 | 2014-02-26 | キヤノン株式会社 | 幾何特徴抽出装置、幾何特徴抽出方法、及びプログラム、三次元計測装置、物体認識装置 |
JP2011076620A (ja) * | 2010-11-19 | 2011-04-14 | Namco Bandai Games Inc | 画像生成システム、プログラム及び情報記憶媒体 |
WO2012073363A1 (ja) | 2010-12-02 | 2012-06-07 | デジタルプロセス株式会社 | 表示処理方法及び装置 |
US9786083B2 (en) * | 2011-10-07 | 2017-10-10 | Dreamworks Animation L.L.C. | Multipoint offset sampling deformation |
CN103424070A (zh) * | 2012-05-23 | 2013-12-04 | 鸿富锦精密工业(深圳)有限公司 | 曲面坐标系建立系统及方法 |
US9299191B2 (en) * | 2012-06-04 | 2016-03-29 | Google Inc. | Adaptive artifact removal |
US9395193B2 (en) * | 2012-06-10 | 2016-07-19 | Apple Inc. | Scalable and efficient cutting of map tiles |
CN102938157B (zh) * | 2012-10-31 | 2015-08-05 | 郑博研 | 一种基于圆域b样条曲线的风格化手绘生成方法与系统 |
US9470967B1 (en) | 2013-06-04 | 2016-10-18 | The Boeing Company | Motion-based system using a constant vertical resolution toroidal display |
US9110358B1 (en) | 2013-06-04 | 2015-08-18 | The Boeing Company | Method for creating and a system for using a constant vertical resolution toroidal display |
DE102014007914A1 (de) | 2014-05-27 | 2015-12-03 | Elektrobit Automotive Gmbh | Graphisches Darstellen von Straßen und Routen unter Benutzung von Hardware-Tesselierung |
KR102197064B1 (ko) * | 2014-10-10 | 2020-12-30 | 삼성전자 주식회사 | Lod를 조절할 수 있는 그래픽스 프로세싱 유닛, 이의 작동 방법, 및 상기 그래픽스 프로세싱 유닛을 포함하는 장치들 |
JP2016111616A (ja) * | 2014-12-09 | 2016-06-20 | キヤノン株式会社 | 情報処理装置および曲線算出方法、画像表示装置 |
CN108830924B (zh) * | 2018-06-20 | 2022-06-10 | 福建省亿鑫海信息科技有限公司 | 一种场景模型显示方法及终端 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5317682A (en) * | 1989-10-24 | 1994-05-31 | International Business Machines Corporation | Parametric curve evaluation method and apparatus for a computer graphics display system |
JPH04172578A (ja) | 1990-11-07 | 1992-06-19 | Dainippon Printing Co Ltd | 裏面除去処理装置 |
JPH0567219A (ja) | 1991-09-09 | 1993-03-19 | Fujitsu Ltd | 3次元図形隠面消去処理方式 |
US5377320A (en) | 1992-09-30 | 1994-12-27 | Sun Microsystems, Inc. | Method and apparatus for the rendering of trimmed nurb surfaces |
JPH06176165A (ja) | 1992-12-03 | 1994-06-24 | Fujitsu Ltd | Nurbs曲面の描画方法 |
JPH06231261A (ja) | 1993-01-29 | 1994-08-19 | Hitachi Ltd | 折線近似によりパラメトリックトリミング曲線を表示する方法およびグラフィック表示システム |
JPH06251161A (ja) | 1993-02-24 | 1994-09-09 | Hitachi Ltd | 曲線・曲面表示方法およびグラフィック表示システム |
US6014472A (en) * | 1995-11-14 | 2000-01-11 | Sony Corporation | Special effect device, image processing method, and shadow generating method |
-
1999
- 1999-05-07 US US09/508,048 patent/US6600485B1/en not_active Expired - Fee Related
- 1999-07-05 WO PCT/JP1999/003639 patent/WO2000002165A1/ja active Application Filing
- 1999-07-05 JP JP2000558490A patent/JP4385524B2/ja not_active Expired - Lifetime
- 1999-07-05 EP EP99926951A patent/EP1011078A4/en not_active Withdrawn
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11891091B2 (en) * | 2019-02-06 | 2024-02-06 | Texas Instruments Incorporated | Semantic occupancy grid management in ADAS/autonomous driving |
Also Published As
Publication number | Publication date |
---|---|
US6600485B1 (en) | 2003-07-29 |
WO2000002165A1 (fr) | 2000-01-13 |
EP1011078A1 (en) | 2000-06-21 |
EP1011078A4 (en) | 2006-01-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4385524B2 (ja) | ポリゴンデータの生成方法及び、これを用いた画像表示装置 | |
US7027050B1 (en) | 3D computer graphics processing apparatus and method | |
KR100261076B1 (ko) | 범프 맵핑과 퐁 쉐이딩을 동시에 수행하는 렌더링방법 및 장치 | |
JP2667835B2 (ja) | コンピユータグラフイツクス表示装置 | |
JP3313221B2 (ja) | 画像生成方法及び画像生成装置 | |
US6226005B1 (en) | Method and system for determining and/or using illumination maps in rendering images | |
US7466314B2 (en) | Resolution-independent surface rendering using programmable graphics hardware | |
US7903112B2 (en) | Drawing processing apparatus, texture processing apparatus, and tessellation method | |
US6191794B1 (en) | Method and apparatus for scaling texture maps for graphical images | |
US7256781B2 (en) | Image processing apparatus and method of same | |
US5877769A (en) | Image processing apparatus and method | |
JPH09231401A (ja) | 画像付き形状データの階層的近似化方法および装置 | |
JPH11506846A (ja) | 効率的なディジタル・モデリング及びテクスチャ・マッピングのための方法並びに装置 | |
JPH07282292A (ja) | テクスチャマッピング方法及び画像処理装置 | |
US7015917B2 (en) | Curved surface subdivision apparatus | |
JPH1196394A (ja) | 画像生成装置および画像生成方法 | |
US6147689A (en) | Displaying 2D patches with foldover | |
JP2883523B2 (ja) | 画像合成装置及び画像合成方法 | |
JP3979162B2 (ja) | 画像処理装置およびその方法 | |
JP2001067491A (ja) | 再分割多角形を用いる画像表示方法及び装置 | |
JP3522714B2 (ja) | 画像生成方法 | |
Ernst et al. | Hardware-supported bump mapping | |
JP4556646B2 (ja) | 図形情報生成装置、画像処理装置、情報処理装置、および図形情報生成方法 | |
US11869123B2 (en) | Anti-aliasing two-dimensional vector graphics using a compressed vertex buffer | |
JP3511301B2 (ja) | 曲面データ生成方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060705 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060705 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20090908 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20090921 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121009 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121009 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121009 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121009 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121009 Year of fee payment: 3 |