(57)【要約】【課題】  テセレーション処理には再帰的な内分演算が必要であり、計算時間がかかり、メモリを消費する。【解決手段】  ピクセルシェーダ３２の内挿演算部３４は、パラメトリック曲面のパッチのバラメータ座標値を補間係数として指定したテクスチャロード命令をテクスチャユニット７０に対して発行し、テクスチャユニット７０からバラメータ座標値にもとづいて補間された内分係数を取得する。さらに、内挿演算部３４は、テクスチャユニット７０から取得した内分係数を新たに補間係数として指定したテクスチャロード命令をテクスチャユニット７０に対して発行し、テクスチャユニット７０から内分係数にもとづいてあらかじめ内分された制御点を取得する。内挿演算部３４は、パラメータ座標値に対応する内分係数にもとづいて、テクスチャユニット７０から取得した制御点を再帰的に内挿演算し、パラメータ座標値に対応するパラメトリック曲面上の点を求める。【選択図】  図６
2006243937.tif 000002
【特許請求の範囲】
【請求項１】
１つのパラメータに対して座標点を対応づけることにより表されるパラメトリック曲線により描画対象物を近似処理する描画処理装置であって、
前記パラメトリック曲線を構成する単位であるセグメントに対して定義される１次元パラメータ座標系におけるパラメータの１次関数で表される内分係数について、前記パラメータの定義域内の２つの点における前記内分係数の代表値の組を保持する係数データ記憶部と、
処理対象のセグメントにおいて指定される前記パラメータの指定値を補間係数として、前記係数データ記憶部に記憶された前記内分係数の代表値の組を線形補間器により補間演算することにより、前記パラメータの指定値に対応する前記内分係数の補間値を算出する補間処理部と、
前記内分係数の補間値にもとづいた比で、当該処理対象のセグメントの形状を決める複数の制御点を内挿演算することにより、当該処理対象のセグメントにおいて前記パラメータの指定値に対応する前記パラメトリック曲線上の頂点座標を算出する細分化処理部とを含むことを特徴とする描画処理装置。
【請求項２】
前記細分化処理部による前記内挿演算は、前記内分係数の補間値にもとづいた比で前記セグメント内の前記複数の制御点を再帰的に内挿する演算であることを特徴とする請求項１に記載の描画処理装置。
【請求項３】
前記セグメントの形状を決める複数の制御点の組をセグメント毎に保持する制御点データ記憶部をさらに含み、
前記補間処理部は、前記処理対象のセグメントに適用すべき前記複数の制御点を前記制御点データ記憶部から取得し、前記内分係数の補間値にもとづいた比で、取得した前記複数の制御点を前記線形補間器によりあらかじめ内挿した上で前記細分化処理部に与え、
前記細分化処理部は、前記内分係数の補間値にもとづいた比で、前記補間処理部により内挿された前記複数の制御点をさらに内挿演算することを特徴とする請求項１または２に記載の描画処理装置。
【請求項４】
前記パラメトリック曲線の節点の間隔が非一様である場合に、前記節点の間隔が異なる節点パターンを隣接セグメントとの接続関係により複数種類に定め、前記係数データ記憶部は、前記複数種類の節点パターンの各々に対応する前記内分係数について、前記パラメータの定義域内の２つの点における前記内分係数の代表値の組を保持し、
前記補間演算部は、前記処理対象のセグメントに適用すべき前記節点パターンの指定を受け、前記パラメータの指定値にもとづいた比で、指定された前記節点パターンに対応する前記内分係数の前記代表値の組を補間演算することにより、前記パラメータの指定値に対応する前記内分係数の補間値を算出することを特徴とする請求項１から３のいずれかに記載の描画処理装置。
【請求項５】
２つのパラメータの組に対して座標点を対応づけることにより表されるパラメトリック曲面により描画対象物を近似処理する描画処理装置であって、
前記パラメトリック曲面を構成する単位であるパッチに対して定義される２次元パラメータ座標系における第１パラメータの１次関数で表される第１内分係数について、前記第１パラメータの定義域内の２つの点における前記第１内分係数の代表値の組を保持する係数データ記憶部と、
処理対象のパッチにおいて指定される前記第１パラメータの指定値を補間係数として、前記係数データ記憶部に記憶された前記第１内分係数の代表値の組を線形補間器により補間演算することにより、前記第１パラメータの指定値に対応する前記第１内分係数の補間値を算出する補間処理部と、
前記第１内分係数の補間値にもとづいた比で、当該処理対象のパッチの形状を決める複数の制御点を前記２次元パラメータ座標系の第１パラメータ軸方向に内挿演算する細分化処理部とを含むことを特徴とする描画処理装置。
【請求項６】
前記係数データ記憶部は、前記２次元パラメータ座標系における第２パラメータの１次関数で表される第２内分係数について、前記第２パラメータの定義域内の２つの点における前記第２内分係数の代表値の組を保持し、
前記補間処理部は、当該処理対象のパッチについて指定される前記第２パラメータの指定値を補間係数として、前記第２内分係数の代表値の組を線形補間器により補間演算することにより、前記第２パラメータの指定値に対応する前記第２内分係数の補間値を算出し、
前記細分化処理部は、前記第２内分係数の補間値にもとづいた比で、前記第１パラメータ軸方向に内挿された前記複数の制御点をさらに前記２次元パラメータ座標系の第２パラメータ軸方向に内挿演算することにより、当該処理対象のパッチにおいて前記２次元パラメータ座標の指定値に対応する前記パラメトリック曲面上の頂点座標を算出することを特徴とする請求項５に記載の描画処理装置。
【請求項７】
テクスチャに関するデータを記憶するテクスチャ記憶部と、
描画処理単位に対して定義されるパラメータ座標の指定値にもとづいて、前記テクスチャ記憶部に記憶された前記テクスチャに関するデータを線形補間器により補間演算することにより、前記パラメータ座標の指定値に対応する前記テクスチャに関する補間データを算出するテクスチャ処理部と、
前記テクスチャに関する補間データを用いて、前記描画処理単位の演算処理を行う描画処理部とを含み、
前記描画処理単位は、１次元パラメータ座標で表されるパラメトリック曲線を構成する単位であるセグメント、または２次元パラメータ座標で表されるパラメトリック曲面を構成する単位であるパッチであり、
前記テクスチャ記憶部は、前記セグメントまたは前記パッチに対して定義されるパラメータ座標に依存する内分係数について、前記パラメータの定義域内の２つの点における前記内分係数の代表値の組を前記テクスチャに関するデータとして保持し、
前記テクスチャ処理部は、処理対象のセグメントまたはパッチについて前記描画処理部により順次指定されるパラメータ座標の指定値を補間係数として、前記内分係数の代表値の組を線形補間器により補間演算することにより、前記パラメータ座標の指定値に対応する前記内分係数の補間値を算出し、
前記描画処理部は、前記内分係数の補間値にもとづいた比で、当該処理対象のセグメントまたはパッチの形状を決める複数の制御点を内挿演算することにより、当該処理対象のセグメントまたはパッチにおいて前記パラメータ座標の指定値に対応する前記パラメトリック曲線またはパラメトリック曲面上の点の座標を順次算出することを特徴とする描画処理装置。
【請求項８】
前記描画処理部による前記内挿演算は、前記内分係数の補間値にもとづいた比で前記セグメントまたはパッチ内の前記複数の制御点を再帰的に内挿する演算であることを特徴とする請求項７に記載の描画処理装置。
【請求項９】
前記テクスチャ記憶部は、前記セグメントまたは前記パッチの形状を決める複数の制御点の組を前記セグメントまたは前記パッチ毎に保持し、
前記テクスチャ処理部は、前記内分係数の補間値を補間係数として、前記処理対象のセグメントまたはパッチに適用すべき前記複数の制御点を前記線形補間器により内挿し、
前記描画処理部は、前記内分係数の補間値にもとづいた比で、前記テクスチャ処理部により内挿された前記複数の制御点をさらに内挿演算することを特徴とする請求項７または８に記載の描画処理装置。
【請求項１０】
テクスチャに関するデータを記憶するテクスチャ記憶部と、
描画処理単位に対して定義されるパラメータ座標の指定値にもとづいて、前記テクスチャ記憶部に記憶された前記テクスチャに関するデータを線形補間器により補間演算することにより、前記パラメータ座標の指定値に対応する前記テクスチャに関する補間データを算出するテクスチャ処理部とを含み、
前記描画処理単位は、１次元パラメータ座標で表されるパラメトリック曲線を構成する単位であるセグメント、または２次元パラメータ座標で表されるパラメトリック曲面を構成する単位であるパッチであり、
前記テクスチャ記憶部は、前記セグメントまたは前記パッチの形状を決める複数の制御点の組を前記セグメントまたは前記パッチ毎に保持し、
前記テクスチャ処理部は、処理対象のセグメントまたはパッチに適用すべき前記複数の制御点の組を前記テクスチャ記憶部から取得して線形補間器により内挿演算することにより、当該処理対象のセグメントまたはパッチにおいて指定される前記パラメータ座標の指定値に対応する前記パラメトリック曲線または前記パラメトリック曲面上の頂点座標を算出することを特徴とするテクスチャ処理装置。
【請求項１１】
前記テクスチャ処理部は、前記線形補間器により内挿された前記複数の制御点を前記線形補間器に再投入することにより、前記セグメント内で前記複数の制御点を再帰的に内挿演算することを特徴とする請求項１０に記載のテクスチャ処理装置。
【請求項１２】
前記テクスチャ記憶部は、前記セグメントまたは前記パッチに対して定義されるパラメータ座標に依存する内分係数について、前記パラメータの定義域内の２つの点における前記内分係数の代表値の組を前記テクスチャに関するデータとして保持し、
前記テクスチャ処理部は、処理対象のセグメントまたはパッチにおいて指定されるパラメータ座標の指定値を補間係数として、前記内分係数の代表値の組を線形補間器により補間演算することにより、前記パラメータ座標の指定値に対応する前記内分係数の補間値を算出し、さらに、前記内分係数の補間値を補間係数として、前記複数の制御点を前記線形補間器により内挿演算することにより、当該処理対象のセグメントまたはパッチにおいて前記パラメータ座標の指定値に対応する前記パラメトリック曲線またはパラメトリック曲面上の点の座標を算出することを特徴とする請求項１０または１１に記載の描画処理装置。
【請求項１３】
パラメトリック曲面の形状を決める制御点の３次元座標値がテクセル値として格納され、パラメトリック曲面の座標系におけるパラメータを指定値とするテクスチャの読み出し命令により隣接する２つの前記制御点の座標値がサンプリングされて、前記指定値に対応する制御点の補間値を計算可能に構成されたことを特徴とするテクスチャのデータ構造。
【請求項１４】
パラメトリック曲面の形状を決める制御点を再帰的に内挿演算する際の内分係数の始値およぶ終値が隣接するテクセル値として格納され、パラメトリック曲面の座標系におけるパラメータを指定値とするテクスチャの読み出し命令により前記内分係数の始値および終値がサンプリングされて、前記指定値に対応する内分係数の補間値を計算可能に構成されたことを特徴とするテクスチャのデータ構造。
【請求項１５】
１つのパラメータに対して座標点を対応づけることにより表されるパラメトリック曲線を折れ線に細分化するテセレーション方法であって、
前記パラメトリック曲線を構成する単位であるセグメントに対して定義される１次元パラメータ座標系におけるパラメータに依存して値が決まる内分係数について、前記パラメータの定義域の両端点における前記内分係数の値を始値および終値としてあらかじめ係数テーブルに格納しておき、処理対象のセグメントにおいて指定される前記パラメータの指定値を補間係数として、前記係数テーブルに格納された前記内分係数の始値および終値を補間することにより、前記パラメータの指定値に対応する前記内分係数の補間値を算出するステップと、
前記内分係数の補間値にもとづいた比で、当該処理対象のセグメントの形状を決める複数の制御点を内挿演算することにより、当該処理対象のセグメントにおいて前記パラメータの指定値に対応する前記パラメトリック曲線上の頂点座標を算出するステップとを含むことを特徴とするテセレーション方法。
【請求項１６】
２つのパラメータの組に対して座標点を対応づけることにより表されるパラメトリック曲面をポリゴンメッシュに細分化するテセレーション方法であって、
前記パラメトリック曲面を構成する単位であるパッチに対して定義される２次元パラメータ座標系における第１パラメータに依存して値が決まる第１内分係数について、前記第１パラメータの定義域の両端点における第１内分係数の値を始値および終値としてあらかじめ係数テーブルに格納しておき、処理対象のパッチにおいて指定される前記第１パラメータの指定値を補間係数として、前記係数テーブルに格納された前記第１内分係数の始値および終値を補間することにより、前記第１パラメータの指定値に対応する前記第１内分係数の補間値を算出するステップと、
前記内分係数の補間値にもとづいた比で、当該処理対象のパッチの形状を決める複数の制御点を前記２次元パラメータ座標系の第１パラメータ軸方向に内挿演算するステップとを含むことを特徴とするテセレーション方法。
【請求項１７】
前記２次元パラメータ座標系における第２パラメータに依存して値が決まる第２内分係数についても、第２パラメータの定義域の両端点における第２内分係数の値を始値および終値としてあらかじめ前記係数テーブルに格納しておき、当該処理対象のパッチにおいて指定される前記第２パラメータの指定値を補間係数として、前記係数テーブルに格納された前記第２内分係数の始値および終値を補間することにより、前記第２パラメータの指定値に対応する前記第２内分係数の補間値を算出するステップと、
前記第２内分係数の補間値にもとづいた比で、前記第１パラメータ軸方向に内挿された前記複数の制御点をさらに前記２次元パラメータ座標系の第２パラメータ軸方向に内挿演算することにより、当該処理対象のパッチにおいて前記２次元パラメータ座標の指定値に対応する前記パラメトリック曲面上の頂点座標を算出するステップとをさらに含むことを特徴とする請求項１６に記載のテセレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は描画データを演算処理する描画処理装置、テクスチャ処理装置、およびテセレーション方法に関する。
【背景技術】
【０００２】
描画オブジェクトの３次元モデルを生成する際、より複雑な形状を表現するために自由曲面を用いることが多い。自由曲面の表現方法の一つとして、ＮＵＲＢＳ曲線またはＮＵＲＢＳ曲面は、数少ない制御点で滑らかな曲線または曲面を表現することができるという利点があり、広く用いられている。ＮＵＲＢＳでは、制御点の他にも、重み、ノットといった形状を操作するためのパラメータが多く、局所的に形状を変化させることが可能である。また、ＮＵＲＢＳは、円弧や直線、放物線等の円錐曲線も統一的に表現できるといった優れた表現能力をもつ。３次元コンピュータグラフィックスでは、ＮＵＲＢＳデータで製作された描画モデルのレンダリング技術が求められている。
【０００３】
ＮＵＲＢＳ曲面やベジェ曲面等のパラメトリック曲面の形式で滑らかに表現されたオブジェクトは、制御点などのパラメータで表現されているため、３次元オブジェクトを３角形などの多角形ポリゴンの集合で表現するポリゴンモデルと比べた場合、データ量が少なくて済む。また、ネットワークゲームのようなアプリケーションにおいては、３次元モデル情報をネットワークで伝送することがあるが、自由曲面によるオブジェクト表現は、データ量が少ないため、ネットワークアプリケーションにも適している。
【０００４】
自由曲面で表された３次元モデルを描画する際には、自由曲面をポリゴンに分割して、レンダリングアルゴリズムを適用して描画演算処理する。自由曲面をポリゴン分割するためには、ＮＵＲＢＳなどで定義されたパラメトリック曲面の方程式において媒介変数の値を所定の間隔で変化させることによりパラメトリック曲面上の頂点を直接求め、これらの点をつなぎ合わせてポリゴンを生成する。これによりパラメトリック曲面が所定の分割数で多数のポリゴンに細分化される。この処理はテセレーション処理と呼ばれる。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
テセレーション処理においてパラメトリック曲面の頂点の座標値を求めるには、パラメトリック曲面の形状を決める制御点に対して演算を繰り返し行う必要がある。このテセレーション処理をソフトウエアで行うと、演算量が多いため、計算時間が相当にかかり、実時間で描画結果を表示することが必要な３次元コンピュータグラフィックスのアプリケーションには、テセレーション処理は向いていない。また、テセレーション処理に必要なデータや中間演算結果を記憶するために大きなメモリ容量が必要であり、テセレーション処理をハードウエアに実装することを難しくしている。
【０００６】
そこで、テセレーション処理の分割数を減らして計算量を減らしたり、制御点数を減らしたり、より簡単な曲線式を使うなど曲面の自由度を制限することで計算量やメモリ量を減らすことが行われるが、その結果、描画対象オブジェクトが粗いポリゴンで表現されることになり、十分な品質でコンピュータグラフィックスの画像を生成することができないという問題が生じる。
【０００７】
本発明はこうした課題に鑑みてなされたものであり、その目的は、テセレーション処理を計算量の面で効率良く行うことのできる描画処理技術を提供することにある。また、別の目的は、テセレーション処理の実行にあたり、メモリ容量の面で有利な描画処理技術を提供することにある。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明のある態様の描画処理装置は、１つのパラメータに対して座標点を対応づけることにより表されるパラメトリック曲線により描画対象物を近似処理する描画処理装置であって、前記パラメトリック曲線を構成する単位であるセグメントに対して定義される１次元パラメータ座標系におけるパラメータの１次関数で表される内分係数について、前記パラメータの定義域内の２つの点における前記内分係数の代表値の組を保持する係数データ記憶部と、処理対象のセグメントにおいて指定される前記パラメータの指定値を補間係数として、前記係数データ記憶部に記憶された前記内分係数の代表値の組を線形補間器により補間演算することにより、前記パラメータの指定値に対応する前記内分係数の補間値を算出する補間処理部と、前記内分係数の補間値にもとづいた比で、当該処理対象のセグメントの形状を決める複数の制御点を内挿演算することにより、当該処理対象のセグメントにおいて前記パラメータの指定値に対応する前記パラメトリック曲線上の頂点座標を算出する細分化処理部とを含む。
【０００９】
本発明の別の態様もまた、描画処理装置である。この装置は、２つのパラメータの組に対して座標点を対応づけることにより表されるパラメトリック曲面により描画対象物を近似処理する描画処理装置であって、前記パラメトリック曲面を構成する単位であるパッチに対して定義される２次元パラメータ座標系における第１パラメータの１次関数で表される第１内分係数について、前記第１パラメータの定義域内の２つの点における前記第１内分係数の代表値の組を保持する係数データ記憶部と、処理対象のパッチにおいて指定される前記第１パラメータの指定値を補間係数として、前記係数データ記憶部に記憶された前記第１内分係数の代表値の組を線形補間器により補間演算することにより、前記第１パラメータの指定値に対応する前記第１内分係数の補間値を算出する補間処理部と、前記第１内分係数の補間値にもとづいた比で、当該処理対象のパッチの形状を決める複数の制御点を前記２次元パラメータ座標系の第１パラメータ軸方向に内挿演算する細分化処理部とを含む。
【００１０】
本発明のさらに別の態様もまた、描画処理装置である。この装置は、テクスチャに関するデータを記憶するテクスチャ記憶部と、描画処理単位に対して定義されるパラメータ座標の指定値にもとづいて、前記テクスチャ記憶部に記憶された前記テクスチャに関するデータを線形補間器により補間演算することにより、前記パラメータ座標の指定値に対応する前記テクスチャに関する補間データを算出するテクスチャ処理部と、前記テクスチャに関する補間データを用いて、前記描画処理単位の演算処理を行う描画処理部とを含む。前記描画処理単位は、１次元パラメータ座標で表されるパラメトリック曲線を構成する単位であるセグメント、または２次元パラメータ座標で表されるパラメトリック曲面を構成する単位であるパッチであり、前記テクスチャ記憶部は、前記セグメントまたは前記パッチに対して定義されるパラメータ座標に依存する内分係数について、前記パラメータの定義域内の２つの点における前記内分係数の代表値の組を前記テクスチャに関するデータとして保持し、前記テクスチャ処理部は、処理対象のセグメントまたはパッチについて前記描画処理部により順次指定されるパラメータ座標の指定値を補間係数として、前記内分係数の代表値の組を線形補間器により補間演算することにより、前記パラメータ座標の指定値に対応する前記内分係数の補間値を算出し、前記描画処理部は、前記内分係数の補間値にもとづいた比で、当該処理対象のセグメントまたはパッチの形状を決める複数の制御点を内挿演算することにより、当該処理対象のセグメントまたはパッチにおいて前記パラメータ座標の指定値に対応する前記パラメトリック曲線またはパラメトリック曲面上の点の座標を順次算出する。
【００１１】
本発明のさらに別の態様は、テクスチャ処理装置である。この装置は、テクスチャに関するデータを記憶するテクスチャ記憶部と、描画処理単位に対して定義されるパラメータ座標の指定値にもとづいて、前記テクスチャ記憶部に記憶された前記テクスチャに関するデータを線形補間器により補間演算することにより、前記パラメータ座標の指定値に対応する前記テクスチャに関する補間データを算出するテクスチャ処理部とを含む。前記描画処理単位は、１次元パラメータ座標で表されるパラメトリック曲線を構成する単位であるセグメント、または２次元パラメータ座標で表されるパラメトリック曲面を構成する単位であるパッチであり、前記テクスチャ記憶部は、前記セグメントまたは前記パッチの形状を決める複数の制御点の組を前記セグメントまたは前記パッチ毎に保持し、前記テクスチャ処理部は、処理対象のセグメントまたはパッチに適用すべき前記複数の制御点の組を前記テクスチャ記憶部から取得して線形補間器により内挿演算することにより、当該処理対象のセグメントまたはパッチにおいて指定される前記パラメータ座標の指定値に対応する前記パラメトリック曲線または前記パラメトリック曲面上の頂点座標を算出する。
【００１２】
本発明のさらに別の態様は、テクスチャのデータ構造である。このテクスチャのデータ構造は、パラメトリック曲面の形状を決める制御点の３次元座標値がテクセル値として格納され、パラメトリック曲面の座標系におけるパラメータを指定値とするテクスチャの読み出し命令により隣接する２つの前記制御点の座標値がサンプリングされて、前記指定値に対応する制御点の補間値を計算可能に構成される。
【００１３】
本発明のさらに別の態様もまた、テクスチャのデータ構造である。このテクスチャのデータ構造は、パラメトリック曲面の形状を決める制御点を再帰的に内挿演算する際の内分係数の始値およぶ終値が隣接するテクセル値として格納され、パラメトリック曲面の座標系におけるパラメータを指定値とするテクスチャの読み出し命令により前記内分係数の始値および終値がサンプリングされて、前記指定値に対応する内分係数の補間値を計算可能に構成される。
【００１４】
本発明のさらに別の態様は、テセレーション方法である。この方法は、１つのパラメータに対して座標点を対応づけることにより表されるパラメトリック曲線を折れ線に細分化するテセレーション方法であって、前記パラメトリック曲線を構成する単位であるセグメントに対して定義される１次元パラメータ座標系におけるパラメータに依存して値が決まる内分係数について、前記パラメータの定義域の両端点における前記内分係数の値を始値および終値としてあらかじめ係数テーブルに格納しておき、処理対象のセグメントにおいて指定される前記パラメータの指定値を補間係数として、前記係数テーブルに格納された前記内分係数の始値および終値を補間することにより、前記パラメータの指定値に対応する前記内分係数の補間値を算出するステップと、前記内分係数の補間値にもとづいた比で、当該処理対象のセグメントの形状を決める複数の制御点を内挿演算することにより、当該処理対象のセグメントにおいて前記パラメータの指定値に対応する前記パラメトリック曲線上の頂点座標を算出するステップとを含む。
【００１５】
本発明のさらに別の態様もまた、テセレーション方法である。この方法は、２つのパラメータの組に対して座標点を対応づけることにより表されるパラメトリック曲面をポリゴンメッシュに細分化するテセレーション方法であって、前記パラメトリック曲面を構成する単位であるパッチに対して定義される２次元パラメータ座標系における第１パラメータに依存して値が決まる第１内分係数について、前記第１パラメータの定義域の両端点における第１内分係数の値を始値および終値としてあらかじめ係数テーブルに格納しておき、処理対象のパッチにおいて指定される前記第１パラメータの指定値を補間係数として、前記係数テーブルに格納された前記第１内分係数の始値および終値を補間することにより、前記第１パラメータの指定値に対応する前記第１内分係数の補間値を算出するステップと、前記内分係数の補間値にもとづいた比で、当該処理対象のパッチの形状を決める複数の制御点を前記２次元パラメータ座標系の第１パラメータ軸方向に内挿演算するステップとを含む。
【００１６】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラム、データ構造などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１７】
本発明によれば、描画対象オブジェクトのテセレーション処理を効率良く行うことができる。
【発明を実施するための最良の形態】
【００１８】
図１は、実施の形態に係る描画処理装置１００の構成図である。描画処理装置１００は、３次元モデル情報にもとづいて２次元画面に表示するための描画データを生成するレンダリング処理を行う。
【００１９】
特に、本実施の形態の描画処理装置１００は、自由曲面を用いてモデル化された描画対象オブジェクトの形状を細かく分割し、幾何学的なプリミティブの集合に変換するテセレーション（Tessellation）処理を行う。まず、描画処理装置１００の構成を一般的な動作とともに説明し、その後、本実施の形態に特有のテセレーション処理に関する動作を説明する。
【００２０】
ラスタライザ１０は、メモリもしくは他のプロセッサや頂点シェーダなどから描画対象となるプリミティブの頂点データを取得し、描画するスクリーンに対応したピクセル情報に変換する。描画プリミティブは、３次元オブジェクトをポリゴンモデルで表した場合の点、線、三角形、四角形などの幾何学図形の描画単位であり、頂点単位で表されるデータである。ラスタライザ１０は、３次元空間上の描画プリミティブを投影変換により描画平面上の図形に変換するビュー変換を行い、さらに、描画平面上の図形を描画平面の水平方向に沿ってスキャンしながら、１列毎に量子化されたピクセルに変換する。
【００２１】
ラスタライザ１０により、描画プリミティブがピクセル展開され、各ピクセルについて、ＲＧＢ３原色で表されるカラー値、透明度を示すアルファ（α）値、奥行きを示すＺ値、テクスチャ属性を参照するためのパラメータ座標であるＵＶ座標値などを含むピクセル情報が算出される。
【００２２】
ラスタライザ１０は、１つ以上のピクセルを含む所定サイズのピクセル集合の単位で上記のラスタライズ処理を行い、ラスタライズ処理後のピクセル集合をバッファリングしながら、ピクセル集合の単位でシェーダユニット３０に順次供給する。ラスタライザ１０からシェーダユニット３０に供給されたピクセル集合は、シェーダユニット３０においてパイプライン処理される。ピクセル集合は、ラスタライザ１０が一度に処理するピクセルをまとめたものであり、ラスタライズ処理の単位であり、また同時に、シェーダユニット３０における描画演算処理の単位にもなっている。
【００２３】
シェーダユニット３０は、非同期動作する複数のピクセルシェーダ３２を含み、それぞれが担当するピクセル集合を処理することでピクセルの描画処理を並列に実行する。各ピクセルシェーダ３２は、ラスタライザ１０からピクセル集合単位で分配されるピクセル情報をもとに、シェーディング処理を行ってピクセルのカラー値を求め、さらに、テクスチャマッピングを行う場合は、テクスチャユニット７０から得られるテクスチャのカラー値を合成して最終的なピクセルのカラー値を算出し、メモリ５０にピクセルデータを書き込む。
【００２４】
テクスチャユニット７０は、各ピクセルシェーダ３２において処理されるピクセルにテクスチャデータをマッピングする処理を行う。ポリゴン面上のピクセルにマッピングされるテクスチャの位置は２次元パラメータ座標であるＵＶ座標系で表される。テクスチャユニット７０は、各ピクセルシェーダ３２からピクセルにマッピングされるテクスチャの座標値（ｕ，ｖ）を取得し、座標値（ｕ，ｖ）に対応するカラー値を補間して、各ピクセルシェーダ３２にその補間値を供給する。
【００２５】
ピクセルシェーダ３２は、さらに、メモリ５０に保持された描画データに対して、フォギング、アルファブレンディング等の処理を行い、最終的なピクセルのカラー値を求め、メモリ５０のピクセルデータを更新する。
【００２６】
メモリ５０は、各ピクセルシェーダ３２により生成されたピクセルデータをスクリーン座標で格納するフレームバッファとして機能する領域をもつ。フレームバッファに格納されたピクセルデータは、最終描画画像であることも、シェーディング処理過程にある中間画像であることもある。フレームバッファに記憶されたピクセルデータは、表示装置に出力されて表示される。
【００２７】
次に、描画処理装置１００の各構成によるテセレーション処理に関する動作を説明する。
【００２８】
ラスタライザ１０は、正方形の描画プリミティブ（以下、単に正方形プリミティブという）の入力を受ける。正方形プリミティブは、正方形の対角線の両端である２つの頂点をパラメータとしてもつ。ラスタライザ１０は、正方形プリミティブをピクセルデータに変換するラスタライズ処理の機能を利用して、正方形プリミティブ内でパラメトリック曲面の最小構成単位であるパッチに対して定義される２次元パラメータ座標値（ｕ，ｖ）をピクセル単位で生成する。
【００２９】
また、ラスタライザ１０は、パラメトリック曲面のパッチの形状を決める制御点データを参照するためのインデックスと、パッチのｕ、ｖそれぞれの方向で使用される後述のノットパターンのタイプを決め、パッチ内の２次元パラメータ座標値（ｕ、ｖ）とともにパッチのパラメータ情報としてシェーダユニット３０のピクセルシェーダ３２に供給する。
【００３０】
図２（ａ）、（ｂ）は、ラスタライザ１０に入力される正方形プリミティブを説明する図である。図２（ａ）は、ラスタライザ１０に入力される均等なサイズの正方形プリミティブ２００〜２０３を示す。各正方形プリミティブ２００〜２０３は、縦横４ピクセルのピクセル集合を縦方向、横方向にそれぞれ４つずつ並べたものであり、縦横１６ピクセル、合計２５６ピクセルの描画領域をもつ。この場合、ラスタライザ１０は、正方形プリミティブを縦横１６分割、合計２５６分割で細分化して、２次元パラメータ座標値を順次生成する。
【００３１】
図２（ａ）のように、ラスタライザ１０が、描画対象オブジェクトに対して同一サイズの正方形プリミティブ２００〜２０３の入力を受ける場合、描画対象オブジェクトの自由曲面の分割粒度は一定であり、自由曲面は均等に細分化される。描画オブジェクトの自由曲面を細分化する粒度を状況に応じて可変にする適応型テセレーション（Adaptive Tessellation）を行う場合は、正方形プリミティブのサイズを変えてラスタライザ１０に入力すればよい。
【００３２】
図２（ｂ）は、適応型テセレーションを行う場合に、ラスタライザ１０に入力される正方形プリミティブを説明する図である。縦横４ピクセルのピクセル集合を縦方向、横方向にそれぞれ２つずつ並べた正方形プリミティブ２１０、２１１は、縦横８ピクセル、合計６４ピクセルの描画領域をもつ。この場合、ラスタライザ１０は、正方形プリミティブを縦横８分割、合計６４分割で細分化して、２次元パラメータ座標値を順次生成する。
【００３３】
これに対して、縦横４ピクセルのピクセル集合を縦方向、横方向にそれぞれ５つずつ並べた正方形プリミティブ２１２は、縦横２０ピクセル、合計４００ピクセルの描画領域をもつ。この場合、ラスタライザ１０は、正方形プリミティブを縦横２０分割、合計４００分割で細分化して、２次元パラメータ座標値を順次生成する。
【００３４】
縦横４ピクセルのピクセル集合を縦方向、横方向にそれぞれ４つずつ並べた正方形プリミティブ２１３は、図２（ａ）で説明したように、縦横１６分割、合計２５６分割で細分化される。
【００３５】
このように正方形プリミティブのサイズが大きくなるほど、分割数が増え、同じ描画領域でもより細かく細分化される。たとえば、描画オブジェクトを描画する際の詳細度が高いほど、正方形プリミティブのサイズを大きくして分割数を増やしたり、パッチの法線方向と視線方向との関係に応じて正方形プリミティブのサイズを可変にして分割数を変えることができる。また、複雑な形状の描画オブジェクトの場合には、正方形プリミティブのサイズを大きくして分割数を増やすことができる。このように、正方形プリミティブのサイズを状況に応じて可変にすることで適応型テセレーション処理が可能になる。
【００３６】
さらに、正方形プリミティブを指定するときのパラメータを調整すれば、本来の正方形領域よりも狭い範囲を指定してテセレーション処理を実行することも可能である。正方形プリミティブに対して、領域の対角線の両端の頂点を指定するパラメータを調整することで、描画範囲を限定することが可能である。正方形領域の対角線の両端の頂点パラメータは、（０，０）および（１，１）であるが、これを０〜１の間の値にすることで、描画範囲を狭めることができる。符号２１４で示すように、頂点（０．２５，０．３）、（０．５，０．９）を指定することで、これらを結ぶ対角線で規定される長方形領域に正方形プリミティブの描画範囲を狭めることができる。このように描画領域を定める対角線の両端の頂点パラメータを調整することで、正方形プリミティブをラスタライザ１０に入力した場合でも、長方形の形状に描画領域を制限することで、任意の矩形領域の曲面を生成することができる。
【００３７】
テセレーション処理を行うためのシェーダユニット３０とテクスチャユニット７０の具体的な構成と動作について説明する前に、まず、テセレーション処理の大まかな手順を説明する。
【００３８】
３次元オブジェクトを表現する際の自由曲面の種類としては、ベジエ（Bezier）曲面やＢスプライン（B-Spline）曲面などいくつかの種類があり、より一般的な自由曲面の表現形式としてＮＵＲＢＳ（Non Uniform Rational B-Spline）曲面が広く用いられている。これらの曲面は、２つのパラメータｕ、ｖを媒介変数としたパラメトリック曲面であり、２つの媒介変数（ｕ，ｖ）に対して曲面上の点（ｘ，ｙ，ｚ）が連続的に定義される。パラメトリック曲面でオブジェクトをモデリングする際、パッチと呼ばれるパラメトリック曲面の最小構成単位をつなぎ合わせて１つの曲面を表現する。
【００３９】
本実施の形態では、パラメトリック曲面として設計の自由度が高いＮＵＲＢＳ曲面の場合を説明するが、他の種類の自由曲面の場合も、同様のテセレーション処理が可能である。
【００４０】
図３は、パラメトリック曲面の最小構成単位であるパッチを説明する図である。パッチは０≦ｕ≦１、０≦ｖ≦１の範囲で定義され、４階のＢスプライン曲面の場合は、制御点はｕ方向に４個、ｖ方向に４個設けられ、合計１６個の制御点Ｐ０〜Ｐ１５をもつ。このパラメトリック曲面をｕ方向またはｖ方向で見た場合、パラメータｕまたはｖを媒介変数としたパラメトリック曲線と見ることができる。パラメトリック曲線の最小単位はセグメントと呼ばれ、４階のＢスプライン曲線の場合、４個の制御点をもつ。
【００４１】
テセレーション処理は、パラメトリック曲面のパッチ毎に２次元パラメータ座標値（ｕ，ｖ）を所定の間隔で変化させて、各２次元パラメータ座標値（ｕ，ｖ）に対応するパラメトリック曲面上の点をプリミティブの頂点座標として求める処理である。このテセレーション処理により、描画対象オブジェクトの自由曲面がパッチ毎にメッシュ状に細分化され、小さいプリミティブの集合に変換される。
【００４２】
２次元パラメータ座標値（ｕ，ｖ）に対応するパラメトリック曲面上の点を求めるには、まず、パラメトリック曲面をｕ方向に見て、第１パラメータ座標値ｕに対応するパラメトリック曲線上の点を求め、次に、それをｖ方向に見て、第２パラメータ座標値ｖに対応するパラメトリック曲線上の点を求める。
【００４３】
図４（ａ）〜（ｃ）は、パラメトリック曲線の上の点を求める手順を説明する図である。ここでは、ｕ方向、ｖ方向のいずれでも手順は同じであるから、２次元パラメータ座標系の第１パラメータｕ、第２パラメータｖを区別せずに、パラメータをｔとおいて説明する。
【００４４】
パラメトリック曲線のセグメント内でパラメータｔに対応する点は、セグメントの形状を決める４つの制御点Ｐ０〜Ｐ３をパラメータｔに依存する内分係数で再帰的に３回内挿演算することにより求められる。
【００４５】
１回目の内挿演算では、図４（ａ）に示すように、第１、第２の制御点Ｐ０、Ｐ１をパラメータｔに対応する内分係数ａ００にもとづく比ａ００：（１−ａ００）で内分する点Ｐ０１を求める。同様に、第２、第３の制御点Ｐ１、Ｐ２を内分係数ａ１０にもとづく比ａ１０：（１−ａ１０）で内分する点Ｐ１２を求め、第３、第４の制御点Ｐ２、Ｐ３を内分係数ａ２０にもとづく比ａ２０：（１−ａ２０）で内分する点Ｐ２３を求める。１回目の内挿演算に用いる３つの内分係数ａ００、ａ１０、ａ２０を第１内分係数と呼ぶ。
【００４６】
次に、２回目の内挿演算では、図４（ｂ）に示すように、図４（ａ）で求めた第１、第２の内分点Ｐ０１、Ｐ１２をパラメータｔに対応する内分係数ａ０１にもとづく比ａ０１：（１−ａ０１）でさらに内分する点Ｐ０１２を求める。同様に、図４（ａ）で求めた第２、第３の内分点Ｐ１２、Ｐ２３をパラメータｔに対応する内分係数ａ１１にもとづく比ａ１１：（１−ａ１１）でさらに内分する点Ｐ１２３を求める。２回目の内挿演算に用いる２つの内分係数ａ０１、ａ１１を第２内分係数と呼ぶ。
【００４７】
最後に、３回目の内挿演算では、図４（ｃ）に示すように、図４（ｂ）で求めた第１の内分点Ｐ０１２と第２の内分点Ｐ１２３をパラメータｔに対応する内分係数ａ０２にもとづく比ａ０２：（１−ａ０２）で内分する点Ｐ０１２３を求める。３回目の内挿演算に用いる１つの内分係数ａ０２を第３内分係数と呼ぶ。
【００４８】
このようにして４つの制御点を再帰的に３回内分することで得られた点Ｐ０１２３は、パラメータｔに対応するパラメトリック曲線上の点になっている。
【００４９】
図５は、４つの制御点Ｐ０〜Ｐ３の内分を繰り返すことにより、パラメトリック曲線上の点Ｐ０１２３が求められる様子を示す図である。４つの制御点Ｐ０〜Ｐ３をパラメータｔに対応する第１内分係数で内分した点がＰ０１（ｔ）、Ｐ１２（ｔ）、Ｐ２３（ｔ）であり、それをさらにパラメータｔに対応する第２内分係数で内分した点がＰ０１２（ｔ）、Ｐ１２３（ｔ）であり、それをさらにパラメータｔに対応する第３内分係数で内分した点がＰ０１２３（ｔ）である。パラメータｔを変化させることにより、Ｐ０１２３（ｔ）の描く軌跡がパラメトリック曲線Ｌである。なお、点Ｐ０１２３（ｔ）におけるパラメトリック曲線Ｌの接線は、２点Ｐ０１２（ｔ）、Ｐ１２３（ｔ）の差分ベクトルで与えられる。
【００５０】
テセレーション処理は、パラメータｔを所定の間隔で小刻みに変化させながら、パラメータｔに対応する内分係数を用いて４つの制御点を再帰的に３回内分して点Ｐ０１２３（ｔ）を求めることで行われる。所定の間隔で変化するパラメータｔに対する点Ｐ０１２３（ｔ）を順に折れ線でつなげていけば、１セグメント内でパラメトリック曲線が折れ線近似される。これをｕ方向、ｖ方向に行うことで、１パッチ内でパラメトリック曲面がメッシュ状に細分化され、所定の分割数のテセレーション結果が得られる。
【００５１】
図６は、テセレーション処理を行うためのピクセルシェーダ３２およびテクスチャユニット７０の構成を示す図である。
【００５２】
ピクセルシェーダ３２は、ラスタライザ１０から分配された正方形プリミティブに対してパラメトリック曲面のパッチを当てはめ、パッチ単位で描画対象オブジェクトの形状をメッシュ状に細分化する処理を行う。ピクセルシェーダ３２は、ラスタライザ１０により生成された２次元パラメータ座標値（ｕ，ｖ）に対応するパラメトリック曲面上の点をメッシュの頂点座標として求めることにより、パッチをメッシュに分割する。この計算を行うために、ピクセルシェーダ３２は、パッチの形状を決める制御点と、制御点を再帰的に内挿演算するときの内分係数のデータを必要とする。
【００５３】
後に詳しく説明するように、ｕ方向に制御点を内挿するときに用いられる内分係数は、２次元パラメータ座標系の第１パラメータｕの１次式で表され、ｖ方向に制御点を内挿するときに用いられる内分係数は、２次元パラメータ座標系の第２パラメータｖの１次式で表される。
【００５４】
第１パラメータｕ、第２パラメータｖを区別せずにｔとおくと、パラメータｔに対応する内分係数の値は、０≦ｔ≦１の区間の両端点における値、すなわちｔ＝０のときの始値と、ｔ＝１のときの終値さえ与えられれば、始値と終値をパラメータｔにもとづく比ｔ：（１−ｔ）で内分することにより、任意のｔに対する内分係数の値を求めることができる。
【００５５】
この性質は、テクスチャユニット７０の線形補間演算機能と親和性がある。内分係数の始値および終値をテクスチャデータとして扱い、テクスチャユニット７０がパラメータｔを補間係数として内分係数の始値および終値を線形補間することにすれば、任意のパラメータｔに対する内分係数は、テクスチャの補間演算を利用して取得することができる。これは、いろいろなパラメータｔの値に対する内分係数を保持したテーブルを用意したり、１次式にもとづいて内分係数を計算する方法に比べて、メモリ容量、計算コストの面で有利である。そこで、本実施の形態では、内分係数はその始値と終値だけがテクスチャデータとして内分係数テクスチャ５４に格納されている。
【００５６】
また、ピクセルシェーダ３２は、パッチの形状を決める制御点を内分係数にもとづく比で再帰的に内挿演算するが、この内挿演算も、テクスチャユニット７０の線形補間演算機能との親和性がある。制御点の座標値をテクスチャデータとして扱い、テクスチャユニット７０が内分係数を補間係数として２つの制御点を線形補間することにすれば、制御点を内分係数にもとづいて内分した点は、テクスチャの補間演算を利用して取得することができる。そこで、本実施の形態では、制御点の再帰的な内挿演算の内、１回目の内挿演算をテクスチャユニット７０の線形補間機能を用いて実行する。そのために、制御点データは、テクスチャデータとして制御点テクスチャ５２に格納されている。
【００５７】
ピクセルシェーダ３２の内挿演算部３４は、パラメトリック曲面のパッチの２次元バラメータ座標値（ｕ，ｖ）を補間係数として指定したテクスチャロード命令をテクスチャユニット７０に対して発行し、テクスチャユニット７０から２次元バラメータ座標値（ｕ，ｖ）にもとづいて補間された内分係数を取得する。内挿演算部３４は、このテクスチャロード命令の発行の際、当該パッチに適用すべきノットパターンのタイプも指定する。このノットパターンのタイプは、テクスチャユニット７０が内分係数テクスチャ５４の参照行を決定するために必要となる。
【００５８】
さらに、内挿演算部３４は、テクスチャユニット７０から取得した内分係数を新たに補間係数として指定したテクスチャロード命令をテクスチャユニット７０に対して発行し、テクスチャユニット７０から内分係数にもとづいて補間された制御点を取得する。内挿演算部３４は、このテクスチャロード命令の発行の際、当該パッチに適用すべき制御点データのインデックスも指定する。このインデックスは、テクスチャユニット７０が制御点テクスチャ５２の参照行を決定するために必要となる。
【００５９】
内挿演算部３４は、２次元パラメータ座標値（ｕ，ｖ）に対応する内分係数にもとづいて、テクスチャユニット７０から取得した制御点を再帰的に内挿演算し、２次元パラメータ座標値（ｕ，ｖ）に対応するパラメトリック曲面上の点をメッシュの頂点座標として求める。再帰的な内挿演算を可能にするため、内挿演算部３４は、中間結果を保持するレジスタをもち、レジスタに演算の中間結果をいったん書き出し、レジスタに保持された中間結果を読み込んで中間結果に対するさらなる演算を行う。
【００６０】
頂点データ出力部３６は、内挿演算部３４により求められたパラメトリック曲面のメッシュの頂点座標値を２次元パラメータ座標値（ｕ，ｖ）に対応づけてメモリ５０に書き出す。内挿演算部３４が２次元パラメータ座標値（ｕ，ｖ）を所定の間隔で変化させながら、パラメトリック曲面のメッシュの頂点座標値を求め、頂点データ出力部３６がその頂点座標値を２次元パラメータ座標値（ｕ，ｖ）に対応づけてメモリ５０に書き出すことで、メモリ５０にはパッチ内のパラメトリック曲面をメッシュ状に細分化したデータがテセレーションデータ５６として形成される。
【００６１】
テクスチャユニット７０は、ピクセルシェーダ３２から２次元パラメータ座標値（ｕ，ｖ）を補間係数として受け取り、内分係数テクスチャ５４から読み出した内分係数をその補間係数のもとで補間した値をピクセルシェーダ３２に与える。また、テクスチャユニット７０は、ピクセルシェーダ３２から内分係数を補間係数として受け取り、制御点テクスチャ５２から読み出した制御点をその補間係数のもとで補間した値をピクセルシェーダ３２に与える。
【００６２】
テクスチャユニット７０が参照する制御点テクスチャ５２および内分係数テクスチャ５４は、それぞれテクスチャの形式で制御点と内分係数を格納したものであり、テクスチャユニット７０は、テクスチャデータからテクセル値を読み出して線形補間器により線形補間する機能を利用して、制御点と内分係数を指定された補間係数で線形補間する。
【００６３】
図７は、制御点テクスチャ５２のデータ構造を説明する図である。制御点テクスチャ５２は、パラメトリック曲面のパッチの形状を決める１６個の制御点をテクセル値として行単位で格納したデータ構造をもつ。各行にはＰ０〜Ｐ１５までの１６個の制御点の３次元座標値（ｘ，ｙ，ｚ）が格納されている。横方向１列の１６個の制御点Ｐ０〜Ｐ１５が１つのパッチ曲面分の制御点として利用される。縦方向には描画対象オブジェクトのパッチ曲面数分の制御点データが用意されている。
【００６４】
テクスチャは、通常はＲＧＢ３色のカラー値からなるテクセル値を格納するものであるが、ここでは、テクセルのＲ、Ｇ、Ｂ値の代わりに制御点の座標値ｘ，ｙ，ｚをそれぞれ格納することで、テクスチャのデータ構造を制御点の３次元座標の格納に利用している。  
【００６５】
テクスチャユニット７０は、制御点テクスチャ５２の行番号ｓと制御点番号ｉ（ｉ＝０，１…，１５）にもとづく参照アドレスを指定することにより、制御点テクスチャ５２から制御点の３次元座標値を読み出す。
【００６６】
図８は、内分係数テクスチャ５４のデータ構造を説明する図である。内分係数テクスチャ５４は、ＮＵＲＢＳ曲面のパッチのノットパターン毎に、制御点の再帰的な内挿演算に用いる第１、第２および第３内分係数について、その始値および終値をテクセル値として格納したデータ構造をもつ。
【００６７】
後に詳しく説明するように、本実施の形態では、ＮＵＲＢＳ曲面の隣接するパッチの滑らかな接続性を考慮してノットパターンは９種類に限定されている。内分係数テクスチャ５４の各行は、ノットパターンのタイプ＃１〜＃９に対応しており、各行には、そのノットパターンのタイプの内分係数が４つのテクセルの形式で格納されている。
【００６８】
第１テクセルには、１回目の内挿演算に用いる第１内分係数ａ００、ａ１０、ａ２０の始値（ａ００（０），ａ１０（０），ａ２０（０））がテクセル値として、カラー値（Ｒ，Ｇ，Ｂ）の代わりに格納されている。第２テクセルには、１回目の内挿演算に用いる第１内分係数ａ００、ａ１０、ａ２０の終値（ａ００（１），ａ１０（１），ａ２０（１））が格納されている。
【００６９】
第３テクセルには、２回目の内挿演算に用いる第２内分係数ａ０１、ａ１１の始値および３回目の内挿演算に用いる第３内分係数ａ０２の始値を組み合わせた（ａ０１（０），ａ１１（０），ａ０２（０））がテクセル値として、カラー値（Ｒ，Ｇ，Ｂ）の代わりに格納されている。第４テクセルには、２回目の内挿演算に用いる第２内分係数ａ０１、ａ１１の終値および３回目の内挿演算に用いる第３内分係数ａ０２の終値を組み合わせた（ａ０１（１），ａ１１（１），ａ０２（１））が格納されている。
【００７０】
テクスチャユニット７０は、縦方向のノットパターンのタイプと横方向のテクセル番号にもとづく参照アドレスを指定することにより、内分係数テクスチャ５４から内分係数を読み出す。
【００７１】
図６に戻り、テクスチャユニット７０のアドレス生成部７４および線形補間部７２が、内分係数テクスチャ５４および制御点テクスチャ５２をテクスチャデータとして参照して、内分係数および制御点を線形補間する動作について説明する。
【００７２】
アドレス生成部７４は、ピクセルシェーダ３２の内挿演算部３４から指定されたノットパターンのタイプと２次元パラメータ座標値（ｕ，ｖ）にもとづいて、内分係数テクスチャ５４を参照するための参照アドレスを生成し、内分係数テクスチャ５４から参照アドレスに対応する内分係数の始値および終値を読み出し、線形補間部７２に入力として与える。
【００７３】
線形補間部７２は、加算器、差分器、乗算器、および補間係数を保持するレジスタを有する線形補間器である。線形補間器には、第１入力値Ｘ、第２入力値Ｙ、および補間係数ａが入力される。差分器は、第２入力値Ｙから第１入力値Ｘを引き算して、２入力値の差分Ｙ−Ｘを計算し、乗算器に与える。乗算器は、差分器から入力された差分Ｙ−Ｘに補間係数ａを乗じた値ａ（Ｙ−Ｘ）を計算し、加算器に与える。加算器は、乗算器から入力された乗算結果ａ（Ｙ−Ｘ）に第１入力値Ｘを加算した値ａ（Ｙ−Ｘ）＋Ｘを計算し、線形補間器の最終的な出力値として出力する。
【００７４】
線形補間部７２の出力値Ｚは、Ｚ＝ａ（Ｙ−Ｘ）＋Ｘ＝（１−ａ）Ｘ＋ａＹと変形できるため、第１入力値Ｘと第２入力値Ｙを補間係数ａにもとづくａ：（１−ａ）の比で内分した値である。
【００７５】
線形補間部７２は、内挿演算部３４から指定されたパラメータ座標ｕ、ｖのそれぞれを補間係数として、アドレス生成部７４により読み出された内分係数の始値および終値を線形補間し、内分係数の補間値を内挿演算部３４に与える。具体的には、線形補間部７２は、パラメータｔを補間係数として、内分係数ａｉｊの始値ａｉｊ（０）と終値ａｉｊ（１）を線形補間器により補間した値ａｉｊ（ｔ）＝（１−ｔ）・ａｉｊ（０）＋ｔ・ａｉｊ（１）を出力する。
【００７６】
さらに、内挿演算部３４は、内分係数の補間値を線形補間部７２から受け取ると、受け取った内分係数の補間値を新たに補間係数として指定してテクスチャユニット７０に内分係数の補間値にもとづく比で内分された制御点を要求する。内挿演算部３４は、通常は２次元パラメータ座標値（ｕ，ｖ）を補間係数として指定して、テクスチャユニット７０に対して、２次元パラメータ座標値（ｕ，ｖ）にもとづいて補間されたテクセル値を要求するが、ここでは同じインタフェースを利用して（ｕ，ｖ）値の代わりに、内分係数を補間係数として指定する。
【００７７】
アドレス生成部７４は、内挿演算部３４から指定された制御点データの参照行と補間係数にもとづいて、テクスチャを参照するための参照アドレスを生成し、制御点テクスチャ５２から参照アドレスに対応する２つの制御点の値を読み出して、線形補間部７２に入力として与える。
【００７８】
線形補間部７２は、内挿演算部３４から指定された内分係数を補間係数として、アドレス生成部７４により読み出された２つの制御点を線形補間し、制御点の補間値を内挿演算部３４に与える。具体的には、線形補間部７２は、パラメータｔに対応する内分係数ａｉｊ（ｔ）を補間係数として、第１の制御点ＰＡの座標値（ｘＡ，ｙＡ，ｚＡ）と第２の制御点ＰＢの座標値（ｘＢ，ｙＢ，ｚＢ）を線形補間器により補間した座標値（ｘＡＢ，ｙＡＢ，ｚＡＢ）＝（１−ａｉｊ（ｔ））・（ｘＡ，ｙＡ，ｚＡ）＋ａｉｊ（ｔ）・（ｘＢ，ｙＢ，ｚＢ）を出力する。
【００７９】
図９は、ピクセルシェーダ３２およびテクスチャユニット７０によるテセレーション処理の手順を説明するフローチャートである。
【００８０】
ピクセルシェーダ３２は、ラスタライザ１０から、処理対象のパッチのパラメータ情報として、当該パッチで使用される制御点データの参照行を指定するデータ（Ｓ１０）、パッチのｕ、ｖそれぞれの方向で使用されるノットパターンのタイプを指定するデータ（Ｓ１２）、およびパッチ内で所定の間隔で分割された２次元パラメータ座標値（ｕ、ｖ）を指定するデータ（Ｓ１４）をそれぞれ受け取る。
【００８１】
ピクセルシェーダ３２の内挿演算部３４は、パラメータｕを補間係数とするテクスチャロード命令により、パラメータｕに対応する内分係数の補間値ａｉｊ（ｕ）をロードする（Ｓ１６）。テクスチャユニット７０は、内挿演算部３４によるテクスチャロード命令を受けて、ステップＳ１２で指定されたｕ方向のノットパターンのタイプに対応する内分係数テクスチャ５４の行から内分係数の始値ａｉｊ（０）および終値ａｉｊ（１）を読み出し、パラメータｕにもとづく比ｕ：１−ｕで内分係数の始値ａｉｊ（０）と終値ａｉｊ（１）を内分することにより、パラメータｕに対応する内分係数の補間値ａｉｊ（ｕ）を求め、内挿演算部３４に内分係数の補間値ａｉｊ（ｕ）をテクスチャロード命令の結果として返す。
【００８２】
図１０は、テクスチャロード命令により、内分係数の始値ａｉｊ（０）と終値ａｉｊ（１）から補間値ａｉｊ（ｕ）が得られる様子を説明する図である。内挿演算部３４は、テクスチャユニット７０に対して、テクスチャロード命令ｔｌｄのパラメータとして（ｕ，ｔｙｐｅ）を与える。ここでｔｙｐｅはノットパターンのタイプのインデックスであり、内分係数テクスチャ５４の参照行に対応する。
【００８３】
アドレス生成部７４は、ｔｙｐｅで指定された内分係数テクスチャ５４の行の先頭アドレスを参照アドレスとして生成し、その参照アドレスから当該行の第１テクセルと第２テクセルを読み出し、線形補間部７２に与える。これにより、第１内分係数の始値の組（ａ００（０），ａ１０（０），ａ２０（０））と第１内分係数の終値の組（ａ００（１），ａ１０（１），ａ２０（１））が線形補間部７２に入力される。
【００８４】
線形補間部７２は、パラメータｕを補間係数として、第１内分係数の始値（ａ００（０），ａ１０（０），ａ２０（０））と終値（ａ００（１），ａ１０（１），ａ２０（１））をｕ：（１−ｕ）の比で内分した値（ａ００（ｕ），ａ１０（ｕ），ａ２０（ｕ））を出力する。内挿演算部３４は、テクスチャロード命令ｔｌｄの返値として、指定したパラメータｕに対応する内分係数の補間値（ａ００（ｕ），ａ１０（ｕ），ａ２０（ｕ））を取得する。
【００８５】
次に、内挿演算部３４は、第２および第３内分係数についても、パラメータｕに対応する補間値を取得するために、テクスチャロード命令ｔｌｄのパラメータとして（ｕ’，ｔｙｐｅ）を与える。ここでｕ’はｕの値に２テクセル分のオフセットを加えたものであり、このオフセットは、内分係数テクスチャ５４のｔｙｐｅで指定される行において、第１テクセルと第２テクセルを読み飛ばし、第３テクセルと第４テクセルの間で線形補間をするために必要となる。
【００８６】
アドレス生成部７４は、ｔｙｐｅで指定された内分係数テクスチャ５４の行の先頭アドレスに２テクセル分のオフセットを加算して参照アドレスを生成し、その参照アドレスから当該行の第３テクセルと第４テクセルを読み出し、線形補間部７２に与える。これにより、第２および第３内分係数の始値の組（ａ０１（０），ａ１１（０），ａ０２（０））と、第２および第３内分係数の終値の組（ａ０１（１），ａ１１（１），ａ０２（１））が線形補間部７２に入力される。
【００８７】
線形補間部７２は、パラメータｕを補間係数として、第２および第３内分係数の始値（ａ０１（０），ａ１１（０），ａ０２（０））と終値（ａ０１（１），ａ１１（１），ａ０２（１））をｕ：（１−ｕ）の比で内分した値（ａ０１（ｕ），ａ１１（ｕ），ａ０２（ｕ））を出力する。内挿演算部３４は、テクスチャロード命令ｔｌｄの返値として、指定したパラメータｕに対応する内分係数の補間値（ａ０１（ｕ），ａ１１（ｕ），ａ０２（ｕ））を取得する。
【００８８】
ステップＳ１６の処理を擬似コードで書くと、次のようになる。
ｕ方向について、補間された６つの係数をロード：
ｔｌｄ（ｕ，ｔｙｐｅ）＝＞ａ００（ｕ），ａ１０（ｕ），ａ２０（ｕ）
ｕ＋２＝＞ｕ’
ｔｌｄ（ｕ’，ｔｙｐｅ）＝＞ａ０１（ｕ），ａ１１（ｕ），ａ０２（ｕ）
ここで、＝＞は、左辺の演算命令の結果が右辺であることを示す。
【００８９】
図９に戻り、内挿演算部３４は、テクスチャロード命令を実行し、ステップＳ１６で取得した第１内分係数の補間値ａ００（ｕ）、ａ１０（ｕ）、ａ２０（ｕ）にもとづいた比でｕ方向に内挿された制御点をロードする（Ｓ１８）。テクスチャユニット７０は、内挿演算部３４によるテクスチャロード命令の実行を受けて、制御点テクスチャ５２の指定された参照行からｕ方向の４つの制御点の内、隣接する２つの制御点を順に取得し、線形補間部７２に与える。線形補間部７２は、第１内分係数の補間値ａ００（ｕ）、ａ１０（ｕ）、ａ２０（ｕ）にもとづいた内分比で隣接する２つの制御点を内分し、内分された制御点を内挿演算部３４にテクスチャロード命令の結果として返す。
【００９０】
図１１は、テクスチャロード命令により、制御点が内挿される様子を説明する図である。制御点テクスチャ５２の各行には処理対象のパッチに対して指定された１６個の制御点のデータが格納されている。ここでは、ｕ方向のＰ０〜Ｐ３の４つの制御点に対する処理を説明する。ｕ方向の他の４つの制御点Ｐ４〜Ｐ７、Ｐ８〜Ｐ１１、Ｐ１２〜Ｐ１５についても、制御点テクスチャ５２から読み出すテクセルを４つずつオフセットしていけば、処理としては同じである。
【００９１】
制御点テクスチャ５２の参照行ｓの第１〜第４テクセルには、４つの制御点Ｐ０〜Ｐ３の座標値が格納されている。内挿演算部３４が、テクスチャユニット７０に対して、テクスチャロード命令ｔｌｄのパラメータとして（ａ００，ｓ）を与える。
【００９２】
アドレス生成部７４は、制御点テクスチャ５２の参照行ｓの先頭アドレスを参照アドレスとして生成し、その参照アドレスから当該行の第１テクセルと第２テクセルを読み出し、線形補間部７２に与える。これにより、最初の２つの隣接する制御点Ｐ０とＰ１の座標値が線形補間部７２に入力される。
【００９３】
線形補間部７２は、入力された２つの制御点Ｐ０とＰ１を第１内分係数ａ００にもとづく比ａ００：（１−ａ００）で内分した点Ｐ０１の座標値を計算し、出力する。内挿演算部３４は、テクスチャロード命令ｔｌｄの返値として、第１内分係数の補間値ａ００（ｔ）にもとづく内分比であらかじめ内分された制御点Ｐ０１の座標値を取得する。
【００９４】
次に、内挿演算部３４は、テクスチャユニット７０に対して、テクスチャロード命令ｔｌｄのパラメータとして（ａ１０’，ｓ）を与える。ここでａ１０’はａ１０の値に１テクセル分のオフセットを加えたものであり、このオフセットは、制御点テクスチャ５２の参照行ｓにおいて、第１テクセルを読み飛ばし、第２テクセルと第３テクセルの間で線形補間をするために必要となる。
【００９５】
アドレス生成部７４は、制御点テクスチャ５２の参照行ｓの先頭アドレスに１テクセル分のオフセットを加算して参照アドレスを生成し、その参照アドレスから当該行の第２テクセルと第３テクセルを読み出し、線形補間部７２に与える。これにより、次の２つの隣接する制御点Ｐ１とＰ２の座標値が線形補間部７２に入力される。
【００９６】
線形補間部７２は、入力された２つの制御点Ｐ１とＰ２を第１内分係数ａ１０にもとづく比ａ１０：（１−ａ１０）で内分した点Ｐ１２の座標値を計算し、出力する。内挿演算部３４は、テクスチャロード命令ｔｌｄの返値として、第１内分係数の補間値ａ１０（ｔ）にもとづく内分比であらかじめ内分された制御点Ｐ１２の座標値を取得する。
【００９７】
さらに、内挿演算部３４は、テクスチャユニット７０に対して、テクスチャロード命令ｔｌｄのパラメータとして（ａ２０’，ｓ）を与える。ここで、ａ２０’はａ２０の値に２テクセル分のオフセットを加えたものであり、このオフセットは、制御点テクスチャ５２の参照行ｓにおいて、第１、第２テクセルを読み飛ばし、第３テクセルと第４テクセルの間で線形補間をするために必要となる。
【００９８】
アドレス生成部７４は、制御点テクスチャ５２の参照行ｓの先頭アドレスに２テクセル分のオフセットを加算して参照アドレスを生成し、その参照アドレスから当該行の第３テクセルと第４テクセルを読み出し、線形補間部７２に与える。これにより、さらに次の２つの隣接する制御点Ｐ２とＰ３の座標値が線形補間部７２に入力される。
【００９９】
線形補間部７２は、入力された２つの制御点Ｐ２とＰ３を第１内分係数ａ２０にもとづく比ａ２０：（１−ａ２０）で内分した点Ｐ２３の座標値を計算し、出力する。内挿演算部３４は、テクスチャロード命令ｔｌｄの返値として、第１内分係数の補間値ａ２０（ｔ）にもとづく内分比であらかじめ内分された制御点Ｐ２３の座標値を取得する。
【０１００】
ステップＳ１８の処理の擬似コードは次のようになる。
補間された３つの制御点をロード：
ｔｌｄ（ａ００，ｓ）＝＞Ｐ０１ｘｙｚ
ａ１０＋１−＞ａ１０’
ｔｌｄ（ａ１０’，ｓ）＝＞Ｐ１２ｘｙｚ
ａ２０＋２−＞ａ２０’
ｔｌｄ（ａ２０’，ｓ）＝＞Ｐ２３ｘｙｚ
【０１０１】
再び図９を参照する。内挿演算部３４は、こうしてあらかじめ内挿された制御点を第２内分係数の補間値ａ０１（ｕ）、ａ１１（ｕ）にもとづいた比でｕ方向に内挿演算し、さらにその結果を第３内分係数の補間値ａ０２（ｕ）にもとづいた比でｕ方向に内挿演算する（Ｓ２０）。この内挿計算は、内挿演算部３４においてレジスタを用いた演算処理にて行われる。内挿演算部３４は、３回の内挿演算の結果をストア命令ｓｔによりレジスタに書き込む。
【０１０２】
ステップＳ２０の処理の擬似コードは次のようになる。
ｘ座標を計算：
Ｐ０１ｘ＋ａ０１（Ｐ１２ｘ−Ｐ０１ｘ）＝＞Ｐ０１２ｘ
Ｐ１２ｘ＋ａ１１（Ｐ２３ｘ−Ｐ１２ｘ）＝＞Ｐ１２３ｘ
Ｐ０１２ｘ＋ａ０２（Ｐ１２３ｘ−Ｐ０１２ｘ）＝＞Ｐ０１２３ｘ
ｙ座標を計算：
Ｐ０１ｙ＋ａ０１（Ｐ１２ｙ−Ｐ０１ｙ）＝＞Ｐ０１２ｙ
Ｐ１２ｙ＋ａ１１（Ｐ２３ｙ−Ｐ１２ｙ）＝＞Ｐ１２３ｙ
Ｐ０１２ｙ＋ａ０２（Ｐ１２３ｙ−Ｐ０１２ｙ）＝＞Ｐ０１２３ｙ
ｚ座標を計算：
Ｐ０１ｚ＋ａ０１（Ｐ１２ｚ−Ｐ０１ｚ）＝＞Ｐ０１２ｚ
Ｐ１２ｚ＋ａ１１（Ｐ２３ｚ−Ｐ１２ｚ）＝＞Ｐ１２３ｚ
Ｐ０１２ｚ＋ａ０２（Ｐ１２３ｚ−Ｐ０１２ｚ）＝＞Ｐ０１２３ｚ
座標値をストア：
ｓｔ  Ｐ０１２３ｘ
ｓｔ  Ｐ０１２３ｙ
ｓｔ  Ｐ０１２３ｚ
【０１０３】
次に、内挿演算部３４は、パラメータｖを補間係数とするテクスチャロード命令により、パラメータｖに対応する第１、第２および第３内分係数の補間値ｂｉｊ（ｖ）をロードする（Ｓ２２）。テクスチャユニット７０は、ｕ方向の場合と同様に、内挿演算部３４によるテクスチャロード命令を受けて、ステップＳ１２で指定されたｖ方向のノットパターンのタイプに対応する内分係数テクスチャ５４の行から内分係数の始値ｂｉｊ（０）および終値ｂｉｊ（１）を読み出し、パラメータｖにもとづく比ｖ：１−ｖで内分係数の始値ｂｉｊ（０）と終値ｂｉｊ（１）を内分することにより、パラメータｖに対応する内分係数の補間値ｂｉｊ（ｖ）を求め、内挿演算部３４に内分係数の補間値ｂｉｊ（ｖ）をテクスチャロード命令の結果として返す。
【０１０４】
ステップＳ２２の演算の擬似コードは次のようになる。
ｖ方向について、補間された６つの係数をロード：
ｔｌｄ（ｖ，ｔｙｐｅ）＝＞ｂ００（ｖ），ｂ１０（ｖ），ｂ２０（ｖ）
ｖ＋２＝＞ｖ’
ｔｌｄ（ｖ’，ｔｙｐｅ）＝＞ｂ０１（ｖ），ｂ１１（ｖ），ｂ０２（ｖ）
【０１０５】
内挿演算部３４は、ｕ方向に再帰的に３回内挿された制御点をロード命令ｌｄによりレジスタから読み出し、そのｕ方向に内挿された後の制御点を、ステップＳ２２で求めた第１、第２および第３内分係数の補間値ｂｉｊ（ｖ）にもとづいた比でさらにｖ方向に再帰的に３回内挿演算する（Ｓ２４）。ｖ方向の内挿演算は、ｕ方向の内挿演算と同様に行われる。ただし、ｕ方向の１回目の内挿演算は、テクスチャユニット７０の線形補間機能を用いて行われたが、ｖ方向の内挿演算は、３回とも内挿演算部３４においてレジスタに中間結果を保持しながら行われる。
【０１０６】
なお、一般に、ＮＵＲＢＳ曲面のパッチのｕ方向、ｖ方向でノットパターンは異なるから、ｕ方向の内挿演算に使われる第１、第２および第３内分係数ａｉｊ（ｕ）とｖ方向の内挿演算に使われる第１、第２および第３内分係数ｂｉｊ（ｖ）は独立であり、ｕ方向とｖ方向で異なるノットパターンのタイプに対応する内分係数が使われる。
【０１０７】
ステップＳ２４において、最終的に２次元パラメータ座標値（ｕ，ｖ）に対応するパラメトリック曲面の点が得られる。内挿演算部３４は、ストア命令ｓｔにより、得られたパラメトリック曲面の点をレジスタに保持する。
【０１０８】
ステップＳ２４の処理の擬似コードは次のようになる。
ｕ方向に計算された４つの制御点をロード：
ｌｄ  Ｐ０ｘ  ｌｄ  Ｐ０ｙ  ｌｄ  Ｐ０ｚ
ｌｄ  Ｐ１ｘ  ｌｄ  Ｐ１ｙ  ｌｄ  Ｐ１ｚ
ｌｄ  Ｐ２ｘ  ｌｄ  Ｐ２ｙ  ｌｄ  Ｐ２ｚ
ｌｄ  Ｐ３ｘ  ｌｄ  Ｐ３ｙ  ｌｄ  Ｐ３ｚ
【０１０９】
ｘ座標を計算：
Ｐ０ｘ＋ｂ００（Ｐ１ｘ−Ｐ０ｘ）＝＞Ｐ０１ｘ
Ｐ１ｘ＋ｂ１０（Ｐ２ｘ−Ｐ１ｘ）＝＞Ｐ１２ｘ
Ｐ２ｘ＋ｂ２０（Ｐ３ｘ−Ｐ２ｘ）＝＞Ｐ２３ｘ
Ｐ０１ｘ＋ｂ０１（Ｐ１２ｘ−Ｐ０１ｘ）＝＞Ｐ０１２ｘ
Ｐ１２ｘ＋ｂ１１（Ｐ２３ｘ−Ｐ１２ｘ）＝＞Ｐ１２３ｘ
Ｐ０１２ｘ＋ｂ０２（Ｐ１２３ｘ−Ｐ０１２ｘ）＝＞Ｐ０１２３ｘ
【０１１０】
ｙ座標を計算：
Ｐ０ｙ＋ｂ００（Ｐ１ｙ−Ｐ０ｙ）＝＞Ｐ０１ｙ
Ｐ１ｙ＋ｂ１０（Ｐ２ｙ−Ｐ１ｙ）＝＞Ｐ１２ｙ
Ｐ２ｙ＋ｂ２０（Ｐ３ｙ−Ｐ２ｙ）＝＞Ｐ２３ｙ
Ｐ０１ｙ＋ｂ０１（Ｐ１２ｙ−Ｐ０１ｙ）＝＞Ｐ０１２ｙ
Ｐ１２ｙ＋ｂ１１（Ｐ２３ｙ−Ｐ１２ｙ）＝＞Ｐ１２３ｙ
Ｐ０１２ｙ＋ｂ０２（Ｐ１２３ｙ−Ｐ０１２ｙ）＝＞Ｐ０１２３ｙ
【０１１１】
ｚ座標を計算：
Ｐ０ｚ＋ｂ００（Ｐ１ｚ−Ｐ０ｚ）＝＞Ｐ０１ｚ
Ｐ１ｚ＋ｂ１０（Ｐ２ｚ−Ｐ１ｚ）＝＞Ｐ１２ｚ
Ｐ２ｚ＋ｂ２０（Ｐ３ｚ−Ｐ２ｚ）＝＞Ｐ２３ｚ
Ｐ０１ｚ＋ｂ０１（Ｐ１２ｚ−Ｐ０１ｚ）＝＞Ｐ０１２ｚ
Ｐ１２ｚ＋ｂ１１（Ｐ２３ｚ−Ｐ１２ｚ）＝＞Ｐ１２３ｚ
Ｐ０１２ｚ＋ｂ０２（Ｐ１２３ｚ−Ｐ０１２ｚ）＝＞Ｐ０１２３ｚ
【０１１２】
座標値をストア：
ｓｔ  Ｐ０１２３ｘ
ｓｔ  Ｐ０１２３ｙ
ｓｔ  Ｐ０１２３ｚ
【０１１３】
頂点データ出力部３６は、得られたパラメトリック曲面の点の座標値をメッシュの頂点座標値として、２次元パラメータ座標値（ｕ，ｖ）に対応づけて出力する（Ｓ２６）。
【０１１４】
図１２（ａ）〜（ｊ）は、パラメトリック曲面のｕ方向、ｖ方向に制御点を内挿して、２次元パラメータ座標値（ｕ，ｖ）に対応するパラメトリック曲面の点およびその点における接線を求める手順を模式的に示す図である。
【０１１５】
図１２（ａ）は、パラメトリック曲面のパッチに対して定義された１６個の制御点を示す。ここでは、同図の縦方向をｕ軸、横方向をｖ軸に取り、ｕ方向に４つの制御点Ｐ０［ｊ］、Ｐ１［ｊ］、Ｐ２［ｊ］、Ｐ３［ｊ］を示す。［］内の添え字ｊは、ｖ方向の列番号を示し、ｊ＝０〜３である。
【０１１６】
図１２（ｂ）は、図１２（ａ）の１６個の制御点に対して、ｕ方向の１回目の内挿演算を施した結果を示す。ｕ方向の１回目の内挿演算により、ｕ方向に並ぶ各列４個の制御点Ｐ０［ｊ］、Ｐ１［ｊ］、Ｐ２［ｊ］、Ｐ３［ｊ］は、第１内分係数ａ００、ａ１０、ａ２０により内分され、各列３個ずつの内分点Ｐ０１［ｊ］、Ｐ１２［ｊ］、Ｐ２３［ｊ］が得られる。このｕ方向の１回目の内挿演算は、テクスチャユニット７０の線形補間部７２が、制御点テクスチャ５２に格納された制御点を線形補間することにより行われる。
【０１１７】
図１２（ｃ）は、図１２（ｂ）の結果に対して、ｕ方向の２回目の内挿演算を施した結果を示す。ｕ方向の２回目の内挿演算により、ｕ方向に並ぶ各列３個の内分点Ｐ０１［ｊ］、Ｐ１２［ｊ］、Ｐ２３［ｊ］は、第２内分係数ａ０１、ａ１１によりさらに内分され、各列２個ずつの内分点Ｐ０１２［ｊ］、Ｐ１２３［ｊ］が得られる。このｕ方向の２回目の内挿演算は、ピクセルシェーダ３２の内挿演算部３４により行われる。
【０１１８】
図１２（ｄ）は、図１２（ｃ）の結果に対して、ｕ方向の３回目の内挿演算を施した結果を示す。ｕ方向の３回目の内挿演算により、ｕ方向に並ぶ各列２個の内分点Ｐ０１２［ｊ］、Ｐ１２３［ｊ］は、第３内分係数ａ０２により内分され、各列１個ずつの制御点Ｐ０１２３［ｊ］が得られる。このｕ方向の３回目の内挿演算も、内挿演算部３４により行われる。
【０１１９】
図１２（ｂ）から（ｄ）までの処理により、ｕ方向の３回の内挿演算が完了し、ｖ方向に並ぶ４個の内分点Ｐ０１２３［０］、Ｐ０１２３［１］、Ｐ０１２３［２］、Ｐ０１２３［３］が得られる。
【０１２０】
図１２（ｅ）は、図１２（ｄ）の結果に対して、ｖ方向の１回目の内挿演算を施した結果を示す。ｖ方向の１回目の内挿演算により、ｖ方向に並ぶ４個の内分点Ｐ０１２３［０］、Ｐ０１２３［１］、Ｐ０１２３［２］、Ｐ０１２３［３］は、第１内分係数ｂ００、ｂ１０、ｂ２０により内分され、３個の内分点Ｐ０１２３＿０１、Ｐ０１２３＿１２、Ｐ０１２３＿２３が得られる。このｖ方向の１回目の内挿演算は、内挿演算部３４により行われる。
【０１２１】
図１２（ｆ）は、図１２（ｅ）の結果に対して、ｖ方向の２回目の内挿演算を施した結果を示す。ｖ方向の２回目の内挿演算により、ｖ方向に並ぶ３個の内分点Ｐ０１２３＿０１、Ｐ０１２３＿１２、Ｐ０１２３＿２３は、第２内分係数ｂ０１、ｂ１１により内分され、２個の内分点Ｐ０１２３＿０１２、Ｐ０１２３＿１２３が得られる。このｖ方向の２回目の内挿演算も、内挿演算部３４により行われる。
【０１２２】
図１２（ｇ）は、図１２（ｆ）の結果に対して、ｖ方向の３回目の内挿演算を施した結果を示す。ｖ方向の３回目の内挿演算により、ｖ方向に並ぶ２個の内分点Ｐ０１２３＿０１２、Ｐ０１２３＿１２３は、３回目の内分係数ｂ０２により内分され、１個の内分点Ｐ０１２３＿０１２３が得られる。このｖ方向の３回目の内挿演算も、内挿演算部３４により行われる。
【０１２３】
図１２（ｅ）から（ｇ）までの処理により、ｖ方向の３回の内挿演算が完了し、最終的に１個の内分点Ｐ０１２３＿１２３が得られる。これが２次元パラメータ座標値（ｕ，ｖ）に対応するパラメトリック曲面上の点である。
【０１２４】
最終的に得られた頂点Ｐ０１２３＿１２３におけるｕ方向、ｖ方向の接線を求めるには、図１２（ｃ）に示したｕ方向に２回の内挿演算を施した結果に対して、ｖ方向に２回の内挿演算を施す。
【０１２５】
図１２（ｈ）は、図１２（ｃ）の結果に対して、ｖ方向に１回目の内挿演算を施した結果を示す。このｖ方向の１回目の内挿演算により、１行目のｖ方向に並ぶ４個の内分点Ｐ０１２［０］、Ｐ０１２［１］、Ｐ０１２［２］、Ｐ０１２［３］は、第１内分係数ｂ００、ｂ１０、ｂ２０により内分され、３個の内分点Ｐ０１２＿０１、Ｐ０１２＿１２、Ｐ０１２＿２３が得られる。同様に、２行目のｖ方向に並ぶ４個の内分点Ｐ１２３［０］、Ｐ１２３［１］、Ｐ１２３［２］、Ｐ１２３［３］は、第１内分係数ｂ００、ｂ１０、ｂ２０により内分され、３個の内分点Ｐ１２３＿０１、Ｐ１２３＿１２、Ｐ１２３＿２３が得られる。このｖ方向の１回目の内挿演算は、内挿演算部３４により行われる。
【０１２６】
図１２（ｉ）は、図１２（ｈ）の結果に対して、ｖ方向に２回目の内挿演算を施した結果を示す。このｖ方向の２回目の内挿演算により、１行目のｖ方向に並ぶ３個の内分点Ｐ０１２＿０１、Ｐ０１２＿１２、Ｐ０１２＿２３は、第２内分係数ｂ０１、ｂ１１により内分され、２個の内分点Ｐ０１２＿０１２、Ｐ０１２＿１２３が得られる。同様に、２行目のｖ方向の並ぶ３個の内分点Ｐ１２３＿０１、Ｐ１２３＿１２、Ｐ１２３＿２３は、第２内分係数ｂ０１、ｂ１１により内分され、２個の内分点Ｐ１２３＿０１２、Ｐ１２３＿１２３が得られる。
【０１２７】
図１２（ｊ）は、図１２（ｉ）の結果から、図１２（ｇ）の頂点座標Ｐ０１２３＿０１２３におけるｕ方向およびｖ方向の接線を求めた結果を示す。内挿演算部３４は、図１２（ｉ）の４つの内分点の内、上側の２点Ｐ０１２＿０１２、Ｐ１２３＿０１２の中点Ｕ、下側の２点Ｐ１２３＿０１２、Ｐ１２３＿１２３の中点Ｄ、左側の２点Ｐ０１２＿０１２、Ｐ１２３＿０１２の中点Ｌ、右側の２点Ｐ０１２＿１２３、Ｐ１２３＿１２３の中点Ｒを求める。頂点座標Ｐ０１２３＿０１２３におけるｕ方向の接線ベクトルは、上側の中点Ｕと下側の中点Ｄの差分ベクトルで与えられ、ｖ方向の接線ベクトルは、左側の中点Ｌと右側の中点Ｒの差分ベクトルで与えられる。
【０１２８】
以下、ＮＵＲＢＳ曲面のノットパターンは、隣接するパッチの接続性を考慮すると９種類に限定することができること、およびＮＵＲＢＳ曲面の制御点を内挿演算するときに用いられる内分係数がパラメータｔの１次式で表されることについて詳しく説明する。
【０１２９】
ＮＵＲＢＳ曲面は、２つのパラメータｕ、ｖを媒介変数としたパラメトリック曲面であり、パラメトリック曲面のパッチの形状は、１６個の制御点Ｐ０〜Ｐ１５と、パラメータｕ、ｖの変化に伴う各制御点の影響力の変化を表す節点（ノット）の列であるノットベクトルによって操作される。パラメトリック曲面をｕ方向またはｖ方向で見た場合、パラメータｕまたはｖを媒介変数としたパラメトリック曲線と見ることができ、パラメトリック曲線のセグメントの形状は、ｕ方向またはｖ方向の４個の制御点とノットベクトルによって操作される。
【０１３０】
パラメトリック曲面をパッチ毎に生成し、隣り合うパッチをつなぎ合わせることで１つの曲面を形成するが、パッチのつなぎ目において滑らかな連続性を確保するために、各パッチのｕ、ｖ方向のそれぞれに適用すべきノットベクトルを定める。本実施の形態では、隣接パッチ間の接続性を考慮してパッチに適用するノットパターンを９種類に限定している。すなわち、任意のＮＵＲＢＳ曲面を用いるのではなく、９種類のノットパターンで決まるＮＵＲＢＳ曲面で描画対象オブジェクトの自由曲面をモデル化する。
【０１３１】
パラメトリック曲面をｕ、ｖいずれかの方向で見ると、パラメトリック曲線として考えることができるため、ここではパラメトリック曲線のノットパターンを説明する。ノットパターンはｕ方向、ｖ方向に独立に指定することができる。
【０１３２】
４階すなわち３次のＢスプライン曲線の場合、１セグメントは４つの制御点で定義される。５つの制御点でＢスプライン曲線を定義する場合は２セグメント、６つの制御点でＢスプライン曲線を定義する場合は３セグメントとなる。
【０１３３】
１つのセグメントに対して、９つのタイプのノットパターンのいずれかを用いる。曲線の形状を決める制御点の数によって、隣接セグメント間の接続性を考慮して、使用すべきノットパターンのタイプと順序を定める。
【０１３４】
隣接セグメント間を接続性を考慮する場合、セグメントの端点における滑らかな連続性が問題となる。１つのセグメントに注目したとき、セグメントの端点が制御点と一致する場合、その端点はオープンであるといい、一致しない場合はクローズであるという。さらに、曲線の接続性を考慮して、注目しているセグメントの前後に隣接するセグメントの端点が制御点と一致しているかどうか、すなわちオープンであるか、クローズであるかを区別する。さらに、注目セグメントの端点がクローズである場合、その端点を共有して接続している隣接セグメントの端点のオープン／クローズを考慮に入れ、その注目セグメントのノットパターンを決める。
【０１３５】
セグメントの接続関係を、注目セグメントの始点および終点のオープン／クローズと、その注目セグメントの始点側に隣接するセグメントの始点のオープン／クローズと、その注目セグメントの終点側に隣接するセグメントの終点のオープン／クローズの組み合わせによって、「（始点側隣接セグメントの始点のオープン／クローズ）：（注目セグメントの始点のオープン／クローズ）−（注目セグメントの終点のオープン／クローズ）：（終点側隣接セグメントの終点のオープン／クローズ）」の形式で表すことにする。
【０１３６】
図１３（ａ）〜（ｃ）は、制御点が４個、５個、および６個の場合のノットパターンについて説明する図である。
【０１３７】
図１３（ａ）は、４個の制御点Ｑ０〜Ｑ３でＮＵＲＢＳ曲線を定義する際に使用されるノットパターンであり、これをタイプ２とする。セグメントの始点、終点はそれぞれ制御点Ｑ０、Ｑ３に一致しており、オープンである。このノットパターンはベジェ曲線に一致する。
【０１３８】
図１３（ｂ）は、５個の制御点Ｑ０〜Ｑ４でＮＵＲＢＳ曲線を定義する際に使用されるノットパターンを示す。この場合、ＮＵＲＢＳ曲線は第１、第２のセグメントを接続点Ｅ１でつなげて表される。
【０１３９】
第１セグメントの始点は制御点Ｑ０に一致しており、オープンである。一方、第１セグメントの終点は、第２セグメントの始点と一致することで連続性が保たれており、いずれの制御点とも一致しないので、クローズである。また、第１セグメントの終点側隣接セグメントである第２セグメントの終点は、制御点Ｑ４と一致し、オープンである。したがって、第１セグメントの接続関係は「オープン−クローズ：オープン」で表される。これをタイプ３とする。
【０１４０】
第２セグメントの始点は、第１セグメントの終点と接続し、いずれの制御点とも一致しないから、クローズであり、第２セグメントの終点は、制御点Ｑ４に一致し、オープンである。第２セグメントの始点側隣接セグメントである第１セグメントの始点は、制御点Ｑ０と一致し、オープンである。したがって、第２セグメントの接続関係は「オープン：クローズ−オープン」で表される。これをタイプ７とする。
【０１４１】
図１３（ｃ）は、６個の制御点Ｑ０〜Ｑ５でＮＵＲＢＳ曲線を定義する際に使用されるノットパターンを示す。この場合、ＮＵＲＢＳ曲線は第１、第２、第３のセグメントを２つの接続点Ｅ１、Ｅ２でつなげて表される。
【０１４２】
第１セグメントの始点は制御点Ｑ０に一致し、オープンであり、第１セグメントの終点は、第２セグメントの始点と接続し、いずれの制御点とも一致せず、クローズである。第１セグメントの終点側隣接セグメントである第２セグメントの終点は、いずれの制御点とも一致せず、クローズである。したがって、第１セグメントの接続関係は「オープン−クローズ：クローズ」で表される。これをタイプ４とする。
【０１４３】
第２セグメントの始点は、第１セグメントの終点と接続し、いずれの制御点とも一致せず、クローズであり、第２セグメントの終点は、第３セグメントの始点と接続し、いずれの制御点とも一致せず、クローズである。また、第２セグメントの始点側隣接セグメントである第１セグメントの始点は、制御点Ｑ０に一致し、オープンであり、第２セグメントの終点側隣接セグメントである第３セグメントの終点は、制御点Ｑ５に一致し、オープンである。したがって、第２セグメントの接続関係は「オープン：クローズ−クローズ：オープン」で表される。これをタイプ５とする。
【０１４４】
第３セグメントの始点は、第２セグメントの終点と接続し、いずれの制御点とも一致せず、クローズであり、第３セグメントの終点は、制御点Ｑ５に一致し、オープンである。また、第３セグメントの始点側隣接セグメントである第２セグメントの始点は、クローズである。したがって、第３セグメントの接続関係は「クローズ：クローズ−オープン」で表される。これをタイプ６とする。
【０１４５】
図１４（ａ）〜（ｃ）は、制御点が７個、８個、および９個以上の場合のノットパターンについて説明する図である。
【０１４６】
図１４（ａ）は、７個の制御点Ｑ０〜Ｑ６でＮＵＲＢＳ曲線を定義する際に使用されるノットパターンを示す。この場合、ＮＵＲＢＳ曲線は第１〜第４のセグメントを３つの接続点Ｅ１〜Ｅ３でつなげて表される。
【０１４７】
第１セグメントは既に説明したタイプ４である。
【０１４８】
第２セグメントの始点は、第１セグメントの終点と接続し、いずれの制御点とも一致せず、クローズであり、第２セグメントの終点は、第３セグメントの始点と接続し、いずれの制御点とも一致せず、クローズである。また、第２セグメントの始点側隣接セグメントである第１セグメントの始点は、制御点Ｑ０に一致し、オープンであり、第２セグメントの終点側隣接セグメントである第３セグメントの終点は、いずれの制御点とも一致せず、クローズである。したがって、第２セグメントの接続関係は「オープン：クローズ−クローズ：クローズ」で表される。これをタイプ８とする。
【０１４９】
第３セグメントの始点は、第２セグメントの終点と接続し、いずれの制御点とも一致せず、クローズであり、第３セグメントの終点は、第４セグメントの始点と接続し、いずれの制御点とも一致せず、クローズである。また、第３セグメントの始点側隣接セグメントである第２セグメントの始点は、クローズであり、第３セグメントの終点側隣接セグメントである第４セグメントの終点は、制御点Ｑ６に一致し、オープンである。したがって、第３セグメントの接続関係は「クローズ：クローズ−クローズ：オープン」で表される。これをタイプ９とする。
【０１５０】
第４セグメントは既に説明したタイプ６である。
【０１５１】
図１４（ｂ）は、８個の制御点Ｑ０〜Ｑ７でＮＵＲＢＳ曲線を定義する際に使用されるノットパターンを示す。この場合、ＮＵＲＢＳ曲線は第１〜第５のセグメントを４つの接続点Ｅ１〜Ｅ４でつなげて表される。
【０１５２】
第１セグメントは既に説明したタイプ４、第２セグメントはタイプ８である。
【０１５３】
第３セグメントの始点は、第２セグメントの終点と接続し、いずれの制御点とも一致せず、クローズであり、第３セグメントの終点は、第４セグメントの始点と接続し、いずれの制御点とも一致せず、クローズである。また、第３セグメントの始点側隣接セグメントである第２セグメントの始点は、クローズであり、第３セグメントの終点側隣接セグメントである第４セグメントの終点は、いずれの制御点とも一致せず、クローズである。第１セグメントの接続関係は「クローズ：クローズ−クローズ：クローズ」で表される。これをタイプ１とする。
【０１５４】
第４セグメントは既に説明したタイプ９、第５セグメントはタイプ６である。
【０１５５】
図１４（ｃ）は、９個以上の制御点、ここでは１０個の制御点Ｑ０〜Ｑ９でＮＵＲＢＳ曲線を定義する際に使用するノットパターンを示す。この場合、ＮＵＲＢＳ曲線は第１〜第７のセグメントを６個の接続点Ｅ１〜Ｅ６でつなげて表される。一般に、ｎ個の制御点が与えられたとき、ＮＵＲＢＳ曲線は（ｎ−３）個のセグメントをつなげて表される。
【０１５６】
この場合、第１〜第７のセグメントは、順にタイプ４、タイプ８、タイプ１、タイプ１、タイプ１、タイプ９、タイプ６になる。このように、９個以上の制御点の場合、中央にタイプ１のセグメントが挿入して接続することになる。
【０１５７】
図１５に、図１３（ａ）〜（ｃ）および図１４（ａ）〜（ｃ）で述べたノットパターンのタイプ１〜９について、セグメントの接続関係をまとめる。このように注目セグメントの端点のオープン／クローズと、隣接セグメントの端点のオープン／クローズによって、ノットパターンが９種類に分けられる。
【０１５８】
図１６（ａ）〜（ｃ）は、パラメトリック曲面に対してｕ方向、ｖ方向に適用されるノットパターンのタイプを説明する図である。
【０１５９】
図１６（ａ）は、ｕ方向に４個の制御点、ｖ方向に５個の制御点が設けられた連続するパラメトリック曲面の模式図である。このパラメトリック曲面のｕ方向は、図１３（ａ）に示した４個の制御点の場合に相当するから、ｕ方向にはタイプ２のノットパターンが適用される。一方、パラメトリック曲面のｖ方向は、図１３（ｂ）に示した５個の制御点の場合に相当するから、ｖ方向の１つ目のセグメントにはタイプ３のノットパターンが適用され、２つ目のセグメントにはタイプ７のノットパターンが適用される。
【０１６０】
図１６（ｂ）は、ｕ方向に８個の制御点、ｖ方向に６個の制御点が設けられた連続するパラメトリック曲面の模式図である。このパラメトリック曲面のｕ方向は、図１４（ｂ）に示した８個の制御点の場合に相当するから、ｕ方向の各セグメントにはタイプ４、８、１、９、６の順でノットパターンが適用される。一方、パラメトリック曲面のｖ方向は、図１３（ｃ）に示した６個の制御点の場合に相当するから、各セグメントにはタイプ４、５、６の順でノットパターンが適用される。
【０１６１】
図１６（ｃ）は、ｕ、ｖ方向の制御点の個数によって、適用されるノットパターンのタイプの順序をまとめた表である。ラスタライザ１０は、この表を用いて、パラメトリック曲面のｕ方向およびｖ方向の制御点の個数により、ｕ方向、ｖ方向のそれぞれの各セグメントに適用されるノットパターンのタイプの順序を決定する。決定されたノットパターンのタイプは、各パッチのパラメータ情報としてシェーダユニット３０に与えられる。
【０１６２】
次に、ＮＵＲＢＳ曲面の制御点を内分するための内分係数が１次式で与えられることを説明する。
【０１６３】
まず、Ｂスプライン曲線について説明する。Ｍ階すなわち（Ｍ−１）次のＢスプライン曲線の式Ｐ（ｔ）は、制御点Ｑ０，Ｑ１，…，Ｑｎを用いて、
Ｐ（ｔ）＝Ｎ０，Ｍ（ｔ）Ｑ０＋Ｎ１，Ｍ（ｔ）Ｑ１＋…＋Ｎｎ，４（ｔ）Ｑｎ
と書ける。
【０１６４】
ここで、Ｎ０，Ｍ，Ｎ１，Ｍ，…，Ｎｎ，Ｍは、Ｂスプライン基底関数であり、混ぜ合わせ関数とも呼ばれる。Ｂスプライン基底関数Ｎｊ，Ｍは、次のドゥ・ブァ・コックス（de Boor Cox）の漸化式により再帰的に求めることができる。
【０１６５】
Ｎｊ，Ｍ（ｔ）＝（ｔ−ｔｊ）／（ｔｊ＋Ｍ−１−ｔｊ）・Ｎｊ，Ｍ−１（ｔ）＋（ｔｊ＋Ｍ−ｔ）／（ｔｊ＋Ｍ−ｔｊ＋１）・Ｎｊ＋１，Ｍ−１（ｔ）
ただし、Ｎｊ，１（ｔ）＝１（ｔｊ≦ｔ＜ｔｊ＋１），Ｎｊ，１（ｔ）＝０（それ以外）である。
【０１６６】
この漸化式に現れるｔｊ，ｔｊ+Mなどは、パラメータｔの節目すなわちノットである。Ｂスプライン基底関数あるいは混ぜ合わせ関数Ｎｊ，Ｍは、ノットを数値の列で表した次のノットベクトルＴにもとづいて定められる。
Ｔ＝［ｔ０，ｔ１，…，ｔＭ＋Ｎ−１］
ここで、Ｎは制御点数、Ｍは階数である。ノットベクトルの要素数は、制御点数Ｎと階数Ｍの和である。
【０１６７】
ノットベクトルＴのノット間隔が一定である場合には、ユニフォームであるといい、ノット間隔が一定でない場合は、ノンユニフォームであるという。
【０１６８】
ノンユニフォームで有理化されたＢスプライン曲線がＮＵＲＢＳ曲線である。ＮＵＲＢＳ曲線では、ノットベクトルＴのノット間隔が可変であるため、ノット間隔の比で曲線の微分係数を補正することができ、曲線の形状を制御するのが容易であり、また、曲線の形状を局所的に変化させることも可能である。また、ＮＵＲＢＳ曲線は、Ｂスプライン曲線以外にもベジェ曲線、エルミート曲線などの曲線も表現することができ、いろいろな曲線を同一形式で表せるという利点もある。さらに、ＮＵＲＢＳでは、有理化すなわち同次座標を用いた中心投影が行われているため、制御点に対する重みを設定することができ、有利化されていないＢスプライン曲線では表現することができない真円なども表現することができる。
【０１６９】
また、混ぜ合わせ関数の値を求めるための上記のドゥ・ブァ・コックスの漸化式は、再帰的に演算できるため、コンピュータのレジスタや演算器などのハードウエア資源を用いて繰り返し計算するのに適している。
【０１７０】
本実施の形態では、４つの制御点で定まる４階すなわち３次のＢスプライン曲線を扱うから、Ｍ＝４、Ｎ＝４の場合を考えればよい。たとえば、制御点数が４個で４階のユニフォームなＢスプライン曲線のノットベクトルＴはＴ＝［−３，−２，−１，０，１，２，３，４］で与えられる。
【０１７１】
図１７は、階数Ｍが４、制御点数Ｎが４のＢスプライン曲線について、ドゥ・ブァ・コックスの漸化式により、Ｂスプライン基底関数を計算する過程を説明する図である。
【０１７２】
セグメントのパラメータｔは、［０，１］の区間で変化し、９タイプのノットパターンのノットベクトルＴは、すべてＴ＝［＊，＊，＊，０，１，＊，＊，＊］と定義する。ここで＊はタイプにより異なる値である。この場合、いずれのノットパターンのタイプでも、１階のＢスプライン基底関数はＮｊ，１＝［０，０，０，１，０，０，０］である。
【０１７３】
ドゥ・ブァ・コックスの漸化式によれば、Ｍ階のｊ番目のＢスプライン基底関数Ｎｊ，Ｍは、（Ｍ−１）階のｊ番目のＢスプライン基底関数Ｎｊ，Ｍ−１と（Ｍ−１）階の（ｊ＋１）番目のＢスプライン基底関数Ｎｊ＋１，Ｍ−１を混ぜ合わせたものであるから、１階のＢスプライン基底関数はＮｊ，１＝［０，０，０，１，０，０，０］を起点として、２階、３階、４階と順に計算していくことで、４階までのＢスプライン基底関数をすべて求めることができる。同図は、この計算過程を表したものである。
【０１７４】
たとえば、２階のＢスプライン基底関数は１階のＢスプライン基底関数を用いて、
Ｎ２，２（ｔ）＝０＋（ｔ４−ｔ）／（ｔ４−ｔ３）・Ｎ３，１（ｔ）
Ｎ３，２（ｔ）＝（ｔ−ｔ３）／（ｔ４−ｔ３）・Ｎ３，１（ｔ）＋０
などと計算される。
【０１７５】
同様に、３階のＢスプライン基底関数は２階のＢスプライン基底関数を用いて、
Ｎ１，３（ｔ）＝０＋（ｔ４−ｔ）／（ｔ４−ｔ２）・Ｎ２，２（ｔ）
Ｎ２，３（ｔ）＝（ｔ−ｔ２）／（ｔ４−ｔ２）・Ｎ２，２（ｔ）＋（ｔ５−ｔ）／（ｔ５−ｔ３）・Ｎ３，２（ｔ）
Ｎ３，３（ｔ）＝（ｔ−ｔ３）／（ｔ５−ｔ３）・Ｎ３，２（ｔ）＋０
などと計算される。
【０１７６】
ここで、ドゥ・ブァ・コックスの漸化式において、（Ｍ−１）階のｊ番目のＢスプライン基底関数Ｎｊ，Ｍ−１と（Ｍ−１）階の（ｊ＋１）番目のＢスプライン基底関数Ｎｊ＋１，Ｍ−１を混ぜ合わせるときの混ぜ合わせ係数を説明の簡単のため、次のようにおく。
Ａｊ，Ｍ＝（ｔ−ｔｊ）／（ｔｊ＋Ｍ−１−ｔｊ）
Ｂｊ，Ｍ＝（ｔｊ＋Ｍ−ｔ）／（ｔｊ＋Ｍ−ｔｊ＋１）
【０１７７】
混ぜ合わせ係数Ａｊ，Ｍ、Ｂｊ，Ｍを用いれば、ドゥ・ブァ・コックスの漸化式は次のように書ける。
Ｎｊ，Ｍ（ｔ）＝Ａｊ，Ｍ、・Ｎｊ，Ｍ−１（ｔ）＋Ｂｊ，Ｍ・Ｎｊ＋１，Ｍ−１（ｔ）
【０１７８】
図１８は、図１７の計算過程を混ぜ合わせ係数Ａｊ，Ｍ、Ｂｊ，Ｍを用いて書き換えたものである。この計算過程によれば、Ｂスプライン基底関数は次の漸化式で求められる。
【０１７９】
４階のＢスプライン基底関数を求める漸化式：
Ｎ０，４（ｔ）＝Ｂ０，４Ｎ１，３（ｔ）
Ｎ１，４（ｔ）＝Ａ１，４Ｎ１，３（ｔ）＋Ｂ１，４Ｎ２，３（ｔ）
Ｎ２，４（ｔ）＝Ａ２，４Ｎ２，３（ｔ）＋Ｂ２，４Ｎ３，３（ｔ）
Ｎ３，４（ｔ）＝Ａ３，４Ｎ３，３（ｔ）
【０１８０】
３階のＢスプライン基底関数を求める漸化式：
Ｎ１，３（ｔ）＝Ｂ１，３Ｎ２，２（ｔ）
Ｎ２，３（ｔ）＝Ａ２，３Ｎ２，２（ｔ）＋Ｂ２，３Ｎ３，２（ｔ）
Ｎ３，３（ｔ）＝Ａ３，３Ｎ３，２（ｔ）
【０１８１】
２階のＢスプライン基底関数を求める漸化式：
Ｎ２，２（ｔ）＝Ｂ２，２Ｎ３，１（ｔ）
Ｎ３，２（ｔ）＝Ａ３，２Ｎ３，１（ｔ）
【０１８２】
１階のＢスプライン基底関数は、
Ｎ３，１（ｔ）＝１である。
【０１８３】
Ｂスプライン曲線の式Ｐ（ｔ）に、上記の４階のＢスプライン基底関数を求める漸化式を適用すると、次のように変形できる。
Ｐ（ｔ）＝Ｑ０Ｎ０，４（ｔ）＋Ｑ１Ｎ１，４（ｔ）＋Ｑ２Ｎ２，４（ｔ）＋Ｑ３Ｎ３，４（ｔ）
＝Ｑ０｛Ｂ０，４Ｎ１，３（ｔ）｝
＋Ｑ１｛Ａ１，４Ｎ１，３（ｔ）＋Ｂ１，４Ｎ２，３（ｔ）｝
＋Ｑ２｛Ａ２，４Ｎ２，３（ｔ）＋Ｂ２，４Ｎ３，３（ｔ）｝
＋Ｑ３｛Ａ３，４Ｎ３，３（ｔ）｝
＝Ｎ１，３（ｔ）｛Ｑ０Ｂ０，４＋Ｑ１Ａ１，４｝
＋Ｎ２，３（ｔ）｛Ｑ１Ｂ１，４＋Ｑ２Ａ２，４｝
＋Ｎ３，３（ｔ）｛Ｑ２Ｂ２，４＋Ｑ３Ａ３，４｝
【０１８４】
ここで、Ｂ０，４＋Ａ１，４＝（ｔ４−ｔ）／（ｔ４−ｔ１）＋（ｔ−ｔ１）／（ｔ４−ｔ１）＝１であることに注意すると、Ｑ０Ｂ０，４＋Ｑ１Ａ１，４は、２点Ｑ０、Ｑ１をＡ１，４：Ｂ０，４の比で内分する点Ｑ０１を求める演算であることがわかる。
【０１８５】
一般的には、Ｂｊ，Ｍ＋Ａｊ＋１，Ｍ＝（ｔｊ＋Ｍ−ｔ）／（ｔｊ＋Ｍ−ｔｊ＋１）＋（ｔ−ｔｊ＋１）／（ｔｊ＋Ｍ−ｔｊ＋１）＝１であるから、Ｑ１Ｂ１，４＋Ｑ２Ａ２，４は、２点Ｑ１、Ｑ２をＡ２，４：Ｂ１，４の比で内分する点Ｑ１２を求める演算であり、Ｑ２Ｂ２，４＋Ｑ３Ａ３，４は、２点Ｑ２、Ｑ３をＡ３，４：Ｂ２，４の比で内分する点Ｑ２３を求める演算である。
【０１８６】
したがって、式Ｐ（ｔ）は、内分点Ｑ０１、Ｑ１２、Ｑ２３を用いて、
Ｐ（ｔ）＝Ｎ１，３（ｔ）Ｑ０１＋Ｎ２，３（ｔ）Ｑ１２＋Ｎ３，３（ｔ）Ｑ２３
と書くことができる。
【０１８７】
さらに、この式に、３階のＢスプライン基底関数を求める漸化式を適用すると、次のように変形できる。
Ｐ（ｔ）＝Ｑ０１｛Ｂ１，３Ｎ２，２（ｔ）｝
＋Ｑ１２｛Ａ２，３Ｎ２，２（ｔ）＋Ｂ２，３Ｎ３，２（ｔ）｝
＋Ｑ２３｛Ａ３，３Ｎ３，２（ｔ）｝
＝Ｎ２，２（ｔ）｛Ｑ０１Ｂ１，３＋Ｑ１２Ａ２，３｝
＋Ｎ３，２（ｔ）｛Ｑ１２Ｂ２，３＋Ｑ２３Ａ３，３｝
【０１８８】
ここで、Ｑ０１Ｂ１，３＋Ｑ１２Ａ２，３は、２点Ｑ０１、Ｑ１２をＡ２，３：Ｂ１，３の比で内分する点Ｑ０１２を求める演算であり、Ｑ１２Ｂ２，３＋Ｑ２３Ａ３，３は、２点Ｑ１２、Ｑ２３をＡ３，３：Ｂ２，３の比で内分する点Ｑ１２３を求める演算である。
【０１８９】
したがって、式Ｐ（ｔ）は、内分点Ｑ０１２、Ｑ１２３を用いて、
Ｐ（ｔ）＝Ｎ２，２（ｔ）Ｑ０１２＋Ｎ３，２（ｔ）Ｑ１２３
と書くことができる。
【０１９０】
さらに、この式に、２階のＢスプライン基底関数を求める漸化式を適用すると、次のように変形できる。
Ｐ（ｔ）＝Ｑ０１２Ｂ２，２Ｎ３，１（ｔ）＋Ｑ１２３Ａ３，２Ｎ３，１（ｔ）
＝Ｎ３，１（ｔ）｛Ｑ０１２Ｂ２，２＋Ｑ１２３Ａ３，２｝
【０１９１】
ここで、Ｑ０１２Ｂ２，２＋Ｑ１２３Ａ３，２は、２点Ｑ０１２、Ｑ１２３をＡ３，２：Ｂ２，２の比で内分する点Ｑ０１２３を求める演算である。
【０１９２】
したがって、式Ｐ（ｔ）は、内分点Ｑ０１２３を用いて、
Ｐ（ｔ）＝Ｎ３，１（ｔ）Ｑ０１２３
と書くことができる。ここで、１階のＢスプライン基底関数Ｎ３，１（ｔ）は１であるから、Ｐ（ｔ）＝Ｑ０１２３である。
【０１９３】
以上のことから、４つの制御点Ｑ０、Ｑ１、Ｑ２、Ｑ３に対して、隣り合う点の間で内分計算を再帰的に３回繰り返すことにより、４階のＢスプライン曲線のパラメータｔに対応する点Ｐ（ｔ）を求められることがわかる。
【０１９４】
すなわち、１回目の内分計算では、４つの制御点Ｑ０、Ｑ１、Ｑ２、Ｑ３について、隣り合う制御点間で内分を計算し、３つの内分点Ｑ０１、Ｑ１２、Ｑ２３を求める。２回目は、その３つの内分点Ｑ０１、Ｑ１２、Ｑ２３について、隣り合う内分点間で内分を計算し、２つの内分点Ｑ０１２、Ｑ１２３を求める。３回目は、その２つの内分点Ｑ０１２、Ｑ１２３について内分を計算して、内分点Ｑ０１２３を求める。３回目の内分計算の結果得られた内分点Ｑ０１２３が点Ｐ（ｔ）である。
【０１９５】
以上で説明した制御点を再帰点に内分することでＢスプライン曲線上の点を求める方法は、ド・カステリョ（de Casteljau）のアルゴリズムとして知られている計算方法を応用したものである。ド・カステリョのアルゴリズムは、一般的にはベジェ曲線に対して知られている計算方法であるが、このように、ドゥ・ブァ・コックスの漸化式を変形することで、Ｂスプライン曲線に対してもド・カステリョのアルゴリズムを適用できることがわかる。
【０１９６】
４つの制御点Ｑ０、Ｑ１、Ｑ２、Ｑ３から４階のＢスプライン曲線の点を求めるための漸化式をまとめると、次のようになる。
【０１９７】
１回目の内分計算：
Ｑ０１＝（ｔ４−ｔ）／（ｔ４−ｔ１）・Ｑ０＋（ｔ−ｔ１）／（ｔ４−ｔ１）・Ｑ１
Ｑ１２＝（ｔ５−ｔ）／（ｔ５−ｔ２）・Ｑ１＋（ｔ−ｔ２）／（ｔ５−ｔ２）・Ｑ２
Ｑ２３＝（ｔ６−ｔ）／（ｔ６−ｔ３）・Ｑ２＋（ｔ−ｔ３）／（ｔ６−ｔ３）・Ｑ３
【０１９８】
２回目の内分計算：
Ｑ０１２＝（ｔ４−ｔ）／（ｔ４−ｔ２）・Ｑ０１＋（ｔ−ｔ２）／（ｔ４−ｔ２）・Ｑ１２
Ｑ１２３＝（ｔ５−ｔ）／（ｔ５−ｔ３）・Ｑ１２＋（ｔ−ｔ３）／（ｔ５−ｔ３）・Ｑ２３
【０１９９】
３回目の内分計算：
Ｑ０１２３＝（ｔ４−ｔ）／（ｔ４−ｔ３）・Ｑ０１２＋（ｔ−ｔ３）／（ｔ４−ｔ３）・Ｑ１２３
【０２００】
ここで、内分係数を
ａ００（ｔ）＝（ｔ−ｔ１）／（ｔ４−ｔ１）
ａ１０（ｔ）＝（ｔ−ｔ２）／（ｔ５−ｔ２）
ａ２０（ｔ）＝（ｔ−ｔ３）／（ｔ６−ｔ３）
ａ０１（ｔ）＝（ｔ−ｔ２）／（ｔ４−ｔ２）
ａ１１（ｔ）＝（ｔ−ｔ３）／（ｔ５−ｔ３）
ａ０２（ｔ）＝（ｔ−ｔ３）／（ｔ４−ｔ３）
とおくと、
【０２０１】
１回目の内分計算：
Ｑ０１＝（１−ａ００（ｔ））Ｑ０＋ａ００（ｔ）Ｑ１
Ｑ１２＝（１−ａ１０（ｔ））Ｑ１＋ａ１０（ｔ）Ｑ２
Ｑ２３＝（１−ａ２０（ｔ））Ｑ２＋ａ２０（ｔ）Ｑ３
【０２０２】
２回目の内分計算：
Ｑ０１２＝（１−ａ０１（ｔ））Ｑ０１＋ａ０１（ｔ）Ｑ１２
Ｑ１２３＝（１−ａ１１（ｔ））Ｑ１２＋ａ１１（ｔ）Ｑ２３
【０２０３】
３回目の内分計算：
Ｑ０１２３＝（１−ａ０２（ｔ））Ｑ０１２＋ａ０２（ｔ）Ｑ１２３
と書ける。
【０２０４】
ノットパターンの各タイプに対して、ノットベクトルＴ＝［ｔ０，ｔ１，…，ｔ７］を次のように定義する。ただし、ｔ０とｔ７は計算に関与しないため、任意の値でよい。また、各ノットベクトルＴに対して定まる内分係数を示す。
【０２０５】
タイプ１：
ノットベクトルＴ＝［−３，−２，−１，０，１，２，３，４］
このとき、内分係数は、ａ００（ｔ）＝（ｔ＋２）／３、ａ１０（ｔ）＝（ｔ＋１）／３、ａ２０（ｔ）＝ｔ／３、ａ０１（ｔ）＝（ｔ＋１）／２、ａ１１（ｔ）＝ｔ／２、ａ０２（ｔ）＝ｔである。
【０２０６】
タイプ２：
ノットベクトルＴ＝［０，０，０，０，１，１，１，１］
このとき、内分係数は、ａ００（ｔ）＝ｔ、ａ１０（ｔ）＝ｔ、ａ２０（ｔ）＝ｔ、ａ０１（ｔ）＝ｔ、ａ１１（ｔ）＝ｔ、ａ０２（ｔ）＝ｔである。
【０２０７】
タイプ３：
ノットベクトルＴ＝［０，０，０，０，１，２，２，２］
このとき、内分係数は、ａ００（ｔ）＝ｔ、ａ１０（ｔ）＝ｔ／２、ａ２０（ｔ）＝ｔ／２、ａ０１（ｔ）＝ｔ、ａ１１（ｔ）＝ｔ／２、ａ０２（ｔ）＝ｔである。
【０２０８】
タイプ４：
ノットベクトルＴ＝［０，０，０，０，１，２，３，４］
このとき、内分係数は、ａ００（ｔ）＝ｔ、ａ１０（ｔ）＝ｔ／２、ａ２０（ｔ）＝ｔ／３、ａ０１（ｔ）＝ｔ、ａ１１（ｔ）＝ｔ／２、ａ０２（ｔ）＝ｔである。
【０２０９】
タイプ５：
ノットベクトルＴ＝［−１，−１，−１，０，１，２，２，２］
このとき、内分係数は、ａ００（ｔ）＝（ｔ＋１）／２、ａ１０（ｔ）＝（ｔ＋１）／３、ａ２０（ｔ）＝ｔ／２、ａ０１（ｔ）＝（ｔ＋１）／２、ａ１１（ｔ）＝ｔ／２、ａ０２（ｔ）＝ｔである。
【０２１０】
タイプ６：
ノットベクトルＴ＝［−３，−２，−１，０，１，１，１，１］
このとき、内分係数は、ａ００（ｔ）＝（ｔ＋２）／３、ａ１０（ｔ）＝（ｔ＋１）／２、ａ２０（ｔ）＝ｔ、ａ０１（ｔ）＝（ｔ＋１）／２、ａ１１（ｔ）＝ｔ、ａ０２（ｔ）＝ｔである。
【０２１１】
タイプ７：
ノットベクトルＴ＝［−１，−１，−１，０，１，１，１，１］
このとき、内分係数は、ａ００（ｔ）＝（ｔ＋１）／２、ａ１０（ｔ）＝（ｔ＋１）／２、ａ２０（ｔ）＝ｔ、ａ０１（ｔ）＝（ｔ＋１）／２、ａ１１（ｔ）＝ｔ、ａ０２（ｔ）＝ｔである。
【０２１２】
タイプ８：
ノットベクトルＴ＝［−１，−１，−１，０，１，２，３，４］
このとき、内分係数は、ａ００（ｔ）＝（ｔ＋１）／２、ａ１０（ｔ）＝（ｔ＋１）／３、ａ２０（ｔ）＝ｔ／３、ａ０１（ｔ）＝（ｔ＋１）／２、ａ１１（ｔ）＝ｔ／２、ａ０２（ｔ）＝ｔである。
【０２１３】
タイプ９：
ノットベクトルＴ＝［−３，−２，−１，０，１，２，２，２］
このとき、内分係数は、ａ００（ｔ）＝（ｔ＋２）／３、ａ１０（ｔ）＝（ｔ＋１）／３、ａ２０（ｔ）＝ｔ／２、ａ０１（ｔ）＝（ｔ＋１）／２、ａ１１（ｔ）＝ｔ／２、ａ０２（ｔ）＝ｔである。
【０２１４】
図１９にノットパターンのタイプ毎の内分係数をまとめて示す。このように内分係数は、すべてｔの一次式で表される。テセレーション処理の際、パラメトリック曲線のパッチの分割数に応じて、パラメータｔは［０，１］の区間で所定の間隔で離散的な値を取る。Ｂスプライン曲線上の点を求めるために、パラメータｔの離散値のすべてについて、内分係数ａｉｊ（ｔ）の値が計算上必要となる。しかし、パラメータｔの離散値のすべてについて内分係数ａｉｊ（ｔ）の値を用意しておかなくても、内分係数ａｉｊ（ｔ）がパラメータｔの一次式で表されることから、ｔ＝０、１のときの内分係数の始値ａｉｊ（０）、終値ａｉｊ（１）の２つを記憶しておけば、任意のｔ（０＜ｔ＜１）の値に対するａｉｊ（ｔ）は、始値ａｉｊ（０）と終値ａｉｊ（１）をｔ：（１−ｔ）の比で線形補間することにより、求めることができる。本実施の形態では、この性質がテクスチャユニット７０において有効に利用されている。
【０２１５】
以上述べたように、本実施の形態によれば、パラメトリック曲面の制御点の再帰的内挿演算に必要な必要な内分計算の一部を、テクスチャユニット７０の線形補間器を利用して実行するため、ピクセルシェーダ３２の演算器を用いてすべての内分計算を行う場合に比べて、描画処理装置１００全体の処理効率が向上する。
【０２１６】
また、２次元パラメータ座標値に依存して変化する内分係数の始値および終値だけをテクスチャとして保持しておくことにより、任意の２次元パラメータ座標値における内分係数をテクスチャの補間計算により効率良く取得することができる。また、内分係数の始値および終値だけをテクスチャに格納すればよいので、テセレーション処理に必要なメモリ量を少なく抑えることができる。また、パラメトリック曲面の制御点についても、テクスチャとして保持しておくことで、最初の内挿演算をテクスチャの補間計算により効率良く行うことができる。
【０２１７】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。そのような変形例を説明する。
【０２１８】
上記の説明では、２次元パラメータ座標系で定義されるパラメトリック曲面をパッチ毎にメッシュ状に細分化するテセレーション処理を説明したが、１次元パラメータ座標系で定義されるパラメトリック曲線をセグメント毎に折れ線で細分化するテセレーション処理も同様に行うことができる。パラメトリック曲線をテセレーション処理する場合は、ラスタライザ１０には描画プリミティブとしてラインプリミティブを与えればよい。
【０２１９】
また、上記の説明では、パラメータｔに依存する内分係数の始値ａｉｊ（０）と終値ａｉｊ（１）を線形補間して、指定されたパラメータｔにおける内分係数ａｉｊ（ｔ）の値を求めたが、内分係数ａｉｊ（ｔ）はパラメータｔの１次式であるから、始値と終値の組に限らず、任意の異なる２つのパラメータ値ｔ１，ｔ２における内分係数ａｉｊ（ｔ１）、ａｉｊ（ｔ２）を代表値として内分係数テクスチャ５４に記憶しておき、これらの代表値を線形補間することにより、指定されたパラメータｔにおける内分係数ａｉｊ（ｔ）の値を求めてもよい。なお、この線形補間には、内挿だけでなく、外挿も含まれる。
【０２２０】
また、実施の形態では、制御点に対するｕ方向の最初の内挿演算だけをテクスチャユニット７０の線形補間機能を用いて行ったが、２回目、３回目の内挿演算についてもテクスチャユニット７０の線形補間機能を用いて行ってもよい。その場合、ピクセルシェーダ３２が、テクスチャユニット７０から第１内分係数であらかじめ内分された制御点を受け取った後、その内分された制御点をテクスチャユニット７０に投入することのできるインタフェースを設ける。テクスチャユニット７０は、線形補間器により、ピクセルシェーダ３２から投入された制御点を第２内分係数でさらに内分して、ピクセルシェーダ３２に出力する。ピクセルシェーダ３２は、テクスチャユニット７０から受け取った第２内分係数で内分された制御点をさらにテクスチャユニット７０に投入し、テクスチャユニット７０は、それを第３内分係数でさらに内分して、ピクセルシェーダ３２に返す。このようにすれば、テセレーション処理に必要なすべての内分演算をテクスチャユニット７０の線形補間機能を用いて実現することができる。また、テクスチャユニット７０の線形補間部７２が線形補間結果をフィードバックして再入力できるように構成されていてもよい。
【図面の簡単な説明】
【０２２１】
【図１】実施の形態に係る描画処理装置の構成図である。
【図２】図１のラスタライザに入力される正方形プリミティブを説明する図である。
【図３】パラメトリック曲面の最小構成単位であるパッチを説明する図である。
【図４】パラメトリック曲線の上の点を求める手順を説明する図である。
【図５】４つの制御点の内分を繰り返すことにより、パラメトリック曲線上の点が求められる様子を示す図である。
【図６】テセレーション処理を行うための図１のピクセルシェーダおよびテクスチャユニットの構成を示す図である。
【図７】図６の制御点テクスチャのデータ構造を説明する図である。
【図８】図６の内分係数テクスチャのデータ構造を説明する図である。
【図９】図６のピクセルシェーダおよびテクスチャユニットによるテセレーション処理の手順を説明するフローチャートである。
【図１０】テクスチャロード命令により、内分係数の始値と終値から補間値が得られる様子を説明する図である。
【図１１】テクスチャロード命令により、制御点が内挿される様子を説明する図である。
【図１２】２次元パラメータ座標値に対応するパラメトリック曲面の点およびその点における接線を求める手順を模式的に示す図である。
【図１３】制御点が４個、５個、および６個の場合のノットパターンについて説明する図である。
【図１４】制御点が７個、８個、および９個以上の場合のノットパターンについて説明する図である。
【図１５】ノットパターンの各タイプについて、セグメントの接続関係をまとめた図である。
【図１６】パラメトリック曲面に対して２次元パラメータ座標系の各方向に適用されるノットパターンのタイプを説明する図である。
【図１７】階数が４、制御点数が４のＢスプライン曲線について、漸化式によりＢスプライン基底関数を計算する過程を説明する図である。
【図１８】図１７の計算過程を混ぜ合わせ係数を用いて書き換えた図である。
【図１９】ノットパターンのタイプ毎の内分係数をまとめた図である。
【符号の説明】
【０２２２】
１０  ラスタライザ、  ３０  シェーダユニット、  ３２  ピクセルシェーダ、  ３４  内挿演算部、  ３６  頂点データ出力部、  ５０  メモリ、  ５２  制御点テクスチャ、  ５４  内分係数テクスチャ、  ５６  テセレーションデータ、  ７０  テクスチャユニット、  ７２  線形補間部、  ７４  アドレス生成部、  １００  描画処理装置。
【図１】
2006243937.tif 000003
【図２】
2006243937.tif 000004
【図３】
2006243937.tif 000005
【図４】
2006243937.tif 000006
【図５】
2006243937.tif 000007
【図６】
2006243937.tif 000008
【図７】
2006243937.tif 000009
【図８】
2006243937.tif 000010
【図９】
2006243937.tif 000011
【図１０】
2006243937.tif 000012
【図１１】
2006243937.tif 000013
【図１２】
2006243937.tif 000014
【図１３】
2006243937.tif 000015
【図１４】
2006243937.tif 000016
【図１５】
2006243937.tif 000017
【図１６】
2006243937.tif 000018
【図１７】
2006243937.tif 000019
【図１８】
2006243937.tif 000020
【図１９】
2006243937.tif 000021