(57)【特許請求の範囲】
【請求項１】
パラメトリック・サーフェスを表すＮＵＲＢＳ曲面によりモデリングされるＮＵＲＢＳモデルをポリゴンに変換し，該ポリゴンで構成されるオブジェクトを画面上に表示する画像処理装置において，
ＮＵＲＢＳモデルの座標を記憶する記録媒体と，
視点の座標及び／又は方向の変化に対応して，前記記録媒体に記憶される前記ＮＵＲＢＳモデルの座標を前記視点を原点とする視点座標系の座標に変換する変換部と，
前記視点座標系の座標に変換された前記ＮＵＲＢＳモデルの画面に対する詳細度を決定する決定部と，
前記詳細度に応じて前記ＮＵＲＢＳモデルを定義する階数を下げることにより，前記ＮＵＲＢＳモデル形状を単純化する単純化部と，
前記単純化されたＮＵＲＢＳモデルに基づいて，ポリゴンを生成する生成部とを備えることを特徴とする画像処理装置。
【請求項２】
請求項１において，
前記決定部は，画面の表示領域に対する該表示領域に表示されるオブジェクトの占める領域の割合によって，前記詳細度を決定することを特徴とする画像処理装置。
【請求項３】
請求項１又は２において，
前記単純化部は，前記ＮＵＲＢＳモデルを一段階単純化する場合，ＮＵＲＢＳモデルを定義するノット列の最後の要素を削除して，Ｋ×Ｌ階のＮＵＲＢＳ曲面ｍ×ｎヶを，（Ｋ−１）×（Ｌ−１）階のＮＵＲＢＳ曲面（ｍ＋１）×（ｎ＋１）ヶにすることを特徴とする画像処理装置。
【請求項４】
請求項１又は２において，
前記単純化部は，前記詳細度に応じて，前記ＮＵＲＢＳモデルを定義する階数を下げ，且つ有効な制御点の数を減らすことによって，前記ＮＵＲＢＳモデルを単純化することを特徴とする画像処理装置。
【請求項５】
請求項４において，
前記単純化部は，前記ＮＵＲＢＳモデルを一段階単純化する場合，前記ＮＵＲＢＳモデルを定義する制御点マトリクスの最初の行列要素及び，ノット列の最後の要素を削除することを特徴とする画像処理装置。
【請求項６】
請求項４において，
前記単純化部は，前記ＮＵＲＢＳモデルを一段階単純化する場合，Ｋ×Ｌ階のＮＵＲＢＳ曲面ｍ×ｎヶを，（Ｋ−１）×（Ｌ−１）階のＮＵＲＢＳ曲面ｍ×ｎ／４ヶにすることを特徴とする画像処理装置。
【請求項７】
請求項６において，
前記単純化部は，ＮＵＲＢＳモデルの一部または全部を構成する（Ｋ＋１）×（Ｌ＋１）ヶの隣接する有効な制御点に対し，該（Ｋ＋１）又は（Ｌ＋１）が奇数の場合，中央の制御点を囲む２行２列を無効とし，該（Ｋ＋１）又は（Ｌ＋１）が偶数の場合，中央の制御点２行２列を無効として，（Ｋ−１）×（Ｌ−１）階のＮＵＲＢＳ曲面ｍ×ｎ／４ヶにすることを特徴とする画像処理装置。
【請求項８】
請求項６において，
前記単純化部は，前記単純化後に有効な制御点のウエイトに，前記有効な制御点のウエイトと，その周囲の無効になった制御点のウエイトとの平均値を用いることを特徴とする画像処理装置。
【請求項９】
請求項６乃至８のいずれかにおいて，
前記単純化部は，前記ＮＵＲＢモデルを定義するノット列のうち，前記ＮＵＲＢＳモデルを構成する曲線セグメントが有効な範囲では，端の要素を残し，１つおきに要素を削除し，該曲線セグメントが有効な範囲の前後にある曲線セグメントが有効でない範囲では，端の要素を残し，それぞれ１つずつ要素を削除することを特徴とする画像処理装置。
【請求項１０】
パラメトリック・サーフェスを表すＮＵＲＢＳ曲面によりモデリングされるＮＵＲＢＳモデルから，画面上に表示されるオブジェクトを構成するポリゴンを生成する画像処理装置におけるポリゴン生成方法であって，
視点の座標及び／又は方向の変化に対応して，前記画像処理装置に記憶される前記ＮＵＲＢＳモデルの座標を，前記視点を原点とする視点座標系の座標に変換するステップと，
前記視点座標系の座標に変換された前記ＮＵＲＢＳモデルの画面に対する詳細度を決定するステップと，
前記詳細度に応じて前記ＮＵＲＢＳモデルを定義する階数を下げることにより，前記ＮＵＲＢＳモデルの形状を，単純化するステップと，
前記単純化されたＮＵＲＢＳモデルに基づいてポリゴンを生成するステップとを備えることを特徴とするポリゴン生成方法。
【請求項１１】
請求項１０において，
前記詳細度は，画面の表示領域に対する該表示領域に表示されるオブジェクトの占める領域の割合によって，決定されることを特徴とするポリゴン生成方法。
【請求項１２】
請求項１０又は１１において，
前記ＮＵＲＢＳモデルは，前記詳細度に応じて，前記ＮＵＲＢＳモデルを定義する階数を下げ，且つ有効な制御点の数を減らすことによって，単純化されることを特徴とするポリゴン生成方法。
【請求項１３】
画像処理装置に，パラメトリック・サーフェスを表すＮＵＲＢＳ曲面によりモデリングされるＮＵＲＢＳモデルをポリゴンに変換し，該ポリゴンで構成されるオブジェクトを画面上に表示させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体であって，
前記画像処理装置に，
視点の座標及び／又は方向の変化に対応して，前記画像処理装置の記録媒体に記憶される前記ＮＵＲＢＳモデルの座標を，前記視点を原点とする視点座標系の座標に変換するステップと，
前記視点座標系の座標に変換された前記ＮＵＲＢＳモデルの画面に対する詳細度を決定するステップと，
前記詳細度に応じて，前記ＮＵＲＢＳモデルを定義する階数を下げることにより，前記ＮＵＲＢＳモデルの形状を単純化するステップと，
前記単純化されたＮＵＲＢＳモデルに基づいて，ポリゴンを生成するステップとを実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１４】
請求項１３において，
前記詳細度は，画面の表示領域に対する該表示領域に表示されるオブジェクトの占める領域の割合によって，決定されることを特徴とするプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１５】
請求項１３又は１４において，
前記ＮＵＲＢＳモデルは，前記詳細度に応じて，前記ＮＵＲＢＳモデルを定義する階数を下げ，且つ有効な制御点の数を減らすことによって，単純化されることを特徴とするプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【技術分野】
本発明は、パラメトリック・サーフェスを表すＮＵＲＢＳ（Non Uniform Rational B-Spline）曲面でモデリングされるＮＵＲＢＳモデルに基づいてポリゴンを生成する方法及び、それを適用した画像表示装置に関する。
【０００２】
【背景技術】
図８５は、従来のポリゴンを用いた画像表示装置としてのゲーム装置の一般的構成例を説明する図である。ホストプロセッサ１００の制御によりディスプレイ４００に表示されるオブジェクトを構成する複数のポリゴンデータが、ゲームプログラムの進行に対応してジオメトリ演算器２００に入力される。
【０００３】
ジオメトリ演算器２００に入力されたポリゴンデータは、各々原点座標を有する３次元のローカル座標でポリゴンを定義している。ジオメトリ演算器２００は、このローカル座標で定義されたポリゴンデータを全てのオブジェクトに対して共通のワールド座標系に変換する。
【０００４】
さらに、このワールド座標系に置かれた視点を原点とする３次元視点座標に変換する。視点はゲームプログラムの進行に対応して変化するので、この視点の変化に対応してポリゴンの視点座標が更新される。
【０００５】
次に、視点座標を原点として、オブジェクトが表示されるディスプレイ４００の画面に対応するスクリーンに投影され、ポリゴンデータは、２次元平面座標に変換される。
【０００６】
２次元平面座標に変換されたポリゴンデータは、次いで、レンダラー３００に入力される。レンダラー３００は、ポリゴンデータに基づき、ポリゴンに対するテクスチャの張りつけ、照明効果、ＲＧＢの色データの付与等のレンダリング処理を行う。
【０００７】
次いで、レンダラー３００は、レンダリング処理出力をビデオＲＡＭに書込み、これを繰り返し読み出してディスプレイ４００に送ることにより、オブジェクトを表示することができる。
【０００８】
一方、近年、ゲーム装置等で表示される人間等のオブジェクトを、３次元コンピュータグラフィック（ＣＧ）モデリングツールにより生成されるパラメトリック・サーフェスを表すＮＵＲＢＳ（Non Uniform Rational B-Spline）曲面でモデリングされるＮＵＲＢＳモデルによって定義する技術が採用されている。このＮＵＲＢＳモデルは、曲面を有するオブジェクトを定義するのに適した技術である。
【０００９】
すなわち、オブジェクトが曲面形状を有する場合に、そのオブジェクトをポリゴンの集合で定義するよりも、ＮＵＲＢＳモデルで定義する方が、オブジェクトのデータ量を少なくすることができる。
【００１０】
そして、上述のようなオブジェクトをＮＵＲＢＳモデルで定義する技術を想定する場合、従来のゲーム装置では、ＮＵＲＢＳモデルを直接扱うことができないので、まず、ゲーム開発装置において、ＣＧモデリングツールによりＮＵＲＢＳモデルがポリゴンに変換され、このポリゴンのデータがゲーム装置のメモリに保存される。
【００１１】
この時、ＮＵＲＢＳ曲面オブジェクトは、多数のポリゴンに変換されるため、ポリゴンに変換された後のデータ量は、非常に大きくなる。このために、これを保存する大容量のメモリが必要となる。
【００１２】
ここで、１つのオブジェクトを構成するポリゴンの数は、スクリーン上に表示されるオブジェクトの大きさにより減らすことが可能である。例えば、視点の座標位置との距離が遠くなる程、オブジェクトのスクリーン上に表示される大きさは小さくなり、これを構成するポリゴンの数も小さくできる。
【００１３】
しかし、上記想定されるゲーム装置においてＮＵＲＢＳ曲面を予めポリゴンに分割したオブジェクトを用いる技術では、表示されるオブジェクトの大きさにかかわらず、これを構成するポリゴンの数を変えていない為に、１つのオブジェクトに対して、表示の大きさにかかわらず、同じ数のポリゴン処理を必要とし、１つのポリゴンが１ピクセルよりも小さな場合でも、ポリゴン処理が必要となる。
【００１４】
また、ＮＵＲＢＳ曲面オブジェクトについて、ポリゴン頂点データでなくＮＵＲＢＳ曲面の制御点の段階でジオメトリ演算処理を行うことが可能である。しかし、上記想定されるＮＵＲＢＳ曲面オブジェクトを用いたゲーム装置では、ポリゴン頂点データの段階でジオメトリ演算処理を行っているので、処理負荷が重くなる。
【００１５】
さらにまた、ＮＵＲＢＳ曲面オブジェクトを変形する場合は、ホストプロセッサにより、多量のポリゴン頂点を制御することが必要となり、ホストプロセッサとジオメトリ演算器間を接続するバスも多量なポリゴンデータを転送する為に、非常に高いバス帯域が必要とされる。
【００１６】
また、ＮＵＲＢＳモデルの曲面形状が複雑であるほど、ＮＵＲＢＳモデル上の１つの点（即ち、ポリゴンの１つの頂点座標）を求めるための演算量も増大する。
【００１７】
従って、ＮＵＲＢＳモデルの曲面形状が複雑であるほど、ＮＵＲＢＳモデルからポリゴンへの変換処理量も膨大となり、ゲーム装置に必要なリアルタイム処理に支障が生じるおそれがある。
【００１８】
このとき、ＮＵＲＢＳモデルが複雑な曲面形状である場合であっても、先に言及したようにそれが視点から遠い位置にあって、画面に表示されるオブジェクトのサイズが小さい場合、遊戯者にとって、その複雑な曲面形状を視覚的に判別することは難しい。
【００１９】
したがって、画面上のオブジェクトのサイズが小さい場合は、その形状を忠実に多量のポリゴンによって再現する必要がなく、ＮＵＲＢＳモデルの曲面形状を多少単純化させて不都合はない。ＮＵＲＢＳモデルの曲面形状を単純化すれば、変換されるポリゴンの数を減らすことができるので、ポリゴンデータ量の削減を図ることができる。また、ＮＵＲＢＳモデル上の点を求める演算量も少なくなるので、変換処理速度の向上を図ることができる。あるいは、ＮＵＲＢＳモデルの曲面形状を単純化する代わりに、単に曲面のサンプリング点の数を減らすことも可能である。
【００２０】
しかしながら、上記想定されるゲーム開発装置においてＮＵＲＢＳモデルをポリゴンに変換（複数のポリゴンに分割）して、ポリゴンを生成する方法では、表示されるオブジェクトの大きさにかかわらず、ＮＵＲＢＳモデルを単純化することはせず、複雑な形状のＮＵＲＢＳモデルのサイズが小さい場合であっても、その曲面形状のまま、ＮＵＲＢＳモデル上の点を演算し、ポリゴンに分割していた。
【００２１】
そのため、従来のゲーム装置（画像表示装置）は、膨大なポリゴンデータを記憶する大容量のメモリを必要とし、また、ポリゴンデータの演算手段（ＣＰＵなど）に大きな負荷がかかっていた。
【００２２】
【発明の概要】
したがって、本発明の目的は、ＮＵＲＢＳ曲面オブジェクトをポリゴンに変換する技術において、効率的なポリゴンの生成方法及び、これを用いた画像表示装置を提供することにある。
【００２３】
さらに、本発明の目的は、ＮＵＲＢＳ曲面オブジェクトをポリゴンに変換する技術において、変換後のポリゴンの保存のための記憶容量を小さくすることを可能とするポリゴンの生成方法及び、これを用いた画像表示装置を提供することにある。
【００２４】
また、本発明の目的は、ＮＵＲＢＳ曲面オブジェクトをポリゴンに変換する技術において、ホストプロセッサと、ポリゴン描画プロセッサ（レンダリング処理用プロセッサ）間のポリゴンデータ等のデータ転送量を削減可能とするポリゴンの生成方法及び、これを用いた画像表示装置を提供することにある。
【００２５】
さらにまた、本発明の目的は、ＮＵＲＢＳ曲面オブジェクトをポリゴンに変換する技術において、ＮＵＲＢＳ曲面オブジェクトのデータを直接処理することにより、ＮＵＲＢＳ曲面オブジェクトからポリゴンに変換するための演算量及び、ポリゴンを描画するプロセッサに与える負荷を最適化することができるポリゴンの生成方法及び、これを用いた画像表示装置を提供することにある。
【００２６】
さらに、本発明の目的は、ＮＵＲＢＳ曲面オブジェクトをポリゴンに変換する技術において、ＮＵＲＢＳ曲面オブジェクトのデータを直接処理することにより、表示される大きさに応じてＮＵＲＢＳ曲面オブジェクトの詳細度を最適化することを可能とするポリゴンの生成方法及び、これを用いた画像表示装置を提供することにある。
【００２７】
さらに、本発明の目的は、ＮＵＲＢＳモデルをポリゴンに変換して、ポリゴンを生成する技術において、ポリゴンのデータ量を少なくすることができるポリゴン生成方法及びそれを適用した画像表示装置を提供することにある。
【００２８】
また、本発明の目的は、ＮＵＲＢＳモデルをポリゴンに変換して、ポリゴンを生成する技術において、その変換処理量を軽減することができるポリゴン生成方法及びそれを適用した画像表示装置を提供することにある。
【００２９】
さらに、本発明の目的は、ＮＵＲＢＳ曲面モデルのデータを直接扱う際のトリミングのための演算をできるだけ単純化するトリミング曲線の処理方法及び、これを用いた３次元画像処理システムを提供することにある。
【００３０】
さらにまた、トリミングされたＮＵＲＢＳ曲面モデルをリアルタイムに描画することを可能とするトリミング曲線の処理方法及び、これを用いた３次元画像処理システムを提供することにある。
【００３１】
上記の本発明の課題を達成するポリゴンの生成方法及びこれを用いた画像表示装置は、基本的特徴として、プログラムの進行に対応して、ＮＵＲＢＳオブジェクトデータを視点を原点とする座標に座標変換し、且つディスプレィ上にオブジェクトを描画する詳細度を決定し、決定されたオブジェクトを描画する詳細度に従って、ＮＵＲＢＳオブジェクトデータをポリゴンにより構成されるオブジェクトに変換する際の該ポリゴンの分割数を求め、該分割数に従って変換されるポリゴンの頂点の計算を行う。さらに、計算された頂点により構成されるポリゴンに対し、レンダリング処理を行う。
【００３２】
前記基本的特徴において、具体的態様として、上記計算された頂点のうち前記ディスプレィ上に表示する表示画面から全ての頂点が外れるポリゴンを削除し、残ったポリゴンの頂点に対して、頂点の属性値を計算する。
【００３３】
さらにまた、一の態様として、上記計算された頂点を共有する、ポリゴンの２辺の外積を求め、求めた外積の方向と視点方向とからポリゴンの表裏を判定し、裏となるポリゴンを削除した後、残ったポリゴンの頂点に対して、頂点の属性値を計算する（但し、両面表示の属性を持つポリゴンは削除しない）。
【００３４】
さらに、一の態様として、前記オブジェクトを描画する詳細度は、前記ディスプレィの表示面積と、この表示面積に表示されるオブジェクトの占める割合によって決定されることを特徴とする。
【００３５】
さらにまた、別の態様として前記オブジェクトを描画する詳細度は、プログラムに含まれる実行シーン毎に、前記生成されるポリゴンデータに対するレンダリング処理が過負荷とならないように該プログラムによって調整されることを特徴とする。
【００３６】
上記本発明の課題を達成するトリミング曲線の処理方法は、基本的構成として、パラメトリック空間上でｕ，ｖ方向の複数の頂点で表されるパラメトリック曲面に対応して、ｕ，ｖ方向の頂点数と等しい大きさの２次元配列を生成する。ついで、前記パラメトリック曲面上のトリミング曲線を、前記２次元配列上の直線線分による多角形へ変換する。さらに、変換された多角形内の頂点を有効とするか、無効とするかの判定を行う。
【００３７】
更なる本発明の課題と特徴は、以下の図面に従って説明される発明の実施の形態から明らかとなる。
【００３８】
【発明を実施するための最良の形態】
以下に本発明の実施の形態を図面に従い説明する。なお、図において、同一又は、類似のものには、同一の参照番号及び、参照記号を付して説明する。
【００３９】
ここで、本発明の実施例を説明するに先立って、本発明の理解を容易とするために本発明の対象とされるＮＵＲＢＳモデルについて説明する。
ＮＵＲＢＳ曲面は、階数分の制御マトリクス（例えば、４×４階ならば１６ケ）によって形成されるＮＵＲＢＳモデルの構成要素と定義できる。そして、図８６は、ＮＵＲＢＳモデルのＮＵＲＢＳ曲面を構成するＮＵＲＢＳ曲線を説明する図である。
【００４０】
ＮＵＲＢＳ曲線は、「重み（ウエイト）付きの制御点」、曲線にいくつの制御点が影響を与えるかを示す「階数」及び、制御点を混ぜ合わせるブレディング関数を決めるためのパラメータである「ノット列（ノットベクトルとも言う）」から形成される。
【００４１】
重み（ウエイト）付きの制御点Ｑiの基本フォーマットは、３次元座標（ｘ，ｙ，ｚ）とウエイトωを有している。階数Ｋは、（階数＝次数＋１）の関係で表される。
【００４２】
図８６(a)は、階数が２の場合であって、２つの制御点Ｑ1及びＱ2によって、一次曲線が形成され、図８６(b)は、階数が３の場合であって、３つの制御点Ｑ1、Ｑ2及びＱ3によって、二次曲線が形成され、図８６(c)は、階数が４の場合であって、４つの制御点Ｑ1、Ｑ2、Ｑ3及びＱ4によって三次曲線が形成される。
【００４３】
ノット列のフォーマットは、要素ｕ0,ｕ1,ｕ2,…,ｕmで表され、要素の数は、（制御点の数＋階数）となる。そして、ＮＵＲＢＳ曲線上の点Ｐ（ｕ）は、次の式（１）により求められる。
【００４４】
【数１】
0004385524.tif 000002
ここで、ｉmax−（ｉmin−１）＝階数Ｋ
【００４５】
また、Ｍi、K(ｕ)はブレンディング関数で、次のCox-deBoorの漸化式（２）で求められる。
【００４６】
【数２】
0004385524.tif 000003
ｋ＝１の時、Ｍi,1(ｕ)＝１ (ｕi ≦ ｕ < ｕi+１)
０ (ｕ < ｕi, ｕi+１≦ｕ)
【００４７】
例えば、図８７に示す様に、制御点４つ（Ｑ0〜Ｑ3）、４階（従って、三次曲線）によってＮＵＲＢＳ曲線を形成する場合、ノット列は、ｕ0,ｕ1, ｕ2,…,ｕ7の８つが必要である。ブレンディング関数は、図８８に示す様に４つのＭ0,4(ｕ)、Ｍ1,4(ｕ)、Ｍ2,4(ｕ)、Ｍ3,4(ｕ)が必要である。そして、Cox-deBoorの漸化式を展開して、ｕ3≦ ｕ < ｕ4の範囲で曲線が存在することが分かる。
【００４８】
さらに、階数を増やすことにより、ＮＵＲＢＳ曲線は複雑に形成されるが、図８９に示すように、通常４階程度のＮＵＲＢＳ曲線を１つのセグメントとして、いくつかのセグメントを接続することによって複雑なＮＵＲＢＳ曲線を形成する。
【００４９】
ただし、隣り合うセグメントを形成する際には、以下の例のようにパラメータを少しずつずらして用いる。この例でも、４階ＮＵＲＢＳ曲線とする。
【００５０】
図８９において、曲線セグメント１は、制御点Ｑ0、Ｑ1、Ｑ2、Ｑ3を有し、ノット列はｕ0, ｕ1, ｕ2, ｕ3, ｕ4, ｕ5, ｕ6, ｕ7（ｕ3≦ｕ<ｕ4に曲線が存在）、ブレンディング関数は、Ｍ0,4(ｕ)、Ｍ1,4(ｕ)、Ｍ2,4(ｕ)、Ｍ3,4(ｕ)である。
【００５１】
同様に、曲線セグメント２は、制御点Ｑ1, Ｑ2, Ｑ3, Ｑ4を有し、ノット列は、ｕ1, ｕ2, ｕ3, ｕ4, ｕ5, ｕ6, ｕ7, ｕ8（ｕ4≦ｕ<ｕ5に曲線が存在）、ブレンディング関数は、Ｍ1,4(ｕ)、Ｍ2,4(ｕ)、Ｍ3,4(ｕ)、Ｍ4,4(ｕ)である。
【００５２】
また、同様に、曲線セグメント３は、制御点Ｑ2、Ｑ3、Ｑ4、Ｑ5を有し、ノット列は、ｕ2, ｕ3, ｕ4, ｕ5, ｕ6, ｕ7, ｕ8, ｕ9（ｕ5≦ｕ<ｕ6に曲線が存在）、ブレンディング関数は、Ｍ2,4(ｕ)、Ｍ3,4(ｕ)、Ｍ4,4(ｕ)、Ｍ5,4(ｕ)である。
【００５３】
曲線全体としては、制御点がＱ0〜Ｑ5の６つであり、ノット列は、ｕ0〜ｕ9の１０ケ、ブレンディング関数は、Ｍ0,4(ｕ)〜Ｍ5,4(ｕ)の６種類（ｕの値を変える毎に再計算が必要）である。
【００５４】
さらに一般化して考えると、Ｋ階のＮＵＲＢＳ曲線のセグメントｍケを形成するためには、制御点が（Ｋ−1＋ｍ）ケ、ノット列が（２Ｋ−１＋ｍ）ケ必要であり、更にブレンディング関数は、（Ｋ−１＋ｍ）種類である。
【００５５】
上記したＮＵＲＢＳ曲線を拡張することにより、ＮＵＲＢＳ曲面、そしてＮＵＲＢＳモデルが得られる。図９０に示すＮＵＲＢＳ曲面を考えると、このＮＵＲＢＳ曲面は基本的にＮＵＲＢＳ曲線の応用である。
【００５６】
ＮＵＲＢＳ曲線を形成する際に定義したノット列（これをｕノット列という）の他にもう一つのノット列（これをｖノット列という）を定義する。さらに、制御点をｕ，ｖ座標上にマトリクス状に定義する。
【００５７】
ウェイト付き制御点Ｑij（それぞれ３次元座標：ｘ，ｙ，ｚ、ウェイトωを持つ）及び、ｕ方向、ｖ方向に対して階数Ｋ，Ｌが与えられる。さらに、ノット列ｕ0,ｕ1,ｕ2,…,ｕm、ｖ0,ｖ1,ｖ2,…,ｖn（要素の数は、それぞれの方向に対する制御点の数＋階数）となる。
【００５８】
上記のパラメータを用いて、以下の式（３）によってＮＵＲＢＳ曲面を形成するデータ上の点Ｐ(ｕ,ｖ)が求められる。
【００５９】
【数３】
0004385524.tif 000004
ここで、imax - (imin - 1)=Ｋ, j max - (jmin - 1) =Ｌ
【００６０】
Ｍi,K(ｕ),Ｎj,L(ｖ)は、ブレンディング関数で、それぞれ以下のCox-deBoorの漸化式で求められる。
【００６１】
【数４】
0004385524.tif 000005
ｋ＝１の時、Ｍi,1(ｕ) ＝１ (ｕi≦ ｕ < ｕi+1)
０ (ｕ < ｕi or ｕi+1 ≦ ｕ)
上記（４）式は、先の式（２）と同様である。
【００６２】
【数５】
0004385524.tif 000006
l＝１の時、Ｎj,1(ｖ) ＝１ (ｖj ≦ｖ <ｖj+1)
０ (ｖ <ｖj orｖj+1 ≦ｖ)
【００６３】
上記のように、ＮＵＲＢＳ曲面上の点Ｐ(ｕ，ｖ)は３次元座標：ｘ，ｙ，ｚとして求めることができる。ところで、一般的なコンピュータ・グラフィック・システムでは、この３次元座標データの他に以下の例のような３種類のアトリビュート・データを持っている。
▲１▼２次元テクスチャ座標：ｓ, ｔ
▲２▼法線ベクトル：(Nx, Ny, Nz)
▲３▼カラー：Ｒ，Ｇ，Ｂ及び半透明度：α
【００６４】
ＮＵＲＢＳ曲面上の点Ｐ(ｕ,ｖ)に対するアトリビュート・データを求める方法の例としては、制御点Ｑijに下記のアトリビュート・データを付加して、３次元座標と同じ計算式を用いる方法がある。
【００６５】
すなわち、ウェイト付き制御点Ｑijのフォーマットとして、３次元座標：ｘ,ｙ，z、２次元テクスチャ座標：s, t、法線ベクトル：(Ｎx,Ｎy,Ｎz)、カラー、半透明度：Ｒ,Ｇ,Ｂ,α、及びウェイト：ωである。このウェイト：ω以外のそれぞれのパラメータを先に説明した計算式Ｐ(ｕ,ｖ)、Ｍi,k、Ｎj,lに当てはめる。
【００６６】
さらに、複雑なＮＵＲＢＳモデルを形成する場合は、上記ＮＵＲＢＳ曲線の説明と同様に、４階程度のＮＵＲＢＳ曲面を１つのパッチとして、いくつかのパッチを接続することによって複雑なＮＵＲＢＳ曲面を形成する。曲面の場合もやはり、隣り合うパッチを形成する際にはパラメータを少しずつずらして用いる。また、制御点はマトリクス状に定義し、ノット列や（ノット列の値から求める）ブレンディング関数はｕ方向、ｖ方向に対して定義する。
【００６７】
従って、一般化して考えると、Ｋ階×Ｌ階ＮＵＲＢＳ曲面のパッチｍ×ｎケを形成するためには、制御点は、(Ｋ−１＋ｍ)× (Ｌ−１＋ｎ)ケ必要であり、ノット列はｕ方向に (２Ｋ−１＋ｍ)ケ、およびｖ方向に (２Ｌ−１＋ｎ)ケ必要である。さらに、ブレンディング関数は、ｕ方向に (Ｋ−１＋ｍ)種類、およびｖ方向に (Ｌ−１＋ｎ)種類必要である。
【００６８】
図１は、本発明に従うポリゴンの生成方法を適用した画像表示装置の対象となる、上記のＮＵＲＢＳ曲面オブジェクトをポリゴンに変換する技術を用いた画像表示装置としてのゲーム装置の構成例概念ブロック図である。
【００６９】
図８５に示したジオメトリ演算器２００を備えた従来例システムとの比較において、本発明の対象となるＮＵＲＢＳ曲面オブジェクトをポリゴンに変換する技術を用いた画像表示装置では、ジオメトリ演算器２００に対応する構成が、モデルビュー変換器２０１、ポリゴン生成器２０２及び、Ｂスプライン演算器２０３で構成されている。
【００７０】
さらに、図１において、ホストプロセッサ１００の制御により出力されるデータは、ポリゴンデータではなく、上記のＮＵＲＢＳ曲面で構成されるオブジェクトデータである。
【００７１】
図２は、図１の構成の動作を説明する本発明に従うポリゴンデータ生成方法を適用する概略動作フロー図である。
【００７２】
以下詳細に説明される本発明の実現に際しては、画像表示装置にハードウェア要素を組み込んで実現される場合のほか、図示しない記録媒体に格納されたプログラムを画像表示装置において実行制御することにより、あるいは、ファームウェアとして実現することも可能である。
【００７３】
図１の動作を図２を参照して説明すると、ホストプロセッサ１００の制御によりプログラムの進行に対応してＮＵＲＢＳ曲面オブジェクトデータがモデルビュー変換器２０１に転送される（ステップＳ１）。
【００７４】
モデルビュー変換器２０１において、ＮＵＲＢＳ曲面オブジェクトデータに対して、モデルビュー変換（ステップＳ２）と、本発明の特徴としてオブジェクトを描画する詳細度（ＬＯＤ：Level Of Detail）を決定する（ステップＳ３）。
【００７５】
ここで、モデルビュー変換は、ローカル座標で得られるＮＵＲＢＳ曲面オブジェクトデータの座標を、ワールド座標に変換し、更に視点座標（視点を原点とし、奥行きをＺ軸とした座標系）に変換する処理である。
【００７６】
これらの変換処理は、ＮＵＲＢＳ曲面オブジェクトのデータに含まれる制御点座標と、ホストプロセッサ１００から送られるオブジェクト変換行列の乗算によって行われる。
【００７７】
さらに、ＬＯＤの決定は、後に具体例として説明するが、モデルビュー変換後、オブジェクトのスクリーンに投影される大きさに基づいて決定される。予めオブジェクトのデータの中にオブジェクトの大きさを表すための値を用意し、その値によって、スクリーンに投影することによりオブジェクトがスクリーンに投影される時の大きさを知ることができる。
【００７８】
次に、本発明の特徴として、決定されたＬＯＤにしたがってポリゴンの分割数が求められ、分割するポリゴンの頂点計算が行われる（ステップＳ４）。
【００７９】
ここで、上記のＬＯＤの決定と、ポリゴンの分割数について、以下に説明する。
【００８０】
図３は、オブジェクトがディスプレィ画面に投影された時の画面に占める面積の割合を、概算値Ｓｃとして求める説明図である。
【００８１】
ＬＯＤは、この概算値Ｓｃと画面解像度Ｒによって後で説明する方法で決定される。視点Ｏから中心前方向にｚ座標が与えられ、中心線から上下、左右方向にそれぞれ４５°ずつ開いた視野角を基準にする。
【００８２】
図３に示すように、視野角が４５°であり、両サイド合わせて９０°であることを想定して、あるオブジェクト（モデル）のサイズをＳｏ、オブジェクトの基準点の視点座標系における奥行きをＺ、上下の視野角係数をＡｕｄ、左右の視野角係数をＡｌｒ、ユーザーによって与えられる調節のための係数をＣとすれば、Ｓｃ＝（Ｓｏ／Ｚ）2 ×Ａｕｄ×Ａｌｒ×Ｃ
で表される。
【００８３】
視野角係数はスクリーンそのもののサイズに反比例して決定される。視点Ｏからスクリーンの端 xl までの距離を ｒ'、視点Ｏからスクリーンの中心 xmまでの距離をｌとすると、ｒ'cosθ'＝ｌ  である。
スクリーンの中心から端までの長さ (xl−xm)は、θ'＝４５°の時
(xl - xm) = r' sinθ' ＝ 1  である。
【００８４】
次に、任意の角度θの場合について検討すると、図４に示すような図になる。そして、次の三角関数の関係があるので、
【００８５】
【数６】
0004385524.tif 000007
角度θにおけるスクリーンの中心から端までの長さ r sinθを求める。
【００８６】
ここで、視野角によらず視点からスクリーンまでの距離はｌなので、
r cosθ = r' cosθ' = 1、従って、r sinθ= tanθ  である。
【００８７】
視野角係数Ａｕｄ、Ａｌｒはスクリーンそのもののサイズに反比例して決定される。例えば、θが３０°の時、ｒsinθの値は上式に代入して1/√３なので、視野角係数は√３となる。
【００８８】
ＬＯＤは、上記に求めたオブジェクトの画面占有面積の概算値Ｓｃと画面解像度のパラメータＲによって決定される。オブジェクトの基準点の視点座標系での奥行きＺが、ある値から２倍の値に変わると、Ｓｃの値は１／４の値に変わる。この際、ＬＯＤの値は＋１される。
【００８９】
例えば、ＬＯＤが４種類、Ｎをある定数とすると、図５（Ａ）に示すような関係となる。
【００９０】
また、例えばゲームの種類等によって、画面解像度が高い時ほどオブジェクトを細かく（すなわちＬＯＤの値をできるだけ小さく）表示したいという要因もある。
【００９１】
例えば、画面解像度が８００×６００から１０２４×７６８に変わると、画面全体の画素数は４８万画素から約７８万画素に増える。その比率（７８ /４８＝１．６２５）の分だけ、ＬＯＤの値が小さく維持されるＳｃの区間が大きくなるようにする。
【００９２】
したがって、上記の例に当てはめると、図５（Ｂ）に示すような関係となる。
【００９３】
この様に決定されたＬＯＤによって、モデルのｕ方向、ｖ方向における変換するポリゴンの分割数が決まる。
【００９４】
例えば、ユーザーがＬＯＤと、ｕ，ｖの分割数の関係を図６のようなテーブルを与えていた場合、図７に示すようなオブジェクトが、ＬＯＤ＝２の時には図示されるように複数のポリゴンに変換される。
【００９５】
ただし、この図７では説明を単純にするために４角形ポリゴンに変換しているが、実際には３角形ポリゴンを形成する。これは、４角形ポリゴンが歪んで表示が不自然になることを避けるためである。
【００９６】
さらに図１に戻り説明すると、上記の様にＬＯＤに基づき、モデルビュー変換器２０１によって決定された変換するポリゴン数にしたがって、ポリゴン生成器２０２とＢスプライン演算器２０３により、ＮＵＲＢＳ曲面オブジェクトのデータからポリゴンの頂点座標および頂点の属性データが計算される。
【００９７】
さらに、ポリゴン生成器２０２は、計算されたポリゴンの頂点座標および頂点の属性データからポリゴンデータを生成し、ポリゴン描画プロセッサ３００に転送する。ポリゴン描画プロセッサ３００は、先に図８５において説明したレンダラー３００に相当する機能を有する（ステップＳ５）。
【００９８】
また、Ｂスプライン演算器２０３は、ポリゴン生成器２０２から送られるＢスプライン関数のノットベクトルによって初期化され、与えられた曲面上のパラメータ値および階数値にしたがって、Ｂスプライン関数の値をポリゴン生成器２０２に戻す。
【００９９】
さらに、上記のポリゴンデータを生成する段階（ステップＳ５）において、頂点座標の他に、テクスチャ座標、法線ベクトル、頂点のカラー等の頂点の属性データの計算も行われる。これらの属性データの計算は、ポリゴンの頂点座標の計算後、不可視ポリゴンの除去が行われた後で、残されたポリゴンに対して行われる。
【０１００】
ついで、ポリゴン描画プロセッサ３００において、レンダリング処理が行われ、ポリゴンデータは、図１においては、図示していないディスプレィ装置に送られ表示される（ステップＳ６）。
【０１０１】
次に、本発明の特徴とする上記の各ステップについて、実施例に基づき詳細に説明する。
【０１０２】
図８は、本発明を適用する画像表示装置の実施例構成図である。図８において、図１のホストプロセッサ１００は、メインＣＰＵ１００及びメインＣＰＵ用メモリ１０１に相当して構成される。ポリゴン描画プロセッサ３００に対し、レンダリング処理のためのＺバッファメモリ、フレームバッファ及び、テクスチャメモリを含むポリゴン描画プロセッサ用メモリ３０１が備えられる。
【０１０３】
また、図１のモデルビュー変換器２０１及びポリゴン生成器２０２の機能は、サブＣＰＵ２１０及び、サブＣＰＵ用メモリ２１１により実現される。さらに、Ｂスプライン演算器２０３の機能は、ＤＳＰ（デジタル・シグナル・プロセッサ）２０３により実現される。
【０１０４】
メインＣＰＵ１００は、図示しない大容量記憶デバイスに接続され、そこに記録されたＮＵＲＢＳ曲面オブジェクトデータをサブＣＰＵ２１０に転送する。
ＮＵＲＢＳ曲面オブジェクトデータは、以下のデータを含んでいる。
【０１０５】
▲１▼ＮＵＲＢＳ曲面オブジェクトの形状に関するデータ（これはワールド座標もしくはオブジェクトのローカル座標の値）、▲２▼ＮＵＲＢＳ曲面オブジェクトがテクスチャを持つ場合のテクスチャ座標に関するデータ、▲３▼ＮＵＲＢＳ曲面オブジェクトが、ポリゴン描画プロセッサ３００におけるレンダリングにおいて法線ベクトルが必要な場合の法線ベクトルに関するデータ及び、▲４▼ＮＵＲＢＳ曲面オブジェクトがカラーを必要とする場合の頂点カラーに関するデータ、▲５▼オブジェクトの大きさを表すデータである。
【０１０６】
さらに、上記▲１▼〜▲５▼のＮＵＲＢＳデータには、以下のデータが含まれている。▲６▼図８５に示したｕおよびｖ方向の制御点Ｑijの数、▲７▼制御点座標とウェイト：ＮＵＲＢＳ曲面の場合は、ｕおよびｖ方向の２次元配列の構造をしており、２次元配列における制御点Ｑijのそれぞれは３次元空間座標値（ｘ，ｙ，ｚ）を持っている。また、それぞれの制御点はウェイトωの値も持っている。▲８▼ｕ，ｖ方向のそれぞれのＢスプライン関数（ウェイトωを有しない関数）の階数（次数＋１）及び、▲９▼ｕ,ｖ方向のそれぞれのＢスプライン関数を定義するためのノットベクトル等である。
【０１０７】
ここで、上記▲１▼〜▲５▼のＮＵＲＢＳ曲面オブジェクトのデータの他に、オブジェクトの座標を視点座標に変換するためのモデルビュー変換行列及び、ＬＯＤによってポリゴンへの分割数を決めるためのデータが、メインＣＰＵ１００からサブＣＰＵ２１０に転送される。
【０１０８】
サブＣＰＵ２１０は、メインＣＰＵ１００から送られてきたＮＵＲＢＳ曲面オブジェクトを視点座標に変換する。この変換は、ＮＵＲＢＳ曲面オブジェクトの形状に関するＮＵＲＢＳデータに含まれる制御点座標と、上記のメインＣＰＵ１００から転送されるモデルビュー変換行列の乗算によって行われる。
【０１０９】
サブＣＰＵ２１０は、オブジェクトを視点座標に変換後、オブジェクトのスクリーンに投影される大きさによってそのオブジェクトのＬＯＤを決定する。予めオブジェクトのＮＵＲＢＳデータの中に当該オブジェクトの大きさを表すための値を用意する。この値からオブジェクトがディスプレイ装置のスクリーン面に投影されるときの大きさを容易に知ることができる。
【０１１０】
上記において決定されたオブジェクトのＬＯＤ及び、メインＣＰＵ１００から送られてきた、ＬＯＤによってポリゴンへの分割数を決めるためのデータから、ポリゴンの分割数を決定する。
【０１１１】
例えば、ポリゴンへの分割数を決めるためのデータとして、図９に示すようなテーブルが形成されている。すなわち、図９において、各ＬＯＤに対応して、ｕ方向及び、ｖ方向への分割数が与えられている。
【０１１２】
このように、ポリゴンの分割数はメインＣＰＵ１００から送られてくるポリゴンの分割数を決めるためのデータによって決定されるので、ユーザは、このポリゴンの分割数を決めるためのデータに含まれる値を、ポリゴン描画プロセッサ３００に対して過負荷とならないように、プログラム作成段階において、分割数を設定することができる。
【０１１３】
次に、サブＣＰＵ２１０は、ＮＵＲＢＳ曲面オブジェクトデータからポリゴンデータの生成を行う（図２のステップＳ５に対応する）。これは次の３つの段階で行われる。
【０１１４】
第１に、ＮＵＲＢＳ曲面オブジェクトの表面を適切な間隔でサンプリングして、ポリゴンの頂点座標を計算する。
【０１１５】
第２に、計算された頂点座標からなるポリゴンに対して、全ての頂点座標値が、２次元スクリーン表示領域に含まれないポリゴンを除去（即ち、クリッピング）し、また表裏判定により不可視となるポリゴンを除去する。
【０１１６】
なお、一部の頂点のみが２次元スクリーン表示領域から外れる場合は、２次元スクリーン表示領域端に新しい頂点が定義される。また、両面表示の属性を持つＮＵＲＢＳ曲面オブジェクトからは、両面表示の属性を持つポリゴンが生成される。
【０１１７】
第３に、上記クリッピング及び、表裏判定により除去されなかった各ポリゴン（頂点）に対してその頂点の属性値（テクスチャ座標、法線ベクトル、頂点カラー）をＮＵＲＢＳ曲面オブジェクトの表面からサンプリングする。そして、得られた頂点データをポリゴンデータとしてポリゴン描画プロセッサ３００に転送する。
【０１１８】
ここで、上記属性データの省略について図により説明する。例えば、図１３に示すように、つりがね状のＮＵＲＢＳ曲面モデルをポリゴン変換した図形の一部が画面に表示されるとする。
【０１１９】
ＮＵＲＢＳ曲面モデルをポリゴンに変換する方法は、上記したようにＮＵＲＢＳ曲面上のサンプリング点を計算して求め、そのサンプリング点を接続するという方法である。
【０１２０】
この方法は、頂点座標に対してだけでなく、属性データであるテクスチャ座標、法線ベクトル、頂点カラーなどに対しても適用される。
【０１２１】
したがって、ポリゴンに変換した段階で完全に画面外に位置していたり、画面内にあっても裏向きになっているポリゴンに対しては、属性データの計算を省略できる。但し、両面表示の属性を持つポリゴンに対しては、たとえ裏向きになっていても属性データの計算を省略できない。この図１３のＮＵＲＢＳ曲面を展開すると、図１４に示す様になる。
【０１２２】
ポリゴンを構成する全ての頂点が画面外なら、そのポリゴンは完全に画面外に位置しているといえる。さらに、ポリゴンを構成する２辺の外積を計算すれば、その符号により表裏の判定は可能である。
【０１２３】
ただし、この図１３、１４では図７と同様に、説明を単純にするために４角形ポリゴンに変換しているが、実際は３角形ポリゴンを形成する。これは、４角形ポリゴンが歪んで表示が不自然となることを避けるためである。
【０１２４】
次に、本発明の特徴とする上記第１のＮＵＲＢＳ曲面オブジェクトの頂点座標の計算の手順の一方法について、図１０のポリゴンの頂点座標計算動作フロー（ステップＳ０１）を参照して更に説明する。
【０１２５】
ｕ，ｖ方向のノットベクトル（ＵＫＮＯＴ, ＶＫＮＯＴ）および階数（Ｋ,Ｌ）をＢスプライン演算器２０３即ち、ＤＳＰ２０３に送り、これを初期化する（ステップＳ０２）。Ｂスプライン演算器２０３は、ＮＵＲＢＳ曲面オブジェクトデータのブレンディング関数値を計算する機能を有する。
【０１２６】
オブジェクトのＬＯＤによって得られた、ｕ, ｖ方向のポリゴン分割数（Ｎｕ、Ｎｖ）より、パラメータ変数ｕ、ｖの増分Δｕ、Δｖを計算する（ステップＳ０３）。このパラメータ変数ｕ、ｖの増分Δｕ、Δｖは、次の式で表される。
Δｕ＝（パラメータ変数ｕの最大値−最小値）／Ｎｕ
Δｖ＝（パラメータ変数ｖの最大値−最小値）／Ｎｖ
次いで、変数ｉｖ（ｖ方向の頂点のインデックス）を０で、変数ｖをパラメータ変数ｖの最小値で初期化する（ステップＳ０４）。
【０１２７】
変数ｖをＢスプライン演算器２０３に送り、パラメータ変数ｖにおけるブレンディング関数値、Ｎjmin,Ｌ(ｖ)，Ｎjmin+1,Ｌ(ｖ),……、Ｎjmax,Ｌ(ｖ)、および対応する制御点のｖ方向のインデックス値の範囲［jmin,jmax］を得る（ステップＳ０５）。
【０１２８】
同様に、変数ｉu（ｕ方向の頂点のインデックス）を０で、変数ｕをパラメータ変数ｕの最小値で初期化する（ステップＳ０６）。ついで、パラメータ変数ｕにおけるブレンディング関数値、Ｍimin,Ｋ(ｕ)，Ｍimin＋１,Ｋ(ｕ),……、Ｍimax,Ｋ(ｕ)、および対応する制御点のｕ方向のインデックス値の範囲［imin,imax］を得る（ステップＳ０７）。
【０１２９】
上記ステップＳ０５によって得られたｖ方向のブレンディング関数値と制御点のインデックス値と、上記ステップＳ０７によって得られたｕ方向のブレンディング関数値と制御点のインデックス値より、同次空間座標系におけるＮＵＲＢＳ曲面オブジェクト座標を計算する（ステップＳ０８）。
【０１３０】
さらに、ステップＳ０８によって得られた値を同次座標成分（ｗ'）で除算することよって、ＮＵＲＢＳ曲面オブジェクトのパラメータ変数ｕ,ｖにおける座標値が得られる。得られた頂点座標値（x, y, z）および変数（ｕ,ｖ）の値を２次元配列（iｕ, iｖ）に保存する（ステップＳ０９）。
【０１３１】
次いで、変数iｕに１を加算し、変数ｕに増分Δｕを加算する（ステップＳ１０）。そして、もしiｕ <Ｎｕならば、上記ステップＳ０６の処理に戻る（ステップＳ１１）。そうでなければ以下の処理を行う。すなわち、変数iｖに１を加算し、変数ｖに増分Δｖを加算する（ステップＳ１２）。
【０１３２】
もしiｖ < Ｎｖならば、上記ステップＳ０５の処理に戻る（ステップＳ１３）。そうでなければ曲面のポリゴン変換は終了する。以上の処理によって、２次元配列に曲面オブジェクトの座標データが保存される。
【０１３３】
ここで、上記ポリゴンの座標計算処理において、図１に示す構成では、ブレンディング関数（Ｂスプライン関数）値を得るためにＢスプライン演算器２０３を用いている。
【０１３４】
図８の実施例においては、このＢスプライン演算器２０３は、比較的単純な多量の浮動少数演算が行われることから、サブＣＰＵ２１０から直接アクセスできるＤＳＰ２０３によって実現されている。
【０１３５】
このＢスプライン演算器２０３は、上記したように、メインＣＰＵ１００から転送されるＮＵＲＢＳ曲面データに含まれるノットベクトルによって初期化され、Ｂスプライン関数の階数およびパラメータ変数値を与えることによって、Ｂスプライン関数の演算を行う。
【０１３６】
そして、有効な制御点のインデックス値の最大値および最小値、Ｂスプライン関数値（ブレンディング関数値）をサブＣＰＵ２１０に返す。
【０１３７】
Ｂスプライン関数は、先に説明したように、式（２）で示された“Cox-deBoorの漸化式"によって計算される。
【０１３８】
以下に、このＢスプライン演算器２０３の処理手順の一方法を図１１のＢスプライン演算器２０３の動作フロー図を参照して説明する。
【０１３９】
既にＢスプライン演算器２０３には、求めるＢスプライン関数のノットベクトル（ＫＮＯＴ[ｎ]）および階数（Ｋ）が内部にあるメモリに転送されているものとする（ステップ２０）。Ｂスプライン演算器２０３の内部のメモリは、複数のＢスプライン関数のノットベクトルおよび階数を保存することができる様に構成される。
【０１４０】
次いで、外部よりパラメータ変数値ｔが与えられる（ステップＳ２１）。与えられたパラメータ変数値ｔのノットベクトルの有効区間
（ＫＮＯＴ[ｉ] ≦ t ＜ ＫＮＯＴ[ｉ＋１]）を探し、このインデックス値ｉの値を、有効インデックス値（I）とする（ステップＳ２２）。
【０１４１】
さらに、配列Ｎ[０]＝０、Ｎ[１]＝０、…、Ｎ[Ｋ−２]＝０、Ｎ[Ｋ−１]＝１、Ｎ［Ｋ]＝０で初期化する（ステップＳ２３）。
【０１４２】
配列Ｎに対して、上記のCox-deBoorの漸化式の計算を行う（ステップＳ２４〜３０）。配列Ｎ[０],Ｎ[１],…,Ｎ[Ｋ−１]の値をＢスプライン関数値として返す。また、有効インデックス値ＩのＩ−(Ｋ−１)の値を有効な制御点インデックスの最小値、Ｉを有効な制御点のインデックス値の最大値として返す（ステップＳ３１）。なお、図１２は、上記の変数及び、演算方法を示す図である。
【０１４３】
次いで、上記ポリゴン変換処理におけるＮＵＲＢＳ曲面オブジェクトの頂点座標の計算により得られた頂点座標の２次元配列から３角形ポリゴンを形成し、そのポリゴン（頂点）の可視／不可視の判定を行う。以下のものが不可視ポリゴンとして除去される。
【０１４４】
１）ビューボリュームに含まれていないポリゴン
２）視線に対して後ろ向きのポリゴン（ポリゴンの向きは頂点座標より知ることができる）。
【０１４５】
メインＣＰＵ１００から転送されるＮＵＲＢＳ曲面オブジェクトデータは、モデルの形状に関するＮＵＲＢＳデータの他に、頂点の属性データであるテクスチャ座標、法線ベクトル、頂点カラー等もＮＵＲＢＳデータとして定義されており、上記の不可視ポリゴンの除去によって残ったポリゴン（頂点）に対してこれらの属性値の計算を行う(あるいは、別の方法として、法線ベクトルはオブジェクトをポリゴンに分割した後に、それぞれの接線ベクトルを用いて算出しても良い。また、頂点カラーは定義しなくて、オブジェクト全体に１つのカラーを定義しても良い。)。
【０１４６】
属性値の計算も上記の頂点座標の計算と同様に行われるが、各頂点におけるパラメータ変数値ｕ，ｖは頂点データの中に保存されている。これにより、それぞれの属性に対して定義されたＮＵＲＢＳのノットベクトル及び、階数をＢスプライン演算器２０３に転送した後、各頂点データの中に保存されたパラメータ変数値ｕ，ｖをＢスプライン演算器２０３に与えることによって、ＮＵＲＢＳの計算のためのＢスプライン関数値を得ることができる。
【０１４７】
サブＣＰＵ２１０は、以上の処理によって得られたポリゴンの頂点座標、テクスチャ座標、法線ベクトル、カラー値を、ポリゴンデータとしてポリゴン描画プロセッサ３００に転送する。必要によっては転送の前にポリゴンデータの並べ替え等を行なう。
【０１４８】
次に、本発明の特徴の1つとしてＮＵＲＢＳモデルの単純化方法について説明する。ＮＵＲＢＳモデルを単純化するための第一の方法は、ＬＯＤの値に応じて、ＮＵＲＢＳモデルの階数を変更することである。
【０１４９】
すなわち、オブジェクトの投影サイズが小さい場合（ＬＯＤが大きい場合）、遊戯者が複雑な曲面形状を視覚的に判別しにくい点に着目し、ＮＵＲＢＳモデルの階数を下げることによってＮＵＲＢＳモデルを単純化し、ＮＵＲＢＳモデルデータ量を少なくする。
【０１５０】
図１５は、ＮＵＲＢＳモデルを単純化する第一の方法を説明するための図である。図１５に基づき制御点Ｑ0、Ｑ1、Ｑ2、Ｑ3、ウエイトω0、ω1、ω2、ω3、ノット列［t0、t1、t2、t3、t4、t5、t6、t7］から構成されるＮＵＲＢＳ曲線の階数を下げる例について説明する。
【０１５１】
図１５(a)は、４階のＮＵＲＢＳ曲線を示す図であって、１ヶの三次曲線Ｌ１が示される。この三次曲線Ｌ１は、４つすべての制御点Ｑ0、Ｑ1、Ｑ2、Ｑ3の影響を受ける曲線セグメントであって、ノット列の要素t3-t4間が、この曲線セグメントＬ１の有効な範囲である。
【０１５２】
図１５（b)は、図１５(a)と比較して、階数を１つ下げた３階のＮＵＲＢＳ曲線を示す図であって、２ヶの二次曲線Ｌ２、Ｌ３が示される。二次曲線Ｌ２は、制御点Ｑ0、Ｑ1、Ｑ2の影響を受ける曲線セグメントであって、二次曲線Ｌ３は、制御点Ｑ1、Ｑ2、Ｑ3の影響を受ける曲線セグメントである。また、ノット列の要素t2-t3間が、曲線セグメントＬ２の有効な範囲であり、ノットt3-t4間が、曲線セグメントＬ３の有効な範囲である。
【０１５３】
図１５(c)は、図１５(b)と比較して、さらに階数を１つ下げた２階のＮＵＲＢＳ曲線を示す図であって、３ヶの一次曲線Ｌ４、Ｌ５、Ｌ６が示される。一次曲線Ｌ４は、Ｑ0、Ｑ1の影響を受ける曲線セグメントであって、一次曲線Ｌ５は、制御点Ｑ1、Ｑ2の影響を受ける曲線セグメントであって、一次曲線Ｌ６は、制御点Ｑ2、Ｑ3の影響を受ける曲線セグメントである。
【０１５４】
また、ノットt1-t2間が、曲線セグメントＬ４の有効な範囲であり、ノットt2-t3間が、曲線セグメントＬ５の有効な範囲であり、ノットt3-t4間が、曲線セグメントＬ６の有効な範囲である。
【０１５５】
このように、制御点４つで構成される曲線セグメントは、階数が下がるにつれて、そのなめらかさが減少し、形状が単純化していく。
【０１５６】
図１６は、４×４階のＮＵＲＢＳ曲面の階数を下げる例を示す図である。図１６(a)には、４×４階のＮＵＲＢＳ曲面が４パッチ示される。１つの曲面パッチは、４つの曲線セグメントで構成される。なお、図１６(a)において、ｕノット列［ｕ0、ｕ1、ｕ2、ｕ3、ｕ4、ｕ5、ｕ6、ｕ7、ｕ8］のうち、要素ｕ3、ｕ4、ｕ5間が、曲線セグメントの有効な範囲であって、ｖノット列［ｖ0、ｖ1、ｖ2、ｖ3、ｖ4、ｖ5、ｖ6、ｖ7、ｖ8］のうち、要素ｖ3、ｖ4、ｖ5間が、曲線セグメントの有効な範囲である。
【０１５７】
次に、図１６(b)には、図１６(a)と比較して、階数を１つ下げた３×３階のＮＵＲＢＳ曲面が９パッチ示される。この場合の１つの曲面パッチも、４つの曲線セグメントで構成されるが、各曲線セグメントは、３つの制御点から影響を受ける３階曲線（２次曲線）である。
【０１５８】
そして、図１６(b)において曲線セグメントが有効な範囲は、ｕノット列［ｕ0、ｕ1、ｕ2、ｕ3、ｕ4、ｕ5、ｕ6、ｕ7］のうちの要素ｕ2、ｕ3、ｕ4、ｕ5間、ｖノット列［ｖ0、ｖ1、ｖ2、ｖ3、ｖ4、ｖ5、ｖ6、ｖ7］のうちの要素ｖ2、ｖ3、ｖ4、ｖ5間である。
【０１５９】
さらに、図１６(c)には、図１６(b)と比較して、さらに階数を一つ下げた２×２階のＮＵＲＢＳ曲面が１６パッチ示される。この場合の１つの曲面パッチも、上記同様に４つの曲線セグメントで構成されるが、各曲線セグメントは、２つの制御点から影響を受ける２階曲線（１次曲線）である。
【０１６０】
そして、図１６(c)において曲線セグメントが有効な範囲は、ｕノット列［ｕ0、ｕ1、ｕ2、ｕ3、ｕ4、ｕ5、ｕ6］のうちの要素ｕ1、ｕ2、ｕ3、ｕ4、ｕ5間、ｖノット列［ｖ0、ｖ1、ｖ2、ｖ3、ｖ4、ｖ5、ｖ6］のうちの要素ｖ1、ｖ2、ｖ3、ｖ4、ｖ5間である。
【０１６１】
そして、上述の図１６を一般化し、Ｋ×Ｌ階の曲面パッチを（Ｋ−１）×（Ｌ―１）階の曲面パッチにする場合の、ＮＵＲＢＳモデルのパラメータの数を考えてみる。まず、制御点、ウエイトの数は変化しない。ノット列の要素の数は、ｕノット列、ｖノット列それぞれ−１となる。上述したように、ノットの数は、制御点の数＋階数なので、ｕノット列、ｖノット列それぞれ最後の要素が必要なくなる。
【０１６２】
一方、パッチの数は、階数を−１とすることによって逆に、ｕノット列、ｖノット列に対してそれぞれ＋１される。即ち、階数−１する前のパッチの数がｍ×ｎヶであれば、階数−１した後のパッチの数は、（ｍ＋１）×（ｎ＋１）ヶになる。
【０１６３】
このように、階数が下がると、パッチの数は増加するが、ノット列の要素の数が減少するので、上記のＮＵＲＢＳ曲面上の点Ｐ(ｕ,ｖ)を求める式（３）、及びブレンディング関数値を求める式（４）、（５）を使って、ＮＵＲＢＳ曲面上の点Ｐ(ｕ,ｖ)を求める際の演算量が減少する。
【０１６４】
例えば、階数Ｋ、Ｌ両方がそれぞれ４→３→２と小さくなると、上記式（３）における  積の項（ＭＮωＱ及び、ＭＮω）は、
４2（＝１６）→３2（＝９）→２2（＝４）と減少する。
【０１６５】
また、ブレンディング関数Ｍ、Ｎを求める演算量についても、図１７に示すように、階数が下がることによって少なくなる。図１７は、式（３）で点Ｐの計算に必要なブレンディング関数Ｍを示した図である。
【０１６６】
具体的には、図１７(a)は、４階曲面パッチ上の点Ｐの計算に必要なブレンディング関数Ｍであり、全体で引き算２回及び割り算１回の項が１２ヶ、掛け算の項が１０ヶ、足し算の項が３ヶある。また、図１７(b)は、３階曲面パッチ上の点Ｐの計算に必要なブレンディング関数Ｍであって、全体で、引き算２回及び割り算１回の項が６ヶ、掛け算の項が４ヶ、足し算の項が１ヶある。さらに、図１７(c)は、２階曲面パッチ上の点Ｐの計算に必要なブレンディング関数Ｍであって、引き算２回及び割り算１回の項が２ヶあるだけで、掛け算の項はゼロ、足し算の項もゼロである。なお、ブレンディング関数Ｎについても同様である。
【０１６７】
このように、階数が下がることによって、ブレンディング関数Ｍ、Ｎを求めるための演算量が減少する。そして、上述したように、ブレンディング関数Ｍ、Ｎを使った式（３）の演算量も減少する。
【０１６８】
このブレンディング関数Ｍ、Ｎを求める式（４）、（５）は、ＮＵＲＢＳモデルをポリゴンに変換する際に、Ｂスプライン演算器２０３によって演算される。また、点Ｐを求める式（３）は、ポリゴン生成器２０２で演算される。
【０１６９】
したがって、このポリゴン生成器２０２及びＢスプライン演算器２０３の演算処理量を軽減することができ、ＮＵＲＢＳモデルからポリゴンへ変換するときの速度を向上させることができる。
【０１７０】
また、複雑なＮＵＲＢＳモデル（階数が高いほど、また、制御点の数が多いほど、ＮＵＲＢＳモデルの形状は複雑である）ほど、その形状をポリゴンで再現するためには、多数のポリゴンに変換する必要がある。従って、多くのＮＵＲＢＳモデル上の点Ｐが必要となるため、本発明により、階数を下げて各点Ｐの演算量を少なくすることは、ポリゴン生成器２０２及びＢスプライン演算器２０３の負荷を軽減するのに有効である。
【０１７１】
このように、本発明の方法により、ＬＯＤに応じて、曲面パッチの形状は単純化される。このとき、画面上でのオブジェクトの大きさが小さければ、階数が高いときの複雑な曲面形状と、階数を下げたときの単純な形状を判別することは難しい。
【０１７２】
したがって、画面上でのオブジェクトが小さくなるにつれて、即ち、ＬＯＤが大きくなるにつれて、ＮＵＲＢＳモデルの階数を下げることで、画面の表示を実質的に変更することなく、ＮＵＲＢＳモデルからポリゴンへの変換の際の演算量を減らすことができる。
【０１７３】
図１８は、単純化前のＮＵＲＢＳモデルの階数が４階であるときのＬＯＤと階数との対応テーブルの例を示す図である。図１８によれば、ＬＯＤ１又はＬＯＤ２のときは、ＮＵＲＢＳモデルの階数は変化しないが、ＬＯＤ３で階数が１つ下がり、ＬＯＤ４でさらに１つ下がるように設定されている。
【０１７４】
これにより、画面上でのオブジェクトのサイズが小さくなる場合は、ＮＵＲＢＳモデル上の点Ｐを求める演算量を少なくすることができる。
【０１７５】
図１９は、ＬＯＤによってＮＵＲＢＳモデルの形状を単純化する上記方法に対して第ニの方法を説明するための図である。上記方法では、ＮＵＲＢＳモデルの形状を単純化するためにＮＵＲＢＳモデルを定義する階数が下げられる。
【０１７６】
このとき、階数を下げる都度、ノット列の有効範囲が広がっていく（そして、曲線セグメントの数、曲面パッチの数が増えていく）。そのため、ノット列の要素の値に基づいて、曲面上のサンプリング点を求め、ポリゴンの頂点座標とする場合、求める頂点座標の数が増え、その分だけ演算量が増加してしまう場合が考えられる。（その代わり、階数を下げても制御点の変更を考慮しなくてよい。）  そこで、第二の方法として、階数を下げてもノット列の有効範囲が変わらないように、階数を１つ下げた時に、最初の制御点を無効とし、さらに、最初の要素を削除する。このとき、先の方法で述べられたように、最後の要素も削除される。
【０１７７】
図１９では、図１５と同様に、制御点Ｑ0、Ｑ1、Ｑ2、Ｑ3、ウエイトω0、ω1、ω2、ω3、ノット列［t0、t1、t2、t3、t4、t5、t6、t7］から構成されるＮＵＲＢＳ曲線の階数を一段階ずつ下げる例について説明する。
【０１７８】
図１９(a)は、図１５(a)と同様の図であって、４階のＮＵＲＢＳ曲線を示す図であって、１ヶの三次曲線が示される。この三次曲線は、４つすべての制御点Ｑ0、Ｑ1、Ｑ2、Ｑ3の影響を受ける曲線セグメントであって、ノット列の要素t3-t4間が、この曲線セグメントの有効な範囲である。
【０１７９】
図１９(b)には、図１５(b)と同様に、階数を１つ下げた３階のＮＵＲＢＳ曲線が示されるが、最初の制御点Ｑ0を無効とし、最初の要素ｔ0も削除される。従って、この場合に形成される曲線セグメントは、図示されるように、１ヶの二次曲線であって、曲線セグメントの数は増加しない。そして、ノット列の有効な範囲も変化しない。
【０１８０】
さらに、図１９(c)には、図１５(c)と比較して、さらに階数を１つ下げた２階のＮＵＲＢＳ曲線が示されるが、さらに、この場合の最初の制御点Ｑ1を無効とし、最初の要素ｔ1も削除される。
【０１８１】
したがって、この場合に形成される曲線セグメントは、図示されるように、１ヶの１次曲線であって、曲線セグメントの数は、１ヶのままである。また、ノット列の有効範囲も変化しない。
【０１８２】
上述した曲線セグメントを曲面パッチに拡張しても、上述と同様である。すなわち、階数を下げてもｕ方向及びｖ方向それぞれ端の一列分の制御点を無効とし、ｕ方向及びｖ方向それぞれの最初の要素を削除することで、曲面パッチの数は変化せず、ノット列の有効範囲も変化しない。
【０１８３】
これにより、曲面パッチの形状が、元の形状と比較して、しぼんだような形状となるが、画面上でのオブジェクトのサイズが小さい場合、その違いを視覚的に判別することは難しい。そして、階数を下げても、曲面パッチの数が増えないので、その曲面パッチ上の点Ｐを求める演算量を減少させることができる。
【０１８４】
この第二の方法を一般化すると、Ｋ×Ｌ階の曲面パッチを（Ｋ−１）×（Ｌ−１）階の曲面パッチにする場合のパラメータの数を考えると、制御点マトリクスにおけるｕ方向及びｖ方向のそれぞれ最初の一列分の制御点を無効とし、ノット列においては、最初と最後の要素が削除される。
【０１８５】
図２０は、上記ＮＵＲＢＳモデルを単純化する第二の方法におけるＬＯＤと階数との対応テーブルの例を示す図である。図２０に示されるように、ＬＯＤが大きくなるにつれて（画面上のオブジェクトのサイズが小さくなるにつれて）、階数は一段階ずつ下がり、そのとき、有効な制御点の数も１つずつ減少していく。また、ノット列における要素の数も、最初と最後の要素が削除されるので、２つずつ削除される。
【０１８６】
第二の方法においても、オブジェクトの投影サイズが小さい場合（ＬＯＤが大きい場合）、遊戯者は複雑な曲面形状を視覚的に判別しにくい点に着目する。
そして、第三の方法では、オブジェクトの投影サイズが小さい場合、ＮＵＲＢＳモデルの制御点を減らし、且つ階数を下げることによって、ＮＵＲＢＳモデルを単純化する。
【０１８７】
図２１は、４×４階のＮＵＲＢＳ曲面を３×３階のＮＵＲＢＳ曲面に単純化する例を示す図である。図２１(a)には、ｕ方向、ｖ方向に対して５×５＝２５ヶの制御点Ｑ00〜Ｑ44により構成される４×４階のＮＵＲＢＳ曲面が４パッチが示される。
【０１８８】
各制御点のウエイトをそれぞれω00〜ω44とする。また、ｕノット列は、［ｕ0、ｕ1、ｕ2、ｕ3、ｕ4、ｕ5、ｕ6、ｕ7、ｕ8］であり、その要素数は、制御点数（５）＋階数（４）により、９つである。また、ｖノット列は、［ｖ0、ｖ1、ｖ2、ｖ3、ｖ4、ｖ5、ｖ6、ｖ7、ｖ8］であり、その要素数は、ｕノット列同様に９つである。
【０１８９】
この４×４階の曲面パッチ４つを、できるだけ大きさの等しい３×３階の曲面パッチ１つに単純化する。そのために、制御点をｕ方向、ｖ方向それぞれ１つおきに削除する。
【０１９０】
これにより、４×４階の曲面パッチ４つは、図２１(b)に示されるように、ｕ方向、ｖ方向に対して３×３＝９ヶの制御点により構成される３×３階の曲面パッチ１つに単純化される。
【０１９１】
また、このとき、残った制御点のウエイトωは、削除前に周囲に存在した制御点の和をとって平均化した値を利用してもよいし、そのまま変更せずに利用してもよい。平均値を用いる方法は、削除された制御点のウエイトが大きかった場合であっても、曲面パッチは、削除される制御点のウエイトもある程度加味されて単純化される。従って、単純化前後の曲面パッチの形状が大きく変わってしまうことが防止されるので好ましい。
【０１９２】
この平均化する方法について、図２２を参照しながら以下に説明する。
【０１９３】
図２２(a)は、単純化前の制御点マトリクスを示し、図２２(b)は、単純化後の制御点マトリクスを示す図である。そして、図２２(b)に示されるように、例えば、マトリクスにおける四隅の端点の一つであって、単純化後に残った制御点Ｑ00のウエイトω00'には、単純化前の制御点Ｑ00自身のウエイトω00と、削除された周囲の制御点Ｑ01、Ｑ11、Ｑ10のウエイトω01、ω11、ω10との和（４つのウエイト）の平均値が用いられる。
【０１９４】
同様に、マトリクスにおける四隅以外の端点の一つであって、単純化後に残った制御点Ｑ20のウエイトω10'には、単純化前の制御点Ｑ20自身のウエイトω20と、削除された周囲の制御点Ｑ10、Ｑ11、Ｑ21、Ｑ31、Ｑ30のウエイトω10、ω11、ω21、ω31、ω30との和（６つのウエイト）の平均値が用いられる。
【０１９５】
さらに、マトリクスにおける端点以外の点であって、単純化後に残る制御点Ｑ22のウエイトω11'には、単純化前の制御点Ｑ22自身のウエイトω22と、削除された周囲のウエイトω11、ω12、ω13、ω23、ω33、ω32、ω31、ω21との和（９つのウエイト）の平均値が用いられる。
【０１９６】
また、制御点の数と階数を減らすと、ｕ方向、ｖ方向それぞれのノット列の要素数も減らさなけらばならない。具体的には、図２１(b)の曲面パッチのｕ、ｖノット列の要素数は、制御点数（３）＋階数（３）＝６つとなるので、単純化前の９つから３つ減らす必要がある。
【０１９７】
その際に、曲線セグメントの始点と終点に対応するノットの値が変わらないように、且つ曲線セグメントの数が半分になるようにする必要がある。元の曲線セグメントの数が奇数のときは、減少後の数を±１する。
【０１９８】
例えば、図２１のように、４階の曲面パッチ４つを３階の曲面パッチ１つに単純化する場合、４階の曲面パッチ４つのノット列［ｕ0、ｕ1、ｕ2、ｕ3、ｕ4、ｕ5、ｕ6、ｕ7、ｕ8］のうちの曲線セグメントが有効な範囲の要素ｕ3、ｕ4、ｕ5については、中央の要素ｕ4を削除し、曲線セグメントの始点と終点に対応する要素ｕ3及びｕ5は残す。
【０１９９】
そして、曲線セグメントが無い範囲の前後３つずつの要素ｕ0、ｕ1、ｕ2及びｕ6、ｕ7、ｕ8については、最初と最後の要素を残し中央の要素ｕ1、ｕ7を削除する。
【０２００】
したがって、ｕノット列［ｕ0、ｕ2、ｕ3、ｕ5、ｕ6、ｕ8］が３階の曲面パッチ１つのｕノット列［ｕ0'、ｕ1'、ｕ2'、ｕ3'、ｕ4'、ｕ5'］となる。
【０２０１】
また、例えば、制御点が７つ、階数が４階で、要素数が７＋４＝１１のｕノット列［ｕ0、ｕ1、ｕ2、ｕ3、ｕ4、ｕ5、ｕ6、ｕ7、ｕ8、ｕ9、ｕ10］を、制御点を１つおきに削除し４つとし、階数を３階に下げ、要素数が４＋３＝７のｕノット列［ｕ0'、ｕ1'、ｕ2'、ｕ3'、ｕ4'、ｕ5'、ｕ6'］とする場合は、まず、曲線セグメントが有効な範囲の要素ｕ3、ｕ4、ｕ5、ｕ6、ｕ7のうちの両端の要素ｕ3及びｕ7を残し、一つおきにノットを削除する。
【０２０２】
即ち、ノットｕ4、ｕ6を削除する。従って、要素ｕ5は残る。そして、曲線セグメントのない範囲の前後３つずつのノットｕ0、ｕ1、ｕ2及びｕ8、ｕ9、ｕ10については、最初と最後の要素ｕ0、ｕ2及びｕ8、ｕ10を残し、中央のノットｕ1、ｕ9を削除する。したがって、ｕノット列［ｕ0、ｕ2、ｕ3、ｕ5、ｕ7、ｕ8、ｕ10］がｕノット列［ｕ0'、ｕ1'、ｕ2'、ｕ3'、ｕ4'、ｕ5'、ｕ6'］となる。ｖノット列も同様に、［ｖ0、ｖ2、ｖ3、ｖ5、ｖ7、ｖ8、ｖ10］が［ｖ0'、ｖ1'、ｖ2'、ｖ3'、ｖ4'、ｖ5'、ｖ6'］となる。
【０２０３】
図２３は、３×３階のＮＵＲＢＳ曲面を２×２階のＮＵＲＢＳ曲面に単純化する例を示す図である。
【０２０４】
図２３(a)には、ｕ方向、ｖ方向に対して４×４＝１６ヶの制御点Ｑ00'〜Ｑ33'により構成される３×３階のＮＵＲＢＳ曲面が４パッチ示される。各制御点のウエイトをそれぞれω00'〜ω33'とする。また、ｕノット列は、上記［ｕ0'、ｕ1'、ｕ2'、ｕ3'、ｕ4'、ｕ5'、ｕ6'］＝［ｕ0、ｕ2、ｕ3、ｕ5、ｕ7、ｕ8、ｕ10］であり、その要素数は、制御点数（４）＋階数（３）により、７つである。
【０２０５】
また、ｖノット列は、上記［ｖ0'、ｖ1'、ｖ2'、ｖ3'、ｖ4'、ｖ5'、ｖ6'］＝［ｖ0、ｖ2、ｖ3、ｖ5、ｖ7、ｖ8、ｖ10］であり、その要素数は、ｕノット列同様に７つである。
【０２０６】
この３×３階の曲面パッチ４つを、できるだけ大きさの等しい２×２階の曲面パッチ１つに単純化する。そのために、制御点をｕ方向、ｖ方向それぞれ２つずつ削除する。
【０２０７】
このとき、上述の場合と同様に、１つおきに制御点を削除すると、制御点の数が偶数なので、端の制御点が削除されてしまい、単純化後の曲面パッチの大きさが変わってしまう。従って、この場合は、真ん中の制御点２つを削除する。即ち、これにより、３×３階の曲面パッチ４つは、図２３(b)に示されるように、ｕ方向、ｖ方向に対して２×２＝４ヶの制御点により構成される２×２階の曲面パッチ１つに単純化される。
【０２０８】
そして、この場合も、制御点の数と階数の減少により、ｕ方向、ｖ方向それぞれのノット列の要素数も減らさなけらばならない。具体的には、図２３(b)の曲面パッチのｕ、ｖノット列の要素数は、制御点数（２）＋階数（２）＝４つとなるので、３つ減らす必要がある。
【０２０９】
削除するノットの選択方法は、上述と同じである。即ち、曲線セグメントの有効な範囲の要素ｕ2'、ｕ3'、ｕ4'（＝ｕ3、ｕ5、ｕ7）については、両端の要素ｕ2'、ｕ4'（＝ｕ3、ｕ7）を残し、真ん中の要素ｕ3'（＝ｕ5）を削除する。そして、その前後の曲線セグメントがない範囲の要素ｕ0'、ｕ1'（＝ｕ0、ｕ2）及びｕ5'、ｕ6'（＝ｕ8、ｕ10）については、端の要素ｕ0'（＝ｕ0）及びｕ6'（＝ｕ10）を残し、それ以外の要素ｕ1'（＝ｕ2）及びｕ5'（＝ｕ8）を削除する。
従って、ｕノット列［ｕ0'、ｕ2'、ｕ4'、ｕ6'］＝［ｕ0、ｕ3、ｕ7、ｕ10］が２階の曲面パッチ１つのｕノット列［ｕ0''、ｕ1''、ｕ2''、ｕ3''］となる。
また、ｖノット列も同様に［ｖ0'、ｖ2'、ｖ4'、ｖ6'］＝［ｖ0、ｖ3、ｖ7、ｖ10］が［ｖ0''、ｖ1''、ｖ2''、ｖ3''］となる。
【０２１０】
このように、制御点を減らし、且つ階数を下げると、ノットの数が減少するので、上記した式(３)、(４)、(５)を使って、ＮＵＲＢＳ曲面上の点Ｐ(ｕ,ｖ)を求める際の演算量が減少する。その減少量は、上述の図１７での説明における減少量と同じである。
【０２１１】
ただし、この第三の方法の場合は、曲面パッチの数も減少するので、求めるべき点Ｐ(ｕ,ｖ)の数も減少するので、演算量をさらに大幅に減少させることができる。
【０２１２】
図２４は、単純化前のＮＵＲＢＳモデルを定義する制御点の数が７×７つであって、階数が４階であるときの、ＬＯＤに対応する制御点の数と階数の対応テーブルの例を示す図である。図２４によれば、ＬＯＤが１又は２のときは、ＮＵＲＢＳモデルの制御点の数及び階数は変化しないが、ＬＯＤ３で、制御点の数は、４×４に減り、階数も一つ下がり、３階となる。
【０２１３】
さらに、ＬＯＤ４で、制御点の数は、２×２に減り、階数もさらに一つ下がり２階となる。これにより、画面上でのオブジェクトのサイズが小さくなる場合は、曲面パッチの数が減り、且つ各曲面パッチ上の点Ｐを求めるための演算量も減る。従って、ＮＵＲＢＳモデルからポリゴンへの変換処理量を大幅に減らすことができ、処理速度の向上につながる。
【０２１４】
また、曲面パッチの形状も減り、且つ単純化するので、変換されるポリゴンの数も減少し、ポリゴンデータの量も減少する。
【０２１５】
そして、上述の第三の単純化方法を一般化し、Ｋ×Ｌ階の曲面パッチ４つを、（Ｋ−１）×（Ｌ―１）階の曲面パッチ１つにする場合の、ＮＵＲＢＳモデルのパラメータの数を考えてみる。
【０２１６】
このとき、有効な制御点の数は、（Ｋ＋１）×（Ｌ＋１）ヶから（Ｋ−１）×（Ｌ−１）ヶに減少する。このように、ｕ方向及びｖ方向において、それぞれ２つずつ制御点の数を減らす場合において、（Ｋ＋１）又は（Ｌ＋１）が奇数の場合、ｕ方向及びｖ方向に並んでいる制御点のうち、中央の制御点を囲む２行２列を無効とする。また、（Ｋ＋１）又は（Ｌ＋１）が偶数の場合、ｕ方向及びｖ方向に並んでいる制御点のうち、中央の制御点２行２列を無効とする。
【０２１７】
そして、制御点が２点減り、階数が１つ下がるので、ノット列の要素の数は、ｕノット列、ｖノット列それぞれ−３となる。まず、ｕ方向及びｖ方向それぞれの曲線セグメントの数が１／２になるようにするため、曲線セグメントの有効な範囲では、端の要素を残し、一つおきに要素を削除する。そして、曲線セグメントの有効な範囲の前後にある曲線セグメントが有効でない範囲では、端の要素を残し、ｕ方向及びｖ方向それぞれ１つずつ要素を削除する。
【０２１８】
図２５は、図２４のテーブルに対応するＮＵＲＢＳモデルの形状及び制御点マトリクスの状態を模式的に表した図である。図２５(a)は、ＬＯＤ１又はＬＯＤ２に対する単純化前のＮＵＲＢＳモデルの形状と制御点マトリクスを示す図である。
【０２１９】
このとき、ＮＵＲＢＳモデルは、４階のＮＵＲＢＳ曲面１６ヶで構成される。そして、制御点マトリクスにおいては、制御点（●）は、ｕ方向及びｖ方向それぞれ７ヶずつであり、ｕノット列及びｖノット列の各要素（◆）の数は、それぞれ１１ヶである。
【０２２０】
図２５(b)は、ＬＯＤ３に対応するＮＵＲＢＳモデルの形状と制御点マトリクスを示す図である。ＮＵＲＢＳモデルは、３階のＮＵＲＢＳ曲面４ヶで構成される。そして、制御点マトリクスにおいて、制御点は、端の制御点を残して、１つおきに無効とされる。また、要素は、上述したように、曲線セグメントが有効な範囲及び無効な範囲それぞれにおいて、端の要素を残して、１つおきに無効とされる。
【０２２１】
即ち、図２５(b)の○印で囲まれた制御点（ｕ方向及びｖ方向それぞれ４ヶずつ）及び要素（ｕ方向及びＶ方向それぞれ７ヶずつ）が有効となる。
【０２２２】
図２５(c)は、ＬＯＤ４に対応するＮＵＲＢＳモデルの形状と制御点マトリクスを示す図である。ＮＵＲＢＳモデルは、２階のＮＵＲＢＳ曲面１ヶで構成される。そして、制御点マトリクスにおいては、図２５(b)の制御点マトリクスに対して、端の制御点を残して、さらに、真ん中２行２列の制御点を無効とされる。そして、要素も、曲線セグメントが有効な範囲及び無効な範囲それぞれにおいて、端の要素を残して、さらに１つおきに無効とされる。即ち、図２５(c)の○印で囲まれた制御点（ｕ方向及びｖ方向それぞれ２ヶずつ）及び要素（ｕ方向及びｖ方向それぞれ４ヶずつ）が有効となる。
【０２２３】
上記した第一,第二、第三のＮＵＲＢＳ曲面の単純化方法は、図８に示した画像表示装置において実現可能である。
【０２２４】
図８において、上記のＮＵＲＢＳ曲面を単純化する第一,第二、第三の方法の実行において、サブＣＰＵ２１０は、上記において決定されたＮＵＲＢＳモデルのＬＯＤに基づいて、ＮＵＲＢＳモデルの階数を下げる、又は制御点を減らし、且つ階数を下げ、ＮＵＲＢＳモデルのデータを図１８、図２０或いは図２４のテーブルデータに基づいて単純化する。
【０２２５】
このとき、図１８、図２０或いは図２４のテーブルデータは、メインＣＰＵ１００から送られる。
【０２２６】
このように、制御点の数及び階数は、メインＣＰＵ１００から送られてくるテーブルデータによって決定されるので、ユーザは、このデータに含まれる値を、ポリゴン描画プロセッサ３００に対して過負荷とならないように、プログラム作成段階において、設定することができる。
【０２２７】
次に、本発明の実施例として、ＮＵＲＢＳモデルを構成する制御点のうち、不要な制御点を除去する方法について説明する。具体的には、ＮＵＲＢＳモデルの制御点の座標が視点座標に変換された段階で、ＮＵＲＢＳモデルの表裏判定、又はスクリーン内外判定を行い、スクリーンに表示されない曲面パッチにのみ関わる不要な制御点をあらかじめ除去する。これにより、ＮＵＲＢＳモデルをポリゴンに変換する際の変換処理量を軽減する。
【０２２８】
また、この実施の形態における制御点の除去処理は、図１のモデルビュー変換器２０１によって実行される。
【０２２９】
まず、ＮＵＲＢＳモデルの表裏判定に基づいて、不要な制御点を除去する方法について説明する。図２６（ａ）は、制御点８×７ヶからなる４×４階の球体のＮＵＲＢＳモデルを示す図である。なお、制御点ＱtとＱbは、８つの制御点が重なっている制御点として扱われる。このＮＵＲＢＳモデルが画面（スクリーン）に図２６（ｂ）のように表示されるものとする。
【０２３０】
また、図２７は、このＮＵＲＢＳモデルを模式的に展開した図であって、４つの制御点で囲まれた１つの領域が、１つの曲面パッチを表す。また、斜線が施された曲面パッチは、視線方向に対して表向きであって、画面に表示される領域を有する曲面パッチであり、斜線が施されていない曲面パッチは、視線方向に対して裏向きであって、画面に表示されない曲面パッチである。
【０２３１】
例えば、図２７における曲面パッチＰ１及びＰ２は、図２６（ｂ）に示されるように表示される。図２６（ｂ）から明らかなように、曲面パッチＰ１では、その全ての領域は表側にあり、曲面パッチＰ１全てがスクリーンに表示されるが、曲面パッチＰ２では、その一部の領域は表向きであるが、残りの領域は裏向きにあり、表向きの領域だけがスクリーンに表示される。
【０２３２】
さらに、図２７における曲面パッチＰ３は、全ての領域が裏向きであるため、画面に表示されない。
【０２３３】
このような表示されない曲面パッチ（全ての領域が裏向きである曲面パッチ）はポリゴンに変換する必要はない。従って、この表示されない曲面パッチにのみに関わる制御点を除去することによって、ポリゴンに変換する曲面パッチの数が減り、ＮＵＲＢＳモデルからポリゴンへの変換処理量を低減できる。
【０２３４】
そして、曲面パッチの少なくとも一部の領域が視線方向に対して表向きであるか否かは、以下に説明する曲面パッチの表裏判定方法によって判定される。
【０２３５】
図２８は、上記曲面パッチの表裏判定方法の原理を説明するための図である。図２８において、視点座標系における視点座標Ｏから各制御点に延びる視線ベクトルＡと、ＮＵＲＢＳモデルを構成する各制御点の法線ベクトルＢとのそれぞれの内積から、各制御点の法線ベクトルＢが視点座標Ｏ側を向いているかを判定する。以下、各制御点の法線ベクトルＢの視点座標Ｏ側への向きを表向き、視点座標Ｏ側と反対側への向きを裏向きと呼ぶ。
【０２３６】
視線ベクトルＡの成分を（ｘ1、ｙ1、ｚ1）、各制御点の法線ベクトルＢの成分を（ｘ2、ｙ2、ｚ2）としたときの内積Ａ・Ｂは、
Ａ・Ｂ＝ｘ1ｘ2＋ｙ1ｙ2＋ｚ1ｚ2＝｜Ａ｜・｜Ｂ｜ｃｏｓθ
によって求められる。
【０２３７】
このように、内積Ａ・Ｂを求めることにより、視線ベクトルＡと法線ベクトルＢの角度（ｃｏｓθ）が求められるので、法線ベクトルＢの向きを判定することができる。すなわち、視線ベクトルＡに対する法線ベクトルＢの角度θが９０°以上２７０°以下の間（ｃｏｓθが０又はマイナス値の間）は、法線ベクトルＢは表向きと判定され、０°以上９０°未満、及び２７０°より大きく３６０°（０°）以下の間（ｃｏｓθがプラス値の間）は、法線ベクトルＢは裏向きと判定される。従って、図２８（ａ）に示される法線ベクトルＢは表向き、図２８（ｂ）に示される法線ベクトルＢは裏向きである。
【０２３８】
図２９は、各制御点の法線ベクトルの向きの表裏分布を示す図である。図２９において、白丸で描かれた制御点の法線ベクトルは、表向きと判定された制御点であって、黒丸で描かれた制御点の法線ベクトルは、裏向きと判定された制御点である。そして、４×４階の各曲面パッチに関わる１６ヶの制御点のうち、表向きの制御点の数に応じて、曲面パッチの表裏判定が行われる。
【０２３９】
図３０は、表裏判定された曲面パッチを示す図である。図３０において、各曲面パッチに関わる１６ヶの制御点のうち、表向きの制御点の数が、所定のしきい値（例えば６ヶ）以上ある曲面パッチは、スクリーンの表側と判定され、表向きの制御点の数がしきい値未満の曲面パッチは、スクリーンの裏側と判定される。
【０２４０】
例えば、曲面パッチＰ１に関わる４×４＝１６ヶの制御点（破線Ｈ１内に含まれる制御点）のうち、表向きの制御点は１５ヶであり、曲面パッチＰ１は表向きと判定される。また、曲面パッチＰ２に関わる４×４＝１６ヶの制御点（破線Ｈ２内に含まれる制御点）のうち、表向きの制御点は１０ヶであり、曲面パッチＰ２も表向きと判定される。一方、曲面パッチＰ３に関わる１６ヶの制御点（破線Ｈ３に含まれる制御点）のうち、表向きの制御点は５ヶであるので、曲面パッチＰ３は裏側と判定される。
【０２４１】
このように、全ての曲面パッチに対して表裏判定を行った結果、表側と判定された曲面パッチのいずれにも関わらない制御点（図中、二重丸で囲まれた制御点）が除去される。
【０２４２】
なお、上記所定のしきい値を大きくするほど、表側と判定される曲面パッチの数が減り、しきい値を小さくするほど、表側と判定される曲面パッチの数が増える。そして、少なくとも画面に表示される曲面パッチ（図２７参照）全てが表側の曲面パッチと判定されるように、しきい値を設定する必要がある。
【０２４３】
ただし、ＮＵＲＢＳモデルの両面表示、トリミング、半透明などの要因により、裏側の曲面パッチも表示される可能性がある場合は、その曲面パッチに関わる制御点は除去されない。
【０２４４】
さらに、上述において、視線ベクトルＡは、各制御点ごとに与えられたが、曲面パッチごとに与えられてよい。即ち、ある曲面パッチに関わる１６ヶの制御点に対して同じ視線ベクトルが与えられる。また、複数の曲面パッチにより構成されるＮＵＲＢＳモデルごと、さらには、少なくとも１つのＮＵＲＢＳモデルが表示される画面ごとに与えられてもよい。
【０２４５】
当然に、各制御点ごとに与えられた視線ベクトルＡにより求められた内積が最も正確であるので、制御点ごとの視線ベクトルＡを用いることにより、最も精度の高い曲面パッチの表裏判定が可能となる。
【０２４６】
次に、ＮＵＲＢＳモデルの画面内外判定に基づいて、不要な制御点を除去する方法について説明する。図３１（ａ）は、図２６（ａ）と同様の制御点８×７ヶからなる４×４階の球体のＮＵＲＢＳモデルを示す図である。このＮＵＲＢＳモデルが画面（スクリーン）に図３１（ｂ）のように表示されるものとする。
【０２４７】
また、図３２は、このＮＵＲＢＳモデルを模式的に展開した図である。例えば、図３２における曲面パッチＰ４及びＰ５は、図３１（ｂ）に示されるように表示される。図３１（ｂ）から明らかなように、曲面パッチＰ４は、画面内にあるが、曲面パッチＰ５は、画面外にあるので、画面に表示されない。
【０２４８】
このような画面外の曲面パッチ（全ての領域が画面の外側にある曲面パッチ）Ｐ５はポリゴンに変換する必要はない。従って、画面外の曲面パッチにのみ関わる制御点を除去することによって、ポリゴンに変換する曲面パッチの数が減り、ＮＵＲＢＳモデルからポリゴンへの変換処理量を低減できる。
【０２４９】
そして、曲面パッチが画面外にあるか否かは、以下に説明する曲面パッチの画面内外判定方法によって判定される。
まず、図３３に示されるように、隣り合う制御点同士及び対角関係にある制御点同士が、制御点を頂点とする三角形を形成するように線分で結ばれる。そして、各線分と画面の各辺との位置関係に基づいて、曲面パッチの画面内外判定が行われる。
【０２５０】
そして、内外判定の実施例として、その画面内外判定に必要な次のテーブルが用意される。即ち、ある１つの曲面パッチＰに関わる１６ヶの制御点（図３３において、破線Ｈ内に含まれる制御点）によって作られる線分それぞれに対応するフラグを有するパッチテーブルが設定される。
【０２５１】
さらに、ある１つのＮＵＲＢＳモデルに関わる全ての制御点それぞれに対応するフラグを有する制御点テーブルが設定される。
【０２５２】
図３４は、曲面パッチの画面内外判定方法を説明するための図である。図３４（ａ）は、曲面パッチＰに関わる制御点全てが、画面の外側にある場合を説明する図である。
【０２５３】
まず、曲面パッチＰに関わる制御点によって作られる線分のうちの１本が選択される。そして、その線分の両端の制御点の座標と、画面の４つの辺のうちの１辺とを比較し、線分の両端の制御点の座標が、画面の１辺より外側である場合、曲面パッチＰのパッチテーブルにおけるその線分のフラグが立つ（フラグの値は「１」となる）。
【０２５４】
また、一方の制御点又は両方の制御点が、スクリーンの１辺より内側である場合は、その線分のフラグは立たない（フラグの値は初期値「０（ゼロ）」のままである）。
【０２５５】
さらに詳しく説明すると、視点座標系における画面の４つの辺Ｋ１、Ｋ２、Ｋ３、Ｋ４のうち、縦方向に延びる２本の辺（縦辺）Ｋ１、Ｋ３は、視点座標の平面ＸＹ座標におけるＹ方向に延びる辺であり、横方向に延びる２本の辺（横辺）Ｋ２、Ｋ４は、上記平面ＸＹ座標におけるＸ方向に延びる辺と想定する。
【０２５６】
例えば、縦辺Ｋ３と線分とを比較する場合は、線分の両端の制御点のＸ座標と、その縦辺Ｋ３のＸ座標とを比較し、制御点のＸ座標が、縦辺Ｋ３のＸ座標の値以下である場合は、その制御点は画面の内側であると判定され、縦辺Ｋ３のＸ座標の値より大きい場合は、画面の外側であると判定される。反対に、縦辺Ｋ１と線分とを比較する場合は、制御点のＸ座標が、縦辺Ｋ１のＸ座標の値より小さい場合は、その制御点は画面の外側であると判定され、縦辺Ｋ１のＸ座標の値以上の場合は、画面の内側であると判定される。
【０２５７】
一方、横辺Ｋ２と線分とを比較する場合は、線分の両端の制御点のＹ座標と、その横辺Ｋ２のＹ座標とが比較される。そして、制御点のＹ座標が、横辺Ｋ２のＹ座標の値以上である場合は、その制御点は画面の内側であると判定され、横辺Ｋ２のＹ座標の値より小さい場合は、画面の外側であると判定される。反対に、横辺Ｋ４と線分とを比較する場合は、制御点のＹ座標が、横辺Ｋ４のＹ座標の値より大きい場合は、その制御点は画面の外側であると判定され、横辺Ｋ４のＹ座標の値以下の場合は、画面の内側であると判定される。
【０２５８】
このように、画面のある一辺に対して、線分の両端のそれぞれの座標が外側であるか、内側であるかの比較を行い、線分の両方の座標が外側である場合、その線分のフラグが立つ。
【０２５９】
さらに、フラグが立っていない線分について、上記比較を画面の他の一辺に対して順次行っていく。そして、ある曲面パッチに関わる線分と画面の全ての一辺との比較が終了したときに、その曲面パッチのパッチテーブルのフラグが全て立っていた場合、制御点テーブルにおけるこの曲面パッチに関わる全ての制御点のフラグの値は、「０（ゼロ）」のままとする。
【０２６０】
即ち、この場合は、曲面パッチＰに関わる線分全てが、画面の４つの辺のいずれか１辺との比較において、画面の外側と判定された場合である。
【０２６１】
一方、図３４（ｂ）は、曲面パッチに関わる制御点が画面の内側にある場合を示す図である。この場合、パッチテーブルにおいて、画面の内側にある制御点Ｑiを端点とする２本の線分Ｌi、Ｌjに対応するフラグが立たない。このような場合は、制御点テーブルにおけるこの曲面パッチに関わる全ての制御点のフラグの値が立てられる（フラグを「１」にする）。フラグが立てられた制御点は除去されない。
【０２６２】
こうして、ＮＵＲＢＳモデルを構成する複数の曲面パッチについて、上記線分の判定が終了したときに、制御点テーブルにおいて、最終的にフラグが立たなかった制御点が除去される。
【０２６３】
なお、対角関係にある制御点を結ぶ線分を設けるのは、図３５に示すように、１つの曲面パッチが画面を覆うような場合に、曲面パッチが画面外と判定されることを防止するためである。即ち、図３５のような場合、制御点を格子状に結んだ線分Ｌmだけで上述の画面内外判定を行うと、この曲面パッチは画面内に存在するにもかかわらず、画面外と判定されてしまい、この曲面パッチに関わる制御点が除去されるおそれがある。
【０２６４】
そして、対角関係にある制御点間を結ぶ線分Ｌnと画面の各辺とを比較すると、この線分のいずれか一方の制御点は画面の内側であると判定されるので、このような不都合を回避することができる。
【０２６５】
このようにして、ポリゴンに変換される前のＮＵＲＢＳモデルの段階で、画面表示されない曲面パッチにのみ関わる制御点をあらかじめ除去することにより、ＮＵＲＢＳモデルからポリゴンへの変換処理量を低減することができる。
【０２６６】
さらに、本発明の実施例として、制御点を操作して曲面パッチを変形する際の法線ベクトルの計算方法について説明する。この法線ベクトルの計算処理は、図１のモデルビュー変換器２０１によって実行される。
【０２６７】
図３６（ａ）は、図２６（ａ）、図３１（ａ）と同様の制御点８×７ヶからなる４×４階の球体のＮＵＲＢＳモデルを示す図である。
【０２６８】
このＮＵＲＢＳモデルを図３６（ｂ）に示すように、右端の制御点Ｑを右方向に移動して、ＮＵＲＢＳモデルが右に引っ張られた形状に変形した場合について説明する。この場合、移動した制御点に関わる曲面パッチは、ＮＵＲＢＳモデルの右半分を構成する曲面パッチ１６ヶである。さらに、図３７は、このＮＵＲＢＳモデルを模式的に展開した図である。図３７によれば、移動する制御点Ｑに関わる曲面パッチ（即ち、ＮＵＲＢＳモデルの右半分を構成する曲面パッチ）に斜線が施されている。
【０２６９】
図３８は、かかる移動される制御点に基づく法線ベクトルの計算方法を説明するための図である。まず、図３８（ａ）に示されるように、制御点を格子状に接続する線分を生成する。そうすると、制御点Ｑを移動することによって、長さが変化する線分は、制御点Ｑとそれに隣接する４つの制御点との線分Ｌu、Ｌd、Ｌl及びＬrである。
【０２７０】
したがって、この４本の線分に基づいて法線ベクトルの計算が行われる制御点は、移動する制御点Ｑ、及びそれに隣接する４つの制御点Ｑu、Ｑd、Ｑl、Ｑrの計５つの制御点となる。
【０２７１】
移動する制御点Ｑの法線ベクトルを計算する場合、図３８（ｂ）に示されるように、その制御点Ｑを１つの頂点とする４つの四角形Ｄ１、Ｄ２、Ｄ３及びＤ４を想定する。そして、図３８（ｃ）に示されるように、それぞれの四角形を構成する線分のうち、移動する制御点Ｑから延びる２本のベクトルを想定する。
【０２７２】
具体的には、図３８（ｃ）において、制御点Ｑから制御点Ｑｕに延びる線分ＬuのベクトルをＶu（＝Ｑｕ−Ｑ）、制御点Ｑから制御点Ｑdに延びる線分ＬdのベクトルをＶd（＝Ｑd−Ｑ）、制御点Ｑから制御点Ｑrに延びる線分ＬrのベクトルをＶr（＝Ｑr−Ｑ）、制御点Ｑから制御点Ｑlに延びる線分ＬlのベクトルをＶl（＝Ｑl−Ｑ）と定義する。
【０２７３】
かかる定義により、四角形Ｄ１においては、ベクトルＶuとＶl、四角形Ｄ２においては、ベクトルＶuとＶr、四角形Ｄ３においては、ベクトルＶdとＶl、四角形Ｄ４においては、ベクトルＶdとＶrが、制御点Ｑから延びる２本の線分のベクトルである。
【０２７４】
即ち、この２本のベクトルは、各ベクトルと各ベクトルに対して制御点Ｑを中心とした所定の回転方向に隣り合うベクトルである。そして、次のように各四角形における２本のベクトルの外積（即ち、法線ベクトル）を計算し、さらに、それを正規化する。
【０２７５】
四角形Ｄ１における外積Ａ＝Ｖu×Ｖl、正規化ベクトルＡ’＝Ａ／｜Ａ｜
四角形Ｄ２における外積Ｂ＝Ｖr×Ｖu、正規化ベクトルＢ’＝Ｂ／｜Ｂ｜
四角形Ｄ３における外積Ｃ＝Ｖl×Ｖd、正規化ベクトルＣ’＝Ｃ／｜Ｃ｜
四角形Ｄ４における外積Ｄ＝Ｖd×Ｖr、正規化ベクトルＤ’＝Ｄ／｜Ｄ｜
が計算される。
【０２７６】
一般に、ベクトルＳ＝(Sx、Sy、Sz)、ベクトルＴ＝(Tx、Ty、Tz）における外積Ｓ×Ｔは、
Ｓ×Ｔ＝(SyTz−SzTy、SzTx−SxTz、SxTy−SyTx)
により表される。
【０２７７】
また、正規化ベクトルＳ’は、
Ｓ’＝Ｓ／｜Ｓ｜  （｜Ｓ｜＝√(Sx2+Sy2+Sz2)）
により表される。
【０２７８】
そして、正規化された４つの外積（法線ベクトル）Ａ’、Ｂ’、Ｃ’、Ｄ’を平均化し、さらに、その平均化された外積（法線ベクトル）を正規化することにより、移動した制御点Ｑに対する新しい法線ベクトルＶnew’が得られる。平均化された外積をＶnewとすると、
Ｖnew＝(Ａ’＋Ｂ’＋Ｃ’＋Ｄ’)／４
で表されるので、新しい法線ベクトルＶnew’は、
Ｖnew’＝Ｖnew／｜Ｖnew｜
となる。
【０２７９】
残りの４点についても、同様の計算により新しい法線ベクトルを求めることができる。例えば、制御点Ｑlの新しい法線ベクトルは、図３９に示すように、制御点Ｑlを頂点とする４つの四角形を想定し、上述と同様の計算を行うことにより求めることができる。
【０２８０】
また、図４０は、隣り合う複数の制御点を同時に移動する場合の例を示す図である。図４０においては、白丸で示された３つの制御点が同時に移動する。このような場合において、新しい法線ベクトルを計算する必要がある制御点は、移動する３つの制御点に加えて、それらに隣接する制御点（大きな黒丸で示された制御点）である。また、移動する制御点の座標について、法線ベクトルの計算に用いられる制御点の座標は、移動後の座標である。
【０２８１】
さらに、上記実施例では制御点Ｑを１つの頂点とする４つの四角形の外積を求め、平均化し、新しい法線ベクトルを計算したが、２つのみの外積を求め、平均化し、新しい法線ベクトルを計算してもよい。また、１つのみの四角形の外積を求めて新しい法線ベクトルとしてもよい。
【０２８２】
当然４つの四角形の外積を求め、平均化した新しい法線ベクトルが最も正確であるので、４つの四角形の外積を求め、平均化し、新しい法線ベクトルを計算することにより、最も精度の高い法線ベクトルの計算が可能となる。
【０２８３】
再計算された制御点の法線ベクトルは、あらかじめデータとして与えられていた法線ベクトルから置換されて使用される。そして、ＮＵＲＢＳモデル上のサンプリング点の法線ベクトルは、ＮＵＲＢＳモデルの計算式（上述の式（３））に従って、サンプリング点に関わる制御点の法線ベクトルを混ぜ合わせることによって求められる。
【０２８４】
即ち、本発明の方法によれば、ＮＵＲＢＳモデルが変形する場合も、サンプリング点の法線ベクトルの算出を、ＮＵＲＢＳモデルを変形しない場合と同様に、ＮＵＲＢＳモデルの計算式（式（３））に従って、高速に行うことができるようになる。
【０２８５】
従って、ＮＵＲＢＳモデルの変形の有無にかかわらず、ＮＵＲＢＳモデルの計算式（式（３））を使って、サンプリング点の法線ベクトルを求めることができる。
【０２８６】
なお、ＮＵＲＢＳモデルの計算式（式（３））を用いて、法線ベクトルを混ぜ合わせてサンプリング点の法線ベクトルを求める方法は、ＮＵＲＢＳモデルの曲面上のサンプリング点にて接平面を算出し、その垂線を法線ベクトルとする方法に対して演算量に関して優れている。なぜならば、接平面を算出する方法では、ＮＵＲＢＳモデルの変形の有無にかかわらず、全てのサンプリング点で複雑な計算を行って、接平面を算出しなければならないからである。
【０２８７】
また、制御点のウエイトを変更する場合、ＮＵＲＢＳモデル上のサンプリング点の計算式（式（３））に従って、制御点の法線ベクトルを混ぜ合わせる段階で、その変更が反映される。
【０２８８】
したがって、ＮＵＲＢＳモデル上のサンプリング点での法線ベクトルにおいても、ウエイトの変更は反映される。
【０２８９】
上記本発明の方法により、ポリゴンで構成されたオブジェクトを変形する場合と比較して、高速にオブジェクトを変形することができる。なぜならば、ポリゴンで構成されたオブジェクトを変形する場合は、オブジェクトを構成するポリゴン全ての頂点の法線ベクトルを再計算する必要がある。これに対し、本発明の方法によれば、ＮＵＲＢＳモデルでオブジェクトが構成されている段階で、オブジェクトの変形のために移動させた制御点とその周囲の制御点の法線ベクトルだけを再計算すればよいからである。
【０２９０】
ここまで、上記した実施例においては高速且つ奇麗に画像処理を行なうためにＮＵＲＢＳ曲面上の点を適切にサンプリングしてポリゴン・データを生成しているが、本発明では、更にＮＵＲＢＳ曲面上の点を高速かつ適切にサンプリングする方法も提案される。
【０２９１】
具体的には、本発明の特徴は、第１にＮＵＲＢＳオブジェクトのスクリーン投影サイズ等を概算して求めるＬＯＤ（Level  Of  Detail）の値によって、ＮＵＲＢＳオブジェクトを複数の曲面領域（リージョン）に分割する際の分割数を少なくすることである。
【０２９２】
これは、ＮＵＲＢＳオブジェクトのスクリーン投影サイズが小さいほど複雑な形状が視覚的に判別しにくいという点に着目したことによる。分割数が決まったら、ＮＵＲＢＳオブジェクトに対応するｕ，ｖノット列の全有効区間を分割する。この時、ｕ，ｖそれぞれ有効区間の数（ノットの数）が均等になることが望ましい。
【０２９３】
第２に、曲面リージョンの各（曲）辺に対応する制御点のグループを結んで得られるスクリーン上でのエリアから、曲面リージョンをポリゴンに分割する際の分割数を算出する。
【０２９４】
これは、制御点のグループを結んで得られるスクリーン上でのエリアが大きいほど曲面リージョンの辺が長く、あるいは曲率が大きくなっていると想定されるためである。
【０２９５】
曲面リージョンの辺のそれぞれにポリゴン分割数を設定することにより、１つのＮＵＲＢＳオブジェクトの中でも、きめ細かく、かつ無意味にポリゴン数を増やすことなくポリゴン分割を行うことができる。
【０２９６】
最後に、分割数が決まった後、各曲面リージョンを適切なｕ，ｖノット間隔で区切ってポリゴンに分割する。この時、ｕ，ｖノット間隔がそれぞれ均等になることが望ましい。また、一般にリージョンの各（曲）辺で分割数が異なるので、特定の規則に従ってリージョンの内部分割点を算出して調整する。
【０２９７】
ここで、ＮＵＲＢＳオブジェクトをポリゴンへ分割する例として、７ｘ７制御点、４ｘ４階のＮＵＲＢＳオブジェクトをポリゴンへ分割することを考える（制御点Ｑ00〜Ｑ66、ノット列 [ｕ0,…,ｕ10]、[ｖ0,…,ｖ10]）。
【０２９８】
まず、ＬＯＤの値による曲面リージョンへの分割数がｕ，ｖ方向とも２であると仮定する。その場合、ＮＵＲＢＳオブジェクトは図４１に示すようにｕ5，ｖ5の曲線で区切られ、４つのリージョン００〜１１に分割される（ｕ，ｖノット列の有効区間は、それぞれｕ3,…,ｕ7、ｖ3,…,ｖ7で、計１６区間ある。）。
【０２９９】
次に、曲面リージョンの各（曲）辺に影響を与える制御点がどこであるかを考える。４ｘ４階のＮＵＲＢＳオブジェクトでは、１つのｕ，ｖノット区間で区切られる部分に対して４ｘ４（＝１６）ケの制御点が影響を与えている。
例えば，図４１では、左下隅のｕ3〜ｕ4，ｖ3〜ｖ4で区切られる区間Ａに影響を与える制御点は図４２に示される制御点マトリクスからＱ00〜Ｑ33である。
同様にその右隣のｕ4〜ｕ5，ｖ3〜ｖ4で区切られる区間Ｂに影響を与える制御点はＱ01〜Ｑ34である。
【０３００】
しかしながら、ｕ4，ｖ3〜ｖ4の１辺のみについてみると、図４２に示す２つの制御点マトリクスの共通部分であるＱ01〜Ｑ33の３ｘ４（＝１２）ケのみが影響を与えている。なぜなら、上記２つの部分は裂け目なく接しているからである。
【０３０１】
上記の考え方を応用して、図４３（Ａ）に示すｕ3〜ｕ4，ｖ3の辺やｕ3，ｖ3〜ｖ4の辺について考察すると、ｕ3，ｖ3〜ｖ4の辺に影響を与える制御点は、図４３（Ｂ）に示すＱ00〜Ｑ32の３ｘ４（＝１２）ケ、ｕ3〜ｕ4，ｖ3の辺に影響を与える制御点は、図４３（Ｃ）に示すＱ00〜Ｑ23の３ｘ４（＝１２）ケである。
【０３０２】
さらに応用することにより、結局、ＮＵＲＢＳオブジェクトの曲面リージョン００の各（曲）辺に影響を与える制御点は図４４に示すごとくである。他の曲面リージョンの辺についても、同様に考えることができる。
【０３０３】
曲面リージョンの各（曲）辺に対応する制御点のグループを選び出し、次いで、それらの制御点をスクリーン座標に変換する。図４５は、その一例であり、図４５（Ｂ）に示すように、制御点Ｑ00〜Ｑ42のグループが選択された時、図４５（Ａ）に示すように制御点がスクリーン座標に変換される。
【０３０４】
次いで、図４５（Ａ）に示すように、隣合う制御点同士を結んで４辺形を形成し、それぞれの４辺形の面積を算出する。なお、図４５（Ａ）において、点線は辺の形状に対応する図である。
【０３０５】
そして、算出した各４辺形の面積の総和をとって「制御点のグループを結んで得られるスクリーン上でのエリア」とする。各４辺形の面積を求める計算は、図４６に示すように例えば、制御点Ｑ00〜Ｑ11を有する４辺形を直角三角形に分解して、下記式（６）のように求められる。
【０３０６】
【数７】
0004385524.tif 000008
【０３０７】
上記式でｘ，ｙはスクリーン上のｘ，ｙ座標である。そして、ｔ10からみたＱ10の方向及び、ｔ01からみたＱ01の方向の２つの方向により、２つの３角形の面積の和をとるのか差をとるのかが決まる。
【０３０８】
この時、スクリーン上でのオブジェクトの大きさが小さい時など、全ての４辺形の面積を足して正確にエリアの大きさを算出する必要がない場合もある（形状の複雑さによらずエリアの大きさが変わらないので、正確にエリアの大きさを算出することは画像処理の効率が悪い。）。
【０３０９】
したがって、ＬＯＤ（Level Of Detail）によって対象とする制御点の数を変えることも可能である。すなわち、スクリーン上でのオブジェクトの大きさが小さい時ほど、対象とする制御点の数を少なくして、概算のエリアの大きさを算出するようにする。
【０３１０】
図４７は、ＬＯＤ（Leｖel Of Detail）によって対象とする制御点の数を変え、概算のエリアの大きさを算出する例を説明する図である。図４７（Ａ）でＬＯＤ＝１の時の制御点の数を基準にすると、図４７（Ｂ），図４７（Ｃ）に示すように、ＬＯＤが大きくなり、従って、表示されるオブジェクトの大きさが小さくなる程、制御点の数を少なくして概算のエリアの大きさを算出している。そして、各曲面リージョンの各（曲）辺に対して算出したエリアの大きさに比例して、辺の分割数を決定する。
【０３１１】
次に、各曲面リージョンの分割数が決まったら、ｕ，ｖノット区間を分割する。この時ｕ，ｖの間隔が均等になることが望ましい。図４８は、ｕ，ｖノット区間の分割を説明する図である。図４８（Ａ）において、黒点はオブジェクトの辺の区切りである。また、黒点を結ぶ辺に付された括弧数字は、辺の分割数である。
【０３１２】
例えば、図４８において、リージョン１０の黒点Ａとリージョン００の黒点Ｂを結ぶ辺を左辺、これに対応する右辺をリージョン１１の黒点Ｃとリージョン０１の黒点Ｄを結ぶ辺とし、黒点Ａと黒点Ｃを結ぶ辺を上辺、更に黒点Ｂと黒点Ｄを結ぶ辺を下辺と考えることができる。
【０３１３】
さらに、図４８（Ａ）において、各辺の括弧数字は辺の分割数である。ここで、一般に、リージョンの４（曲）辺の上と下、左と右とで分割数が異なる。したがって、図４８（Ｂ）に示すように、内部分割点を作って、ポリゴンの３角形ストリップと３角形ファンとに分ける。
【０３１４】
ここで、ポリゴンの３角形ストリップとは図４９（Ａ）に示される様に、順次１つだけ新たな頂点を生成し、生成された頂点と２つの頂点を共有するように交互に３角形ポリゴンを接続して形成されるパターンである。
【０３１５】
また、３角形ファンとは図４９（Ｂ）に示すように、1つの頂点を全ての３角形ポリゴンが共有する様に繋ぐパターンである。図４８（Ｂ）において、パターンＦＡ，ＦＢ、が３角形ファンであり、その他は３角形ストリップにポリゴンが並べられている。
【０３１６】
ここで、ＮＵＲＢＳオブジェクトをいったん曲面リージョンにすることのメリットを考える。ＮＵＲＢＳオブジェクトをポリゴンに分割する時、ＬＯＤの値によって直接ポリゴン分割数を決めることをしないで、本発明のこの方法では、一旦曲面リージョンに分割している。これは、ＮＵＲＢＳ形状の中でも比較的平坦な部分と曲率の高い部分とがあり、できるだけ各部分に相応したポリゴン分割数にするためである。
【０３１７】
例えば、図５０に示す様な比較的平坦な部分と曲率の高い部分を持つ折りたたみ図形に対する処理を考える。図５０（Ａ）に示す元のＮＵＲＢＳオブジェクトに対し、ＬＯＤの値によって図５０（Ｂ）のように、直接ポリゴン分割数を決める場合は、比較的平坦な部分と曲率の高い部分に対する分割数が同じになり、曲率の高い部分の表示が表し難い。
【０３１８】
一方、一旦図５０（Ｃ）に示すような曲面リージョンにして（３つの曲面リージョンに分割している）から、図５０（Ｄ）に示すように、代表制御点間の距離に従って、ポリゴン分割数を決める場合は、曲率の高い部分に対する好ましい表示が可能である。
【０３１９】
図５１は、図４９（Ａ）に示したＮＵＲＢＳオブジェクトに対し、ＬＯＤの値によって直接ポリゴン分割数を決めた場合（図５１（Ａ））と、曲面リージョンにしてから、ポリゴン分割数を決めた場合（図５１（Ｂ））を比較して示す図である。図５１（Ｂ）の方が、曲率が良く表されている。
【０３２０】
次に図５２に示す図を例にして、曲面パッチをどのように３角形ポリゴンに分割するかを説明する。図５２（Ａ）に示す図は、区切り点（0,0）−（1.0,0）間の辺Ａ, 区切り点（0,0）−（0,1.0）間の辺Ｂ，区切り点（1.0,1.0）−（1.0,0）間の辺Ｃ，区切り点（0,1.0）−（1.0,1.0）間の辺Ｄを有する。そして、辺Ａ, 辺Ｂ，辺Ｃ，辺Ｄのそれぞれの分割数は、３，２，４，４である。
【０３２１】
かかる図５２（Ａ）に示す図に対し、第1に、図５２（Ｂ）に示すように、ある一（曲）辺Ａを底として、両隣の辺Ｂ，Ｃの分割点を底に近い方から１つずつ、どちらかの隣の区切り点に至るまで結ぶ。図５２（Ｂ）では、区切り点（0,1.0）に至るまで結ぶ。
【０３２２】
それによってできた辺Ｅ、辺Ｆを底辺と同じ分割数（図５２の例では分割数３）で、ノットの間隔ができるだけ均等になるように分割し、内分点を作る。そして、作られた内分点を結んで３角形ストリップ（図４９（Ａ）参照）を形成する。
【０３２３】
そして、上記処理により図５２（Ｂ）に示す様に、ポリゴンに分割していない部分ａは３辺形になる。
【０３２４】
第１の処理によってできた内分点の辺Ｆを底として、図５２（Ｃ）に示すごとく同様に両隣の辺の分割点を底に近い方から１つずつ、どちらかの辺の分割点がなくなるまで結ぶ。
【０３２５】
次に第２の処理として、上記辺Ｇを（底辺−１）（底辺が１の時には分割しない）の分割数で分割し、内分点をつくる。そして、上記第１の処理と同様に内分点を結んで３角形ストリップを形成する。
【０３２６】
そして、第２の処理により、ポリゴンに分割していない部分ｂは、多くとも２辺のみに分割点を持つ３辺形になる。
【０３２７】
第３の処理として、この分割点のない辺Ｈを底として、図５２（Ｄ）に示す様に、両隣の辺の分割点を底に近い方から１つずつ、どちらかの辺の分割点がなくなるまで結ぶ。それによってできた各４辺形の対角線を結んで３角形を２つずつ形成する。図５２（Ｄ）の例では４辺形は１つのみである。
【０３２８】
次に第４の処理として、第３の処理により、ポリゴン分割していない部分ｃは、多くとも１辺のみに分割点を持つ３辺形になる。したがって、図５２（Ｅ）に示すように残っている分割点と分割点を持たない２辺の接点を結んで３角形ファン（図４９（Ｂ）参照）を形成する。
最終的に、曲面パッチは図５２（Ｆ）のように複数の３角形ポリゴンに分割される。
【０３２９】
ここで、図５２により説明した分割方法では曲面パッチの任意の１（曲）辺Ａを底としている（図５３（Ａ）参照）。しかし、たまたま最も分割数の少ない辺Ｂ（分割数は２である。）を底とした場合は、ポリゴンの曲面近似誤差が許容範囲を超えてしまう可能性がある。すなわち、図５３（Ｂ）では、最も分割数の少ない辺Ｂを底としたことにより、分割が荒すぎることになる。
【０３３０】
したがって、これを防ぐには底辺を任意とせず、次の条件１または２のようにする方法も可能である。
条件１：底辺を最も分割数の多い辺にとる。（この場合、近似誤差が最も小さくなる代わりに、発生するポリゴン数も多くなる。）
条件２：底辺を、全ての辺の分割数を平均した値に最も近い分割数の辺にとる。
【０３３１】
上記したＮＵＲＢＳ曲面パッチを３角形ポリゴンに分割する方法を一般化してそのアルゴリズムを次のように纏めることができる。
１．上記条件１又は条件２のいずれかにより底辺を求める。
２．左右の辺のうち、短かい方のＵ又はＶステップ数だけ、ただし左右の辺のステップ数が同じなら（ステップ数−1）だけ、かつ各ステップについて底辺のステップ数だけ、ＵＶ値を補間して求める。これにより３角形ストリップ情報が生成される。
なお、上記“左右の辺のステップ数が同じなら（ステップ数−1）だけ”という要件は、図５３（Ｃ）に示すような場合に、辺Ｘを４分割としないためである。
３．左右の辺のうち（長いステップ数−１−短いステップ数）または（次の辺のステップ数−１）の短かい方のＵ又はＶステップ数だけ、かつ各ステップについて（底辺のステップ数−１）のステップ数だけ、ＵＶ値を補間して求める。
ただし上記２．で左右の辺のステップ数が同じであったなら３．では何もしない。 ここで、新たな３角形ストリップ情報が生成される。
この３．のステップが複数回ある場合は、図５３（Ｄ）に示すように、ステップ数は１ずつ少なくなる。
４．底辺を、左右の辺のうち長い方の辺の、残りのステップの部分に切り替える。
５．切り替えられた底辺に対する左右の辺のうち（短かいステップ数−１）だけ３角形ストリップを生成する。
６．残りのステップを用いて３角形ファンを生成する。
【０３３２】
ここで、上記ＮＵＲＢＳオブジェクトの分割における計算処理について考察する。
【０３３３】
ＮＵＲＢＳオブジェクトを曲面リージョンに分割し、更にサンプリング点を取って３角形ストリップや３角形ファンに分割する際、３角形ストリップまたは３角形ファンを生成する毎に各ポリゴンの頂点のｕ，ｖノット値から３Ｄ頂点座標を算出したのでは、曲面リージョンの各頂点に対し２，３回重複計算をすることになってしまい効率が悪い。
【０３３４】
そこで、本発明では、曲面リージョンの全ての頂点を包含できるようなテーブルを用意し、いったん各頂点のｕ，ｖノット値を格納する。また、３角形ストリップや３角形ファンに戻すための接続情報も作成する。
そして、格納されたｕ，ｖノットの値からポリゴンの３Ｄ頂点座標を算出するようにする。これにより各頂点に対する重複計算がなくなるので効率が良い。
【０３３５】
かかる３Ｄ頂点座標の計算回数を少なくする例を図５４に示す。図５４（Ａ）では、３角形ストリップを生成する毎に頂点座標を計算する場合である。したがって、ストリップ＃１、＃２は頂点を８ケ有し、ストリップ＃３は頂点を７ケ、ストリップ＃４は頂点を４ケ有し、ひとつのファンは頂点を４ケ有する。
【０３３６】
したがって、頂点は合計３１ケ有する。これら３１ケの頂点は、ストリップ＃１〜＃４及び、ファンに対して、重複して有している。したがって、３１回の頂点計算において重複した計算機会が生じることになる。
【０３３７】
これに対し、図５５に示すようにポリゴンに分割した時の頂点番号をテーブルに登録する。図５５に示すテーブルに登録されたＮＵＲＢＳオブジェクトの頂点番号に対応する（ｕ，ｖ）から３Ｄ頂点座標ｘ，ｙ，ｚを算出する。これにより、図５４（Ｂ）に示す様に、ストリップ＃１〜＃４およびファンはこれら頂点を結ぶ接続情報によって特定される。
【０３３８】
すなわち、ストリップ＃１は頂点３−７−２−６−１−５−０−４の如くである。ファンは頂点１３が重複し、接続情報として１３＝１６−１７−１２で特定される。
【０３３９】
このようにテーブルを用いることにより、頂点の数１８ケに対応する頂点の計算回数で済むことができる。
【０３４０】
ここで、上記のように、テーブルに登録された頂点番号から３Ｄ頂点座標を計算することによって、先に図１３、図１４について説明したと同様にポリゴンがスクリーンの内側に位置するか外側に位置するか、また、視点から表向きになっているか裏向きになっているかがわかる。
【０３４１】
したがって、３Ｄ頂点座標を算出した段階でスクリーンの外側に位置するポリゴンや、視点から裏向きになっているポリゴンの頂点を除去することが可能である。これによって、その後のアトリビュート（テクスチャ座標、法線、カラー、半透明度など）についての頂点のＮＵＲＢＳ演算の負荷を軽減することができる。
【０３４２】
また、３Ｄ頂点座標を算出した段階でトリミングも行い、さらにポリゴンの頂点を除去することも可能である。
【０３４３】
図５６は、かかるポリゴンの削除を説明する図である。ＮＵＲＢＳオブジェクトの頂点３、７を含む３角形即ち、ポリゴンはスクリーンＳＣの外側にあるため非表示となる。したがって、頂点３、７は頂点計算対象から削除することが可能である。
【０３４４】
あるいは、スクリーンＳＣの内側であっても、トリミングにより削除される場合は、非表示である。図５６に示す例では頂点８を含む点線半円がトリミングによって削除されるので、この点線半円に含まれる頂点８を有する３角形が非表示になるので、頂点８の計算を削除することができる。
【０３４５】
また、視点から裏向きになっているポリゴンの頂点も削除できるが、このポリゴンが裏であるか否かの判定は、２辺の外積（法線ベクトル）を求めてその向きから判断することにより可能である。
【０３４６】
次に、ＮＵＲＢＳ曲面上のサンプリング点のデータを算出する式を検討して、更に演算の負荷を軽減する方法を提案する。
【０３４７】
ＮＵＲＢＳ曲面上の点Ｐ(ｕ，ｖ)は、先に示した式（３）〜式（５）により求められる。そして、実際には各制御点Ｑ、曲面上の点Ｐは次のようなパラメータを持っており、それぞれのパラメータを上記式（３）〜式（５）を使って算出しなければならない。
【０３４８】
▲１▼ ３Ｄ座標：x, y, z
▲２▼ ２Ｄテクスチャ座標：s, t
▲３▼ 法線ベクトル：(Ｎx, Ｎy, Ｎz)
▲４▼ カラー、半透明度：Ｒ, Ｇ, Ｂ, α
なお、上記▲２▼〜▲４▼は、アトリビュートである。
例えば、曲面上の点Ｐの３Ｄ座標ｘPを算出するためには、次の式（７）の計算を行わなければならない。
【０３４９】
【数８】
0004385524.tif 000009
【０３５０】
したがって、できるだけ多くの不用なサンプリング点を除去することは、演算の負荷を軽減するために有効である。
【０３５１】
ここで、上記したようにＮＵＲＢＳ曲面上の点をサンプリングしてポリゴンに分割するための方法において適用可能なサンプリング点を算出するために必要な、Ｂスプライン、ブレンディング関数（Cox-deBoor の漸化式）の値の算出を高速に行なう本発明に従う演算装置の構成例を説明する。
【０３５２】
この演算装置の原理を先に説明すると、入力をノットの値ｕ、及びノット列
［ｕ0,ｕ1,ｕ2,…,ｕm-1］（ｍ＝制御点数＋階数Ｋ）とし、出力としてブレンディング関数の値Ｍx,k（Ｍの個数は階数と同じ）を算出する。
【０３５３】
ブレンディング関数は漸化式なので、ある階数でのブレンディング関数の値を算出するためには、１つ小さい階数でのブレンディング関数の値を算出しなければならない。
【０３５４】
したがって、ブレンディング関数の値は、階数の小さい方から１階ずつ算出する。ただし、パイプライン的に演算を行うので、ある階の最後のブレンディング関数の値を算出するタイミングと次の階の最初のブレンディング関数の値を算出するタイミングは重複する。
【０３５５】
また、図８８で説明し、更に図５７に示すように、Cox-deBoorの漸化式の例では、ある階のブレンディング関数の値は１つ小さい階のブレンディング関数の値を用いた積項から算出される。例えば、Ｍx,2はＭx,1とＭ(x+1),1から算出される。
【０３５６】
ここで両端から２つずつ、計４つの積項は他の積項に比べて、１つ小さい階のブレンディング関数の値を算出するための２つの積項の加算の分だけ早く算出することができる。
【０３５７】
このことを利用して、４つの演算器を使って両端から２つずつ、計４つ（演算器が２つの場合は、１つずつ、計２つ）の積項を１ステップで並列に算出し、そして加算器を使って２つの積項を加算して１つのブレンディング関数の値を算出する。すなわち、ブレンディング関数の値は、１つの階の中では、両端から中央に向かって順に算出する。
【０３５８】
図５８は、５階のナーブス曲線についての演算例である。この演算で、図５７で説明した原理に従って図５９に示すステップ順に行なわれる。
【０３５９】
例えば、図５８において、ステップ１ではＭ4,1＝１からＭ3,2, Ｍ4,2を求める。さらに、ステップ２では、Ｍ2,3、Ｍ4,3が決定しているのに対して、ステップ３でＭ3,3は決定している。これは、Ｍ3,3の演算途中に加算行程が入っているためである。次に、ステップ３でＭ1,4、Ｍ4,4を決定しているのに対してステップ４でＭ2,4、Ｍ3,4は決定している。
【０３６０】
これは、Cox-deBoorの漸化式ではＭ1,4、Ｍ4,4は、Ｍ2,3、Ｍ4,3だけから算出されるのに対して、Ｍ2,4、Ｍ3,4はＭ3,3も必要としているためである。
【０３６１】
上記漸化式を高速に演算するために、演算装置は、図１に示すＢスプライン演算器２０３において、図６０に示すような減算入力ノット列を２つずつ減算する減算器ＳＢ、２つの減算器ＳＢの出力の除算を求める除算器ＤＩＶ、更に除算器ＤＩＶの出力と加算器ＡＤＤの出力を乗算する乗算器ＭＸを有し、パイプライン的に演算する演算器ＯＰＣを単位演算器として有する。
【０３６２】
また、図６０の演算器構成において、除算器は、図６１に示すように、一方の入力を符号を反転する逆算器ＲＯと乗算器ＭＸにより構成できる。したがって、図６０において、漸化式を高速に演算する装置は、基本的に加減算回路と、乗算器で構成することができる。
【０３６３】
そして、演算装置は、図６２に全体構成を示すように、図６０の単位演算器を４つ（＃０〜＃３）有して構成される。（ローコスト化のためには演算器２つで構成しても良い。）さらに、４つの単位演算器＃０〜＃３の出力を加算する加算器ＡＤＤを有する。さらに、各単位演算器＃０〜＃３の動作を調整するシーケンサＳＣＣと、出力を一旦保留するレジスタＲｅｇを有する。
【０３６４】
この図６２に示す演算装置の入力データはノットの値ｕ、及びノット列［ｕ0,ｕ1,ｕ2,…,ｕm-1］（ｍ＝制御点数＋階数Ｋ）であり、出力データとしてブレンディング関数の値Ｍx,k（Ｍの個数は階数と同じ）を算出する。そして、これら入出力データは、入出力バスを通してポリゴン生成器２０２に接続される。
【０３６５】
図６２に示す演算装置の演算手順を図６３に示す。図６３において、横軸にクロックＣＬＫ、縦軸に＃０〜＃3の演算器の処理手順を示す。演算器の処理手順において、減算器ＳＵＢ、除算器ＤＩＶ及び乗算器ＭＸの処理内容が示されている。
【０３６６】
ここで、上記に示した演算装置（図６２）とその演算手順（図６３）を、更に多数の、且つ／あるいは高階数のパッチからなるＮＵＲＢＳオブジェクトに適用することを検討する。
【０３６７】
まず、多数のパッチの場合、隣り合う各パッチに適用するＢスプライン、ブレンディング関数は、図６４の例のように１つずつずれているだけである。したがって、多数のパッチのうち隣り合う各パッチに対して、演算装置に入力するノット及び、ノット列を１つずつずらせば、図６２に示す演算装置とその演算手順（図６３）を使用することができる。
【０３６８】
ここで、高階数のパッチの場合、より低階のパッチに比べて必要なブレンディング関数の数が多く、且つ各ブレンディング関数を算出する手順が複雑である。ただし、ある階数でのブレンディング関数の値は１つ小さい階数でのブレンディング関数の値を使って算出することから分かるように、より低階のブレンディング関数の値を算出するための演算手順は、高階のブレンディング関数を算出する場合にもそのまま使用できる。
【０３６９】
すなわち、ある階数でのブレンディング関数を算出する演算手順は、（ある階数−１）の階数でのブレンディング関数を算出する演算手順、その後（ある階数−１）の階数でのブレンディング関数を使って、ある階数でのブレンディング関数を算出する演算ということになる。かかる関係が例として図６５に示す４階のブレンディング関数を算出する演算手順でも現れている。
【０３７０】
ここまで、ＮＵＲＢＳ曲面モデルを複数のポリゴンに分割して、画像表示を行なう装置における本発明に従う実施例を上記に種々説明して来たが、通常、ビデオゲーム装置等で表示される人間などの３次元座標モデル画像は、複数の小部分（以下、この小部分をセクションと言う）で構成される。
【０３７１】
そして、セクション部分に円形等の閉接曲線即ち、トリミング曲線で表されるトリミング部分が形成される場合がある。かかるトリミング部分を考慮してポリゴン化を行う際に、例えば、特開平１−２０１７７７号公報に記載の技術では、ＮＵＲＢＳ曲面を含むパラメトリック曲面のｕ、ｖの格子とトリミング曲線の線分との交差点及び、トリミング曲線の線分の頂点を算出している。
【０３７２】
そして、算出された新たな頂点とともにポリゴン化を行っている。したがって、かかる従来の方法では、ポリゴンの頂点数をいたずらに増加することになる。これにより、演算量が著しく増加し、ＣＰＵの演算処理の負荷が大きくなる。
【０３７３】
またＮＵＲＢＳ曲面のトリミングされてないポリゴンに対しても、トリミングされているかどうかの判定を行っている。したがって１つのＮＵＲＢＳ曲面セクションをポリゴン化する際に多大な演算量が必要とされる。
【０３７４】
この為に、上記特許公開公報に記載の技術に従うトリミング曲線の処理方法は、ビデオゲーム装置等のインタラクティブ、且つリアルタイムな用途を有する３次元画像処理システムには適用し難いものである。
【０３７５】
本発明は、実施例として、かかるＮＵＲＢＳ曲面モデルのデータを扱う際のトリミングのための演算をできるだけ単純化するトリミング曲線の処理方法及び、これを用いた３次元画像処理システムを提供する。
【０３７６】
さらに、本発明は、トリミングされたＮＵＲＢＳ曲面モデルをリアルタイムに描画することを可能とするトリミング曲線の処理方法及び、これを用いた３次元画像処理システムを提供する。
【０３７７】
上記本発明の課題を達成するトリミング曲線の処理方法は、基本的構成として、次の処理ステップを有し、これを用いた３次元画像処理システムは、対応する処理手段を有して構成される。
【０３７８】
かかる処理ステップの概要を説明しておくと、パラメトリック空間上でｕ，ｖ方向の複数の頂点で表されるパラメトリック曲面に対応して、ｕ，ｖ方向の頂点数と等しい大きさの２次元配列を生成する。ついで、前記パラメトリック曲面上のトリミング曲線を、前記２次元配列上の直線線分による多角形へ変換する。さらに、変換された多角形内の頂点を有効とするか、無効とするかの判定を行う。
【０３７９】
さらに、具体的態様として、前記において、変換された多角形内の頂点を有効とする場合、この多角形を描画対象とし、変換された多角形内の頂点を無効とする場合、この多角形を描画対象から削除する。
【０３８０】
さらに、前記有効と判定された頂点に基づき三角形ポリゴンを生成する。具体的態様として、３つの頂点が有効と判定される場合に、有効と判定される３つの頂点を含む三角形ポリゴンを生成する。あるいは、３つの頂点の内少なくとも１つの頂点が有効と判定される場合に、該有効と判定される１の頂点を含む三角形ポリゴンを生成する。
【０３８１】
本発明のここでの実施例であるトリムされた曲面のリアルタイム描画の方法も図１の本発明に従う画像表示装置において実行される。特に、図１のポリゴン生成器２０２で実行される。
【０３８２】
図６６は、上記したｕ方向、ｖ方向のＮＵＲＢＳ曲面等のパラメトリック曲面モデルで形成されるセクションの一例である。このパラメトリック曲面モデル１のセクションは、トリミング曲線２により規定されるトリミング領域を有している。
【０３８３】
本発明は、かかるトリミングされたＮＵＲＢＳ曲面等のパラメトリック曲面モデルをリアルタイムに描画するための手法に関するものである。図６７の処理フロー図を参照して、本発明に従うトリミングされたパラメトリック曲面モデルをリアルタイムに描画するためのポリゴン生成処理を説明する。
【０３８４】
図６７は、図１のポリゴン生成器２０２及び、Ｂスプライン演算器２０３における動作処理フロー図であり、特に、ステップＳ３２の処理はポリゴン生成器２０２及び、Ｂスプライン演算器２０３両方において実行され、他のステップＳ３１及び、ステップＳ３３からステップＳ３５の処理は、ポリゴン生成器２０２において、実行される。
【０３８５】
この時、ポリゴン生成器２０２、及びＢスプライン演算器２０３のそれぞれにおける処理は、図示しないメモリに格納されるプログラムにより実行制御される。先ず図６６に示すパラメトリック曲面モデルを構成するｕおよびｖ方向の頂点数の大きさの２次元配列を図６８の様に作成し、初期化する（ステップＳ３１）。  以下、この２次元配列を“頂点配列"という。
【０３８６】
通常は、先に説明した様に各頂点（図６８における黒点）のデータとして座標値等の複数のデータが含まれているが、ここで作成する頂点配列の各要素は、頂点の有効／無効を示すフラグだけでも構わない。つまり作成された２次元配列は頂点の有効／無効を示すためのフラグからなるビットマップともいえる。
【０３８７】
初期化はトリミング曲線毎に与えられた“トリミングフラグ"の値によって行われる。このフラグは、上記の頂点配列の要素に含まれるフラグとは異なる。ここで、“トリミングフラグ"とは、トリミング曲線の内部をトリミングするか、外部をトリミングするかを指定するためのフラグである。
【０３８８】
そして、このトリミングフラグは、トリミング曲線データの中にあらかじめ含まれている。例えば、トリミングフラグの値が「１」の時は、トリミング曲線の内部の領域が有効であることを意味し、値が「０」の時はトリミング曲線の外部の領域が有効であることを意味する。
【０３８９】
図６９は、トリミングフラグによる指示の例を示す図である。図６９（Ａ）は、トリミングフラグが「１」であり、トリミング曲線の内部の領域が有効である。反対に、図６９（Ｂ）は、トリミングフラグが「０」であり、トリミング曲線の外部の領域を有効としている。
【０３９０】
ポリゴン生成部２０２において、トリミングフラグの値が「１」の場合は、頂点配列の全ての要素を「０」で初期化する。トリミングフラグの値が「０」の場合は頂点配列の全ての要素を「１」で初期化する。頂点配列の要素の値が「０」の場合はその頂点は無効であることを示し、値が「１」の場合は頂点が有効であることを示す。
【０３９１】
図６８に示す例において、曲面はｕ方向に９つ、ｖ方向に７つの頂点で構成されている。図６８に示す頂点配列から図７０に示す様にトリミング曲線２を線分によって構成される多角形に変換する（ステップＳ３２）。以下、この多角形に変換されたものを適宜、トリミング多角形２０と称す。かかるトリミング多角形２０への変換は、Ｂスプライン演算器２０３を用いて行われる。
【０３９２】
トリミング曲線２がもともと多角形として与えられている場合には特にこの変換は必要ではない。ＮＵＲＢＳ曲線等のパラメトリック曲線によって与えられている場合は、あらかじめ指定された曲線の分割数にしたがって曲線を多角形２０に変換する。
【０３９３】
次に得られたトリミング多角形２０の内部にある各頂点の有効／無効の判定を行う（ステップＳ３３）。トリミング多角形２０の内部が有効であるか、無効であるかは、先に説明したトリミング曲線２のトリミングフラグの値によって異なる。
【０３９４】
ここで、頂点の有効／無効の判定は、ポリゴン生成器２０２において、トリミングフラグを参照して行われる。ラスタグラフィックスの多角形（凹多角形を含む）の塗り潰しのアルゴリズムを用いることによってトリミング多角形の内部に含まれる頂点を判定する。そして判定された頂点に対して、トリミングフラグの値が書き込まれる。
【０３９５】
以下に、トリミング多角形２０の内部にある頂点の有効／無効の判定（多角形の塗り潰し）の方法について、具体的に説明する。
【０３９６】
図７１は、かかるトリミング多角形２０の内部にある頂点の有効／無効の判定の説明の為に、図７０を書き改めた図である。図７１において、トリミング多角形２０のｖ座標の最小値Ｖminを求め、その値よりも大きい最小のｖを求める。図７１において、このｖはＶstartになる。
【０３９７】
次いで、ｖのラインと交差するトリミング多角形の全ての辺の交点を求め、ｕの値を、小さい順にソートする。ソートされたものをｕ0, ｕ1, ｕ2, …, ｕn-1とする（ｎは交点の数であり、ｕi≦ｕi+1）。図７１の例では、ｖがｖ'のラインである場合、交点は４つあり、ソートされたそれぞれの交点は、図示されるように、ｕ0, ｕ1, ｕ2 ,ｕ3になる。
【０３９８】
次いで、交点ｕ0, ｕ1, ｕ2, …, ｕn-1を２値ずつ組として（つまり、ｕ0とｕ1、ｕ2とｕ3、…、ｕn-2とｕn-1を組とする）、それぞれの区間に含まれている頂点にトリミングフラグの値を書き込む。
【０３９９】
図７１の例では、トリミング多角形２０内のトリミングフラグの値は、「０」であるため、トリミングフラグとして「０」の値を書き込むことによってトリミング多角形２０の内部の点が無効になる（図では白丸で示している）。
【０４００】
上記処理が終わると、さらに、ｖをひとつ下の行に移動する。もしｖがトリミング多角形のｖ座標の最大値ｖmaxを越えていなければ上記と同様の処理を繰り返す。Ｖmaxを越えていた場合は，この処理は終了する。したがって、図７１において、ｖはｖendまで移動する。
【０４０１】
図６７の処理フローにおいて、他にもトリミング曲線がある場合は、ステップＳ３１の処理に戻る。以上の処理によって有効とされた頂点からポリゴンを生成する（ステップＳ３５）。
【０４０２】
次に、有効とされた頂点からポリゴンを生成する内容を説明する。本発明の実施例において、ねじれ等の問題を避けるために三角形ポリゴンを生成する。
【０４０３】
今、図７２に示されるように頂点Ｐ（ｉ，ｊ）とそれに隣接する頂点をＱ，Ｒ，Ｓで示している。そして、４頂点Ｐ，Ｑ，Ｒ，Ｓを分割して、三角形ポリゴンを形成する。この時、どのように三角形に分割するかを、変数ｔｙｐｅにより示す。
【０４０４】
この変数ｔｙｐｅの値によって４つの頂点は、図７３に示すように、
ｔｙｐｅ＝０（図７３（Ａ））、ｔｙｐｅ＝１（図７３（Ｂ））に分類される。したがって、図７１に示す例では、まず、図７４に示す様に、頂点(０,０), (０,１), (１,０)によって、一つの三角形ポリゴンを形成する。続いて頂点(０,１), (１,０), (１,１)、頂点(０,１), (０,２), (１,１)の順番でポリゴンを形成していく。
【０４０５】
頂点(２,２)、頂点(２,３)および頂点(２,４)は無効である。このため、これらの頂点を使用したポリゴンの形成は行わない。したがって、頂点(１,１), (１,２), (２,１)によるポリゴンが形成された後、頂点(１,４), (１,５), (２,５)のポリゴンが形成される。続いて頂点(１,５), (２,５), (２,６)のポリゴンが形成される。
【０４０６】
ここで、前記図７３に従う方法によって生成されたポリゴンからなる曲面上のトリミングによって除かれる領域は、図７４に例示される様に、トリミング曲線２即ち、トリミング多角形２０によって囲まれる領域よりも大きくなる。また、トリミング曲線２の外側を切り取る場合には、トリミングされた曲面はトリミング曲線２によって囲まれる領域よりも小さくなる。
【０４０７】
本発明ではできるだけ演算を簡略化しているため、このようにトリミング曲線２とトリミングされる領域に差が生じる。
【０４０８】
図７５は、かかる図７４に例示される様なポリゴンを生成するための動作フローチャートである。図７５において、ｖ方向にｉ番目、ｕ方向にｊ番目の頂点は、頂点（ｉ，ｊ）として示される。Ｍ、Ｎはそれぞれｕ，ｖ方向の頂点数を示している。
【０４０９】
また，便宜上、図７２に示したように頂点Ｐ（ｉ，ｊ）に隣接する頂点をＱ，Ｒ，Ｓで示している。そして、４頂点Ｐ，Ｑ，Ｒ，Ｓを分割して、三角形ポリゴンを形成する。この時、どのように三角形に分割するかを変数ｔｙｐｅにより示す。
【０４１０】
この変数ｔｙｐｅの値によって４つの頂点は、図７３に示したように、
ｔｙｐｅ＝０（図７３（Ａ））、ｔｙｐｅ＝１（図７３（Ｂ））に分類される。
【０４１１】
このような前提において、ポリゴン生成器２０２に含まれるレジスタに、初期値として、ｉ＝０，ｊ＝０，ｔｙｐｅ＝０をセットする。同時に頂点Ｐ，Ｑ，Ｒ、Ｓのそれぞれに対応し、同様にポリゴン生成器２０２に含まれる座標レジスタにそれぞれＰ（ｉ，ｊ）、Ｑ（ｉ，ｊ＋１）、Ｒ（ｉ＋１，ｊ）、Ｓ（ｉ＋１，ｊ＋１）をセットする（ステップＳ４０）。
【０４１２】
次に、頂点Ｐが、有効か否かを判断し（ステップＳ４１）、無効であれば、頂点Ｐ以外が有効かを判断する（ステップＳ４２）。頂点Ｐ以外が有効であれば、頂点Ｑ，Ｒ，Ｓによって、三角形ポリゴンを形成する（ステップＳ４３）。
【０４１３】
また、ステップＳ４１、ステップＳ４４で、頂点Ｐが有効、頂点Ｑが無効であれば、頂点Ｑ以外が有効かを判断する（ステップＳ４５）。頂点Ｑ以外が有効であれば、頂点Ｐ，Ｒ，Ｓによって、三角形ポリゴンを形成する（ステップＳ４６）。
【０４１４】
同様に、ステップＳ４１、ステップＳ４４、ステップＳ４７で、頂点Ｐ、Ｑが有効、頂点Ｒが無効であれば、頂点Ｒ以外が有効かを判断する（ステップＳ４８）。頂点Ｒ以外が有効であれば、頂点Ｐ，Ｑ，Ｓによって、三角形ポリゴンを形成する（ステップＳ４９）。
【０４１５】
さらに、ステップＳ４１、ステップＳ４４、ステップＳ４７、ステップＳ５０で、頂点Ｐ、Ｑ、Ｒが有効、頂点Ｓが無効であれば、頂点Ｐ，Ｑ，Ｒによって、三角形ポリゴンを形成する（ステップＳ５１）。
【０４１６】
さらにまた、ステップＳ４１、ステップＳ４４、ステップＳ４７、ステップＳ５０で、頂点Ｐ、Ｑ、Ｒ、Ｓが全て有効であれば、ｔｙｐｅの値に従って、２つの三角形ポリゴンを生成する（ステップＳ５２）。
【０４１７】
ｔｙｐｅ＝０の時は、図７３（Ａ）に示した様に、頂点Ｐ，Ｑ，Ｒ及び、頂点Ｑ，Ｒ，Ｓによって、２つの三角形ポリゴンを形成する。また、ｔｙｐｅ＝１の時は、図７３（Ｂ）に示した様に、頂点Ｐ，Ｑ，Ｓ及び、頂点Ｐ，Ｒ，Ｓによって、２つの三角形ポリゴンを形成する。
【０４１８】
この様に、三角形ポリゴンが形成されると、ｊ及び、ｉを１ずつ歩進し、上記ステップＳ４０からＳ５２の処理を、セクションに含まれる頂点数分くり返す（ステップＳ５３）。
【０４１９】
一方、これとは逆に、トリミング曲面のトリミングされる領域がトリミング曲線２によって囲まれる領域よりも小さいか、あるいは外側をトリミングされた曲面がトリミング曲線２によって囲まれる領域よりも大きい方が望ましい場合もある。
【０４２０】
この場合は、有効／無効の判定がされた頂点配列に対するポリゴンの生成の方法を変えることによって対応することができる。すなわち、先の方法では、三角形の全ての頂点が有効だった場合に対してのみポリゴンが生成される。
【０４２１】
これに対し、三角形を構成するための頂点のいずれかひとつが有効ならば三角形を生成する。これによりトリミング曲面のトリミングされる領域がトリミング曲線２によって囲まれる領域よりも小さいか、あるいは外側をトリミングされた曲面がトリミング曲線２によって囲まれる領域よりも大きくすることができる。
【０４２２】
すなわち、図７２に示した格子状に配置された4つの頂点Ｐ、Ｑ，Ｒ，Ｓの内、いずれかの頂点が、有効ならば、図７６に示す様に三角形ポリゴンを生成する。
【０４２３】
図７６（Ａ）は、全ての頂点が有効であり、２つの三角形ポリゴンが生成される。同様にして、図７６（Ｂ）は、３頂点が有効な場合、図７６（Ｃ）は、２頂点が有効な場合であり、それぞれ２つの三角形ポリゴンが生成される。
【０４２４】
図７６（Ｄ）は、図７２に示す格子状に配置された4つの頂点Ｐ、Ｑ，Ｒ，Ｓの内、１つの頂点のみが有効の場合である。この場合は、有効な１個の頂点を含む１つの三角形ポリゴンが生成される。
【０４２５】
このようにポリゴンを生成することによって、トリミング曲線２０を有するセクションには、図７７に示すポリゴンが生成される。この場合は、図７４の例と比較すると、トリミング曲面のトリミングされる領域がトリミング曲線２０によって囲まれる領域よりも小さくすることができる。
【０４２６】
ここで、上記の図６６のトリミング曲線２によるトリミング方法と異なる他のトリミング方法を提案する。
【０４２７】
その第1の方法は、オブジェクトの２次元（２Ｄ）テクスチャ・データに対して、２Ｄポリゴン（または２Ｄポリライン）で構成したトリミング用の形状を切り取ったり、そのポリゴンに別のテクスチャを与えて貼り付けることによりトリミングを行なう方法（テクスチャによるトリミングと呼ぶ）である。
【０４２８】
更に他の方法は、３次元座標系にトリミング用のオブジェクトを定義して、オブジェクトの各ピクセルをフレームバッファに描画する際に、ピクセルがトリミング用のオブジェクトの内部となったら描画しなかったり、別のテクスチャを与えたりする方法（ボリュームマスクによるトリミングと呼ぶ）である。
【０４２９】
上記のテクスチャによるトリミングの具体的実施例を説明する。
トリミングの対象とするオブジェクト（ＮＵＲＢＳ等の曲面オブジェクトでも、ポリゴン・オブジェクトでも良い）に貼り付ける２Ｄテクスチャ・データを操作することによって、トリミングを行う。
【０４３０】
例えば、ＮＵＲＢＳオブジェクトにｕｖ平面で定義した２Ｄテクスチャを貼り付けると仮定して、その２Ｄテクスチャ上に事前にトリミングしたい形状を（１つまたは複数の）２Ｄポリゴンで構成して描画する。
この時、２Ｄポリゴンを“透明”と考えて描画する部分を切り取っても良いし、２Ｄポリゴン用に別のテクスチャを用意して元のテクスチャと置き換えても良い。
【０４３１】
トリミング形状を（テクスチャパターンではなく）２Ｄポリゴンで構成する利点は、形状をリアルタイムかつインタラクティブに変形しやすいことである。
【０４３２】
あるいは、トリミング形状を、トリミング曲線のサンプリング点同士を接続した２Ｄポリラインで構成し、テクセル毎にポリラインの内／外判定をしてトリミングを行っても良い。こちらの方が描画に時間がかかる代わりに、２Ｄポリゴンを描画するための特別の描画器を必要としない。
【０４３３】
図７８は、テクスチャによるトリミングの実施例を説明する図である。
【０４３４】
図７８（Ａ）に示すように３×３の９パッチからなるＮＵＲＢＳ曲面オブジェクトを想定する。このオブジェクトに図７８（Ｂ）に示すｕｖ平面で定義した２Ｄテクスチャ・データを貼り付ける。
【０４３５】
ここで、このＮＵＲＢＳ曲面オブジェクトにおいてトリミングを行い、図７８（Ｃ）に示すように穴の空いた曲面にすることを考える。
【０４３６】
まず、図７９に示すようにトリミングはｕｖ平面上に定義された２Ｄテクスチャを操作することによって行う。その２Ｄテクスチャにトリミングしたい形状を構成し描画するが、トリミング面の構成には２通りある。
【０４３７】
１つは、図７９（Ａ）に示すようにトリミングしたい形状を２Ｄポリゴンで構成する方法である。図７９（Ａ）に示すような２Ｄポリゴンを透明と考えて、描画する部分を切り取るようにして図７９（Ｃ）に示すように曲面オブジェクトに穴を空ける。
【０４３８】
ここで、２Ｄポリゴンでトリミング領域を構成することによりトリミングの形状をリアルタイムに且つインタラクティブに変形しやすい利点が得られる。
図７９（Ｂ）は、トリミングしたい形状をトリミング曲線のサンプリング点同士を接続した２Ｄポリラインで構成し、テクセルごとにポリラインの内／外判定をする方法である。
【０４３９】
同様にこの場合も２Ｄポリライン内を透明と考えて、描画する部分を切り取るようにして図７９（Ｃ）のように曲面オブジェクトに穴を空ける。
【０４４０】
図８０は、図７９のトリミング方法の応用であって、２Ｄポリゴン（図８０（Ａ））又は、２Ｄポリライン（図８０（Ｂ））用に別のテクスチャを用意して元のテクスチャ置き換えることも可能である（図８０（Ｃ））。
【０４４１】
また、図８１は、トリミング面の外側を透明に置き換えて、トリミング面だけ取り出す方法である。図８１において、図８１（Ａ）は、２Ｄポリゴンによる場合、図８１（Ｂ）は、２Ｄポリラインによる場合であって、ともに図８１（Ｃ）に示すように、外側を透明に置き換えてトリミング面だけ取り出している。
【０４４２】
図８２は、上記のボリュームマスクによるトリミングを説明する図である。
【０４４３】
トリミングの対象とするオブジェクトをピクセル毎にフレームバッファに描画する際、３Ｄ座標系（ローカル座標、ワールド座標、視点座標のどれでもいずれでも良い）に定義したボリュームマスク（トリミング用のオブジェクト）の内部に位置するかどうかを判別する。もし内部（あるいは外部としても良い）であったら描画しなかったり、予め用意した別のテクスチャを与えたり、トリミング用のオブジェクトの方を描画したりすることによってトリミングを行う。
【０４４４】
図８２において、例えば、図８２（Ａ）に示すようなトリミングの対象とするＮＵＲＢＳ曲面オブジェクトを考える。また、図８２（Ｂ）のような３Ｄ座標系に定義されたボリュームマスクがある。図８２（Ｃ）、（Ｄ）は、このオブジェクト（図８２（Ａ））とボリュームマスク（図８２（Ｂ））が重なっている例をそれぞれ正面から見た図、側面から見た図である。
【０４４５】
各ピクセルをフレームバッファに描画する際、オブジェクトがボリュームマスクに囲まれている部分か否かを判断する。
【０４４６】
オブジェクトの点がボリュームマスクの内側か外側かを判別することは、図８３に示す方法により可能である。
【０４４７】
図８３に示すように、視点から見て描画しようとするピクセル（オブジェクトの点）の手前に偶数回ボリュームマスクが横たわっていたら、そのピクセルはボリュームマスクの外側とみなす。奇数回ならボリュームマスクの内側とみなす。図８３（Ａ）、（Ｂ）はいくつかの例を示し、サンプリング点Ｐ1〜Ｐ６の判別結果を示す。図８３（Ａ）の点Ｐ２では、手前に零回ボリュームマスクが横たわっているので、この場合も外側と判断される。
判別が終わったら、ボリュームマスクの内側、外側にそれぞれの方法で描画する。描画方法を図８４に示す。
【０４４８】
図８４（Ａ）では、ボリュームマスクの内側のピクセルを描画しない。これにより、奥の裏面ポリゴンＰＧが描画される。図８４（Ｂ）ではボリュームマスクの内側のピクセルを描画しない。これにより、オブジェクト奥の背景ＢＧが描画される。
【０４４９】
さらに、図８４（Ｃ）では、ボリュームマスクの内側のピクセルを描画しない。そして、予め用意しておいたボリュームマスクの内側の画像を描画する。図８４（Ｄ）では、ボリュームマスクの内側のピクセルに、予め用意しておいた別のテクスチャを張り付け描画する。
【０４５０】
【産業上の利用可能性】
以上実施の形態を図面を参照して説明したように、本発明は、ＮＵＲＢＳ曲面オブジェクトをポリゴンに変換する技術において、ＮＵＲＢＳ曲面オブジェクトのデータを直接処理する。これにより、表示されるＮＵＲＢＳ曲面オブジェクトの現実感（リアリティ）を最適化することを可能とするポリゴンの生成方法及び、これを用いた画像表示装置が提供される。
【０４５１】
本発明によれば、ＮＵＲＢＳモデルをポリゴンに変換する技術において、画面上に表示されるオブジェクトのサイズに応じて、ＮＵＲＢＳモデルが単純化される。このように、視覚的に複雑な形状の判別が難しい程度に、オブジェクトのサイズが小さい場合は、ＮＵＲＢＳモデルの形状を単純化することにより、ＮＵＲＢＳモデルをポリゴンに変換する際の演算量及びポリゴンのデータ量を削減することができる。
【０４５２】
また、ＮＵＲＢＳモデルを形成する曲面パッチの表裏判定又は画面内外判定に基づいて、画面上に表示されない曲面セクションにのみ関わる不要な制御点が除去される。これにより、ＮＵＲＢＳモデルをポリゴンに変換する際のポリゴン数を減らすことができ、変換処理量が低減する。
【０４５３】
さらに、ＮＵＲＢＳモデルの段階で制御点を移動して、ＮＵＲＢＳモデルを変形した場合にも、その変形によって変化した制御点の法線ベクトルを高速に再計算することにより、適切にＮＵＲＢＳモデルのシェーディングを行なうことができる。
【０４５４】
本発明により更にＮＵＲＢＳオブジェクトのスクリーン投影サイズなどを概算して求めるＬＯＤの値によって、ＮＵＲＢＳオブジェクトを複数の曲面リージョンに分割する際の分割数を少なくできる。また、曲面リージョンの各（曲）辺に対応する制御点のグループを結んで得られるスクリーン上でのエリアから、曲面リージョンをポリゴンに分割する際の分割数が算出される。そして、この算出される分割数に従って、ＮＵＲＢＳオブジェクトに対応するｕ，ｖノット列の全有効区間が、ｕ，ｖそれぞれ有効区間のノット数が均等になるように分割される。
【０４５５】
本発明において、更に上記分割の計算に際し、曲面リージョンの頂点を包含できるようなテーブルを用意し、一旦各頂点のｕ，ｖノット値を格納する。そして、格納されたｕ，ｖノットの値からポリゴンの３Ｄ頂点計算を算出するようにする。これにより各頂点に対する重複の頂点計算をなくし計算効率を高めている。また、テーブルに登録された頂点番号から３Ｄ頂点座標を算出した段階で、スクリーンの外側に位置するポリゴンや、視点から裏向きになっているポリゴンの除去が可能である。これにより、その後のアトリビュート（属性）についての頂点のＮＵＲＢＳ演算回数を削減している。
【０４５６】
本発明において、ＮＵＲＢＳ曲面上の点を適切にサンプリングしてポリゴンに分割するために、漸化式であるブレンディング関数の値の演算が行なわれる。そして、このブレンディング関数の値の算出を高速に行なう方法として、ある階数でのブレンディング関数の値を１つ小さい階数でのブレンディング関数の値を基に算出するようにし、パイプライン的に演算を行うことを可能としている。
【０４５７】
これにより、ブレンディング関数の値を演算する演算器として、減算、除算、乗算をパイプライン的に演算する演算器により構成することを可能としている。また、本発明によりトリミングを行なう方法が提供される。パラメトリック曲面のｕ，ｖ方向の頂点数に等しい大きさの２次元配列に対し、多角形に変換されたトリミング曲線による塗りつぶしを行なう。そして、トリミング曲線内の頂点を有効とするか否かの判断により、トリミングを行なう。これにより、トリミングに必要とする演算量が削減される。
【０４５８】
さらにまた、本発明により高速にトリミングを行なう方法が提供される。その方法の１つは、オブジェクトの２Ｄテクスチャ・データに対して、２Ｄポリゴン（または２Ｄポリライン）で構成したトリミング用の形状を切り取ったり、そのポリゴンに別のテクスチャを与えて貼り付けたりすることによりトリミングが可能である。
【０４５９】
別の方法として３Ｄ座標系にトリミング用のオブジェクトを定義して、オブジェクトの各ピクセルをフレームバッファに描画する際に、ピクセルがトリミング用のオブジェクトの内部となったら描画しないようにし、あるいは別のテクスチャを与えることによってもトリミングが可能である。
【図面の簡単な説明】
【図１】  本発明の対象とするＮＵＲＢＳ曲面オブジェクトをポリゴンに変換する技術を用いた画像表示装置の構成例概念ブロック図である。
【図２】  図１の構成の動作を説明する本発明に従うポリゴンデータ生成方法を適用する概略の動作フロー図である。
【図３】  オブジェクトがディスプレィ画面に投影された時の画面に占める面積の割合を、概算値Ｓｃとして求める説明図である。
【図４】図３の説明図を任意の角度θの場合に、一般化した図である。
【図５】  オブジェクトの画面占有面積の概算値ＳｃとＬＯＤの対応関係の一例を示す図である。
【図６】  ＬＯＤと、ｕ，ｖの分割数の対応関係の一例を示すテーブルである。
【図７】  オブジェクトの一例を示す図である。
【図８】  本発明の画像表示装置の実施例構成図である。
【図９】  ポリゴンへの分割数を決めるためのデータとして形成されたテーブルを示す図である。
【図１０】  ポリゴンの頂点座標計算動作フローを示す図である。
【図１１】  Ｂスプライン演算器２０３の動作フローを示す図である。
【図１２】  パラメータ変数及び、演算方法を示す図である。
【図１３】  属性データの省略について、説明する図である。
【図１４】  図１３のＮＵＲＢＳ曲面を展開して示す図である。
【図１５】  ＮＵＲＢＳモデルを単純化する第一の方法を説明するための図である。
【図１６】  ４×４階のＮＵＲＢＳ曲面の階数を下げる例を示す図である。
【図１７】  式（３）で点Ｐの計算に必要なブレンディング関数Ｍを示した図である。
【図１８】  単純化前のＮＵＲＢＳモデルの階数が４階であるときのＬＯＤと階数との対応テーブルの例を示す図である。
【図１９】  第一の方法の別の方法を説明するための図である。
【図２０】  第一の方法の別の方法におけるＬＯＤと階数との対応テーブルの例を示す図である。
【図２１】  ４×４階のＮＵＲＢＳ曲面を３×３階のＮＵＲＢＳ曲面に単純化する例を示す図である。
【図２２】  制御点のウエイトを平均化する方法を説明するための図である。
【図２３】  ３×３階のＮＵＲＢＳ曲面を２×２階のＮＵＲＢＳ曲面に単純化する例を示す図である。
【図２４】  単純化前のＮＵＲＢＳモデルを定義する制御点の数が７×７つであって、階数が４階であるときの、ＬＯＤに対応する制御点の数と階数の対応テーブルの例を示す図である。
【図２５】  図２４のテーブルに対応するＮＵＲＢＳモデルの形状及び制御点マトリクスの状態を模式的に表した図である。
【図２６】  制御点８×７ヶからなる４×４階の球体のＮＵＲＢＳモデルを説明する図である。
【図２７】  図２６のＮＵＲＢＳモデルを模式的に展開した図である。
【図２８】  曲面パッチの表裏判定方法の原理を説明するための図である。
【図２９】  各制御点の法線ベクトルの向きの表裏分布を示す図である。
【図３０】  表裏判定された曲面パッチを示す図である。
【図３１】  制御点８×７ヶからなる４×４階の球体のＮＵＲＢＳモデルを説明する図である。
【図３２】  図３１のＮＵＲＢＳモデルを模式的に展開した図である。
【図３３】  制御点を線分で接続した図である。
【図３４】  曲面パッチのスクリーン内外判定方法を説明するための図である。
【図３５】  １つの曲面パッチが画面を覆う場合を示す図である。
【図３６】  制御点８×７ヶからなる４×４階の球体のＮＵＲＢＳモデルを説明する図である。
【図３７】  図３６のＮＵＲＢＳモデルを模式的に展開した図である。
【図３８】  法線ベクトル計算方法を説明するための図である。
【図３９】  制御点Ｑlの新しい法線ベクトルを求める場合に想定される制御点Ｑlを頂点とする４つの四角形を示す図である。
【図４０】  隣り合う複数の制御点を同時に移動する場合の例を示す図である。
【図４１】  ４つのリージョン００〜１１に分割されるＮＵＲＢＳオブジェクトを説明する図である。
【図４２】  図４１のオブジェクトの区切られる区間Ａに影響を与える制御点に対する制御点マトリクスを示す図である。
【図４３】  図４２に示す考え方を応用して示される、辺に影響を与える制御点を説明する図である。
【図４４】  図４１のＮＵＲＢＳオブジェクトの曲面リージョン００の各（曲）辺に影響を与える制御点を説明する図である。
【図４５】  曲面リージョンの各（曲）辺に対応する制御点のグループを選び出し、それらの制御点をスクリーン座標に変換することを説明する図である。
【図４６】  各４辺形の面積を求める計算方法を説明する図である。
【図４７】  ＬＯＤ（Leｖel Of Detail）によって対象とする制御点の数を変える例を説明する図である。
【図４８】  ｕ，ｖノット区間の分割を説明する図である。
【図４９】  ポリゴンの３角形ストリップ及び３角形ファンを説明する図である。
【図５０】  比較的平坦な部分と曲率の高い部分を持つ折りたたみ図形に対する処理を説明する図である。
【図５１】  図５１は、ＬＯＤの値によって直接ポリゴン分割数を決めた場合と、曲面リージョンにしてからポリゴン分割数を決めた場合を比較して示す図である。
【図５２】  曲面パッチを３角形ポリゴンに分割する手順を説明する図である。
【図５３】  曲面パッチの任意の１（曲）辺の選択によるポリゴン分割数ヘの影響を説明する図である。
【図５４】  ３Ｄ頂点座標の計算回数を少なくする例を示す図である。
【図５５】  ポリゴンに分割した時に登録される頂点番号のテーブルを示す図である。
【図５６】  ポリゴンの削除を説明する図である。
【図５７】  Cox-deBoorの漸化式の例を説明する図である。
【図５８】  ５階のナーブス曲線についての演算例である。
【図５９】  図５７で説明した原理に従って行なわれるステップ順を説明する図である。
【図６０】  漸化式を高速に演算するための演算装置を構成する単位演算器の構成例を示す図である。
【図６１】  図６０の演算器構成における除算器の構成例を示す図である。
【図６２】  図６０の単位演算器を含んで構成される漸化式を高速に演算するための演算装置の構成例を説明する図である。
【図６３】  図６２の演算装置の処理手順を示す図である。
【図６４】  多数のパッチの場合の隣り合う各パッチに適用するＢスプライン、ブレンディング関数の特徴を説明する図である。
【図６５】  ４階のブレンディング関数を算出する演算手順を示す図である。
【図６６】  ｕ方向、ｖ方向のパラメトリック曲線１で形成されるＮＵＲＢＳ曲面等のパラメトリック曲面モデルで形成されるパッチの一例を示す図である。
【図６７】  トリミングされたパラメトリック曲面モデルをリアルタイムに描画するためのポリゴン生成処理方法のフロー図である。
【図６８】  パラメトリック曲面モデルを構成するｕおよびｖ方向の頂点数の大きさの２次元配列を示す図である。
【図６９】  トリミングフラグによるトリミング曲線の内部の領域が有効／無効を指示する例を示す図である。
【図７０】  図６８に示す頂点配列に対してトリミング曲線２を線分によって構成される多角形に変換する例を示す図である。
【図７１】  トリミング多角形２０の内部にある頂点の有効／無効の判定の説明の為に、図７０を書き改めた図である。
【図７２】  三角形ポリゴンを形成するための４頂点Ｐ，Ｑ，Ｒ，Ｓを説明する図である。
【図７３】  ４頂点Ｐ，Ｑ，Ｒ，Ｓを分割して、三角形ポリゴンを形成する変数（ｔｙｐｅ）を説明する図である。
【図７４】  図７１に示す例を図７３で説明する変数に従って、三角形ポリゴンを形成する例を示す図である。
【図７５】  有効／無効の判定がされた頂点配列に対するポリゴンの生成の方法を変える手法を採用して、ポリゴンを生成するための動作フローチャートである。
【図７６】  格子状に配置された4つの頂点Ｐ、Ｑ，Ｒ，Ｓの内、いずれかの頂点が、有効ならば、三角形ポリゴンを生成する例を説明する図である。
【図７７】  図７１に示す例を図７５に従いポリゴンを生成した図である。
【図７８】  テクスチャによるトリミングの実施例を説明する図である。
【図７９】  トリミングをｕｖ平面上に定義された２Ｄテクスチャを操作することによって行う方法を説明する図である。
【図８０】  図７９の方法において、異なるテクスチャをトリミング領域に貼り付ける例である。
【図８１】  図７９の方法において、定義したトリミングの部分だけを表示して、それ以外の部分を透明ピクセルとして処理し、表示しない例である。
【図８２】  ボリュームマスクによるトリミングを説明する図である。
【図８３】  オブジェクトの点がボリュームマスクの内側か外側かを判別する方法を説明する図である。
【図８４】  図８３の判別後にボリュームマスクの内側、外側にそれぞれの方法で描画する描画方法を説明する図である。
【図８５】  従来のポリゴンデータを用いた画像表示装置の一般的構成例を説明する図である。
【図８６】  ＮＵＲＢＳ曲面の前提となるＮＵＲＢＳ曲線を説明する図である。
【図８７】  制御点４つ（Q0〜Q3）、４階（従って、三次曲線）によってＮＵＲＢＳ曲線を形成する例を示す図である。
【図８８】  図８７に対応してブレンディング関数を示す図である。
【図８９】  いくつかのセグメントを接続することによって複雑なＮＵＲＢＳ曲線を形成する例を説明する図である。
【図９０】  ＮＵＲＢＳ曲面を説明する図である。
【図１】
0004385524.tif 000010
【図２】
0004385524.tif 000011
【図３】
0004385524.tif 000012
【図４】
0004385524.tif 000013
【図５】
0004385524.tif 000014
【図６】
0004385524.tif 000015
【図７】
0004385524.tif 000016
【図８】
0004385524.tif 000017
【図９】
0004385524.tif 000018
【図１０】
0004385524.tif 000019
【図１１】
0004385524.tif 000020
【図１２】
0004385524.tif 000021
【図１３】
0004385524.tif 000022
【図１４】
0004385524.tif 000023
【図１５】
0004385524.tif 000024
【図１６】
0004385524.tif 000025
【図１７】
0004385524.tif 000026
【図１８】
0004385524.tif 000027
【図１９】
0004385524.tif 000028
【図２０】
0004385524.tif 000029
【図２１】
0004385524.tif 000030
【図２２】
0004385524.tif 000031
【図２３】
0004385524.tif 000032
【図２４】
0004385524.tif 000033
【図２５】
0004385524.tif 000034
【図２６】
0004385524.tif 000035
【図２７】
0004385524.tif 000036
【図２８】
0004385524.tif 000037
【図２９】
0004385524.tif 000038
【図３０】
0004385524.tif 000039
【図３１】
0004385524.tif 000040
【図３２】
0004385524.tif 000041
【図３３】
0004385524.tif 000042
【図３４】
0004385524.tif 000043
【図３５】
0004385524.tif 000044
【図３６】
0004385524.tif 000045
【図３７】
0004385524.tif 000046
【図３８】
0004385524.tif 000047
【図３９】
0004385524.tif 000048
【図４０】
0004385524.tif 000049
【図４１】
0004385524.tif 000050
【図４２】
0004385524.tif 000051
【図４３】
0004385524.tif 000052
【図４４】
0004385524.tif 000053
【図４５】
0004385524.tif 000054
【図４６】
0004385524.tif 000055
【図４７】
0004385524.tif 000056
【図４８】
0004385524.tif 000057
【図４９】
0004385524.tif 000058
【図５０】
0004385524.tif 000059
【図５１】
0004385524.tif 000060
【図５２】
0004385524.tif 000061
【図５２】
0004385524.tif 000062
【図５３】
0004385524.tif 000063
【図５４】
0004385524.tif 000064
【図５５】
0004385524.tif 000065
【図５６】
0004385524.tif 000066
【図５７】
0004385524.tif 000067
【図５８】
0004385524.tif 000068
【図５９】
0004385524.tif 000069
【図６０】
0004385524.tif 000070
【図６１】
0004385524.tif 000071
【図６２】
0004385524.tif 000072
【図６３】
0004385524.tif 000073
【図６４】
0004385524.tif 000074
【図６５】
0004385524.tif 000075
【図６６】
0004385524.tif 000076
【図６７】
0004385524.tif 000077
【図６８】
0004385524.tif 000078
【図６９】
0004385524.tif 000079
【図７０】
0004385524.tif 000080
【図７１】
0004385524.tif 000081
【図７２】
0004385524.tif 000082
【図７３】
0004385524.tif 000083
【図７４】
0004385524.tif 000084
【図７５】
0004385524.tif 000085
【図７６】
0004385524.tif 000086
【図７７】
0004385524.tif 000087
【図７８】
0004385524.tif 000088
【図７９】
0004385524.tif 000089
【図８０】
0004385524.tif 000090
【図８１】
0004385524.tif 000091
【図８２】
0004385524.tif 000092
【図８３】
0004385524.tif 000093
【図８４】
0004385524.tif 000094
【図８５】
0004385524.tif 000095
【図８６】
0004385524.tif 000096
【図８７】
0004385524.tif 000097
【図８８】
0004385524.tif 000098
【図８９】
0004385524.tif 000099
【図９０】
0004385524.tif 000100