(57)【要約】  オブジェクト空間において利用者定義クリッピングを実行および処理する方法および装置であって、クリッピング操作に必要な計算回数を減らすこと等を目的とするものである。本件方法および装置は、頂点座標のモデルビュー変換を射影変換と結合することも特徴の１つとする。オブジェクト空間の利用者定義クリッピングは、照明がない場合眼点座標の生成を避けることにより、パフォーマンスの向上と消費電力の削減とを実現する。本件装置は、照明機能が無効のときはオブジェクト空間において、および照明機能が有効のときは眼点空間において、デュアルモードの利用者定義クリッピングを実行するオブジェクト空間の利用者定義クリッピングのためのドライバを含んでいる。【選択図】図３
2010503927.tif 000002
【特許請求の範囲】
【請求項１】
オブジェクト空間の利用者定義クリッピングドライバであって、オブジェクト空間の頂点座標をプリミティブアセンブルするように作動し得るプリミティブアセンブリングモジュールと、オブジェクト空間のクリップ平面(P_obj)およびオブジェクト空間のプリミティブアセンブルされた頂点座標を使用してオブジェクト空間のクリップされた頂点座標を生成するように作動し得る利用者定義クリッピングモジュールとを具備するドライバ。
【請求項２】
請求項1に記載のドライバにおいて、前記プリミティブアセンブリングモジュールは、多角形アセンブリングサブモジュール、線アセンブリングサブモジュール、および点アセンブリングサブモジュールのうちの少なくとも1つを含むドライバ。
【請求項３】
請求項1に記載のドライバにおいて、前記プリミティブアセンブリングモジュールは、多角形アセンブリングサブモジュール、線アセンブリングサブモジュール、点アセンブリングサブモジュール、および、前記多角形アセンブリングサブモジュールおよび前記線アセンブリングサブモジュールからの出力を処理するフラットシェーディングモジュールを含むドライバ。
【請求項４】
オブジェクト空間の前記クリップされた頂点座標が射影空間へ変換されることができるように、前記利用者定義クリッピングモジュールの出力を三次元（３D）グラフィックスエンジンのグラフィックス・コアに接続するための 3Dグラフィックスエンジンインターフェースをさらに具備する、請求項1に記載のドライバ。
【請求項５】
請求項1に記載のドライバにおいて、前記ドライバは、ソフトウェア中で実装されるドライバ。
【請求項６】
請求項1に記載のドライバにおいて、前記ドライバは、ハードウェア中で実装されるドライバ。
【請求項７】
請求項1に記載のドライバにおいて、前記ドライバは、照明機能が無効のとき作動する状態にあるドライバ。
【請求項８】
請求項1に記載のドライバにおいて、前記利用者定義クリッピングモジュールは、
P_eye = Inv_Mc * P、および
P_obj = P_eyeT * M
によって定義される眼点空間のクリップ平面(P_eye)を前記オブジェクト空間の前記クリップ平面(P_obj)に変換するドライバであって、ここにおいて、Pは入力クリップ平面であり、Mcは前記クリップ平面のためのモデルビュー行列であり、Inv_Mcは前記Mcの逆行列であり、Mは座標のためのモデルビュー行列であり、Tは行列またはベクトルの転置であり、および、*は行列の乗算を表すドライバ。
【請求項９】
請求項8に記載のドライバにおいて、前記利用者定義クリッピングモジュールは、もし
P_objT * V_obj >= 0
であればクリッピングを行なうドライバであって、ここにおいて、P_objはクリップされることになっている前記オブジェクト空間の前記クリップ平面であり、V_objは前記オブジェクト空間の前記頂点座標であり、Tは行列またはベクトルの転置であり、および、*は行列の乗算を表すドライバ。
【請求項１０】
オブジェクト空間の利用者定義クリッピングドライバであって、オブジェクト空間の頂点座標をプリミティブアセンブルするように作動し得るプリミティブアセンブリング手段と、オブジェクト空間のクリップ平面(P_obj)およびオブジェクト空間のプリミティブアセンブルされた頂点座標を使用してオブジェクト空間のクリップされた頂点座標を生成するように作動し得る利用者定義クリッピング手段とを具備するドライバ。
【請求項１１】
請求項10に記載のドライバにおいて、前記プリミティブアセンブリング手段は、頂点座標を多角形アセンブルする手段、頂点座標を線アセンブルする手段、および頂点座標を点アセンブルする手段のうちの少なくとも1つを含むドライバ。
【請求項１２】
オブジェクト空間の前記クリップされた頂点座標が射影空間へ変換されることができるように、前記利用者定義クリッピング手段の出力を３Dグラフィックスエンジンのグラフィックス・コアに接続する手段をさらに具備する、請求項10に記載のドライバ。
【請求項１３】
請求項10に記載のドライバにおいて、前記ドライバは、ソフトウェア中で実装されるドライバ。
【請求項１４】
請求項10に記載のドライバにおいて、前記ドライバは、ハードウェア中で実装されるドライバ。
【請求項１５】
請求項10に記載のドライバにおいて、前記ドライバは、照明機能が無効のとき作動する状態にあるドライバ。
【請求項１６】
請求項10に記載のドライバにおいて、前記利用者定義クリッピング手段は、
P_eye = Inv_Mc * P、および
P_obj = P_eyeT * M
によって定義される眼点空間のクリップ平面(P_eye)を前記オブジェクト空間の前記クリップ平面(P_obj)に変換するドライバであって、ここにおいて、Pは入力クリップ平面であり、Mcは前記クリップ平面のためのモデルビュー行列であり、Inv_Mcは前記Mcの逆行列であり、Mは座標のためのモデルビュー行列であり、Tは行列またはベクトルの転置であり、および、*は行列の乗算を表すドライバ。
【請求項１７】
請求項16に記載のドライバにおいて、前記利用者定義クリッピングモジュールは、もし
P_objT * V_obj >= 0
であればクリッピングを行なうドライバであって、ここにおいて、P_objはクリップされることになっている前記オブジェクト空間の前記クリップ平面であり、V_objは前記オブジェクト空間の前記頂点座標であり、Tは行列またはベクトルの転置であり、および、*は行列の乗算を表すドライバ。
【請求項１８】
実行されると、
オブジェクト空間の頂点座標をプリミティブアセンブルすることと、
オブジェクト空間のクリップ平面(P_obj)およびオブジェクト空間のプリミティブアセンブルされた頂点座標を使用して、オブジェクト空間のクリップされた頂点座標を生成することと
を行なうように作動し得るプログラム命令を有する、プロセッサによって実行可能なプログラムコード。
【請求項１９】
請求項18に記載のプログラムコードにおいて、プリミティブアセンブルするように作動し得る前記プログラム命令は、実行されると、多角形アセンブリング、線アセンブリング、および点アセンブリングのうちの１つを選択的に行なうように作動し得るプログラム命令を含むプログラムコード。
【請求項２０】
請求項18に記載のプログラムコードにおいて、前記プログラム命令は、照明機能が無効のとき実行されるプログラムコード。
【請求項２１】
請求項18に記載のプログラムコードにおいて、前記利用者定義クリッピングを行なうように作動し得る前記プログラム命令は、実行されると、
P_eye = Inv_Mc * P、および
P_obj = P_eyeT * M
によって定義される眼点空間のクリップ平面(P_eye)を前記オブジェクト空間の前記クリップ平面(P_obj)に変換するように作動し得るプログラム命令を含むプログラムコードであって、ここにおいて、Pは入力クリップ平面であり、Mcは前記クリップ平面のためのモデルビュー行列であり、Inv_Mcは前記Mcの逆行列であり、Mは座標のためのモデルビュー行列であり、Tは行列またはベクトルの転置であり、および、*は行列の乗算を表すプログラムコード。
【請求項２２】
請求項21に記載のプログラムコードにおいて、前記利用者定義クリッピングを行なうように作動し得る前記プログラム命令は、実行されると、もし
P_objT * V_obj >= 0
であればクリッピングを行なうように作動し得るプログラム命令を含むプログラムコードであって、ここにおいて、P_objはクリップされることになっている前記オブジェクト空間の前記クリップ平面であり、V_objは前記オブジェクト空間の前記頂点座標であり、Tは行列またはベクトルの転置であり、および、*は行列の乗算を表すプログラムコード。
【請求項２３】
３Dグラフィックスエンジンであって、前記３Dグラフィックスエンジンにおいて照明機能が無効のときオブジェト空間の頂点座標の利用者定義クリッピングを行なうように作動し得るオブジェクト空間利用者定義クリッピングドライバと、前記オブジェクト空間の前記クリップされた頂点座標を射影空間へ変換するグラフィックス・コアとを具備するエンジン。
【請求項２４】
請求項23に記載のエンジンにおいて、前記ドライバは、前記オブジェクト空間の前記頂点座標を使用して前記オブジェクト空間においてプリミティブアセンブルを行なうように作動し得るプリミティブアセンブリングモジュールを具備するエンジン。
【請求項２５】
請求項24に記載のエンジンにおいて、前記オブジェクト空間の前記頂点座標が線であるか、点であるか、または多角形であるかにそれぞれ応答して、各々が選択的に作動し得る多角形アセンブリングサブモジュール、線アセンブリングサブモジュール、および点アセンブリングサブモジュールを含むエンジン。
【請求項２６】
請求項25に記載のエンジンにおいて、前記プリミティブアセンブリングモジュールは、前記多角形アセンブリングサブモジュールおよび前記線アセンブリングサブモジュールの出力に結合されるフラットシェーディングサブモジュールをさらに具備するエンジン。
【請求項２７】
請求項23に記載のエンジンにおいて、前記グラフィックス・コアは、１つのベクトルと行列の乗算によって前記オブジェクト空間の前記頂点座標を前記射影空間へ直接変換するエンジン。
【請求項２８】
請求項27に記載のエンジンにおいて、前記行列は、モデルビュー行列および射影行列の結合行列（MVTPRJ_matrix）であって、ここにおいて前記乗算の結果は、
V_prj = CV_obj* MVTPRJ_matrixまたは
V_prj = V_obj* MVTPRJ_matrix
によって定義される前記射影空間の前記頂点座標(V_pri)を出力するエンジンであって、ここでCV_objは前記オブジェクト空間の前記クリップされた頂点座標であり、V_objは前記オブジェクト空間のクリップされていない頂点座標であるエンジン。
【請求項２９】
請求項23に記載のエンジンにおいて、前記ドライバは、
P_eye = Inv_Mc *P、および
P_obj = P_eyeT * M
によって定義される眼点空間のクリップ平面(P_eye)を前記オブジェクト空間のクリップ平面(P_obj)に変換するように作動し得る利用者定義クリッピングモジュールを備えるエンジンであって、ここで、Pは入力クリップ平面であり、Mcは前記クリップ平面のためのモデルビュー行列であり、Inv_Mcは前記Mcの逆行列であり、Mは座標のためのモデルビュー行列であり、Tは行列またはベクトルの転置であり、および、*は行列の乗算を表すエンジン。
【請求項３０】
請求項29に記載のエンジンにおいて、前記利用者定義クリッピングモジュールは、もし
P_objT * V_obj >= 0
であれば前記オブジェクト空間の前記クリップ平面(P_obj)を使用して、前記オブジェクト空間のクリップされた頂点座標を生成するようにさらに作動し得るエンジンであって、ここにおいて、P_objはクリップされることになっている前記オブジェクト空間の前記クリップ平面であり、Tは行列またはベクトルの転置であり、および、*は行列の乗算を表すエンジン。
【請求項３１】
３Dグラフィックスエンジンであって、前記３Dグラフィックスエンジンにおいて照明機能が無効にされているときオブジェト空間の頂点座標の利用者定義クリッピングを行なう利用者定義クリッピング手段と、前記オブジェクト空間の前記クリップされた頂点座標を射影空間へ変換するための、前記利用者定義クリッピング手段と接続された変換手段とを具備するエンジン。
【請求項３２】
請求項31に記載のエンジンにおいて、前記利用者定義クリッピング手段は、前記オブジェクト空間の前記頂点座標を使用して、前記オブジェクト空間においてプリミティブアセンブルを行なうプリミティブアセンブリング手段を具備するエンジン。
【請求項３３】
請求項32に記載のエンジンにおいて、前記プリミティブアセンブリング手段は、前記オブジェクト空間の前記頂点座標が線であるか、点であるか、または多角形であるかにそれぞれ応答して、各々が選択的に作動し得る多角形アセンブリング手段、線アセンブリング手段、および点アセンブリング手段を具備するエンジン。
【請求項３４】
請求項33に記載のエンジンにおいて、前記プリミティブアセンブリング手段は、前記多角形アセンブリング手段および前記線アセンブリング手段の出力に結合されるフラットシェーディング手段をさらに含むエンジン。
【請求項３５】
請求項31に記載のエンジンにおいて、前記変換手段は、１つのベクトルと行列の乗算によって前記オブジェクト空間の前記頂点座標を前記射影空間へ直接変換する手段を含むエンジン。
【請求項３６】
請求項35に記載のエンジンにおいて、前記行列は、モデルビュー行列および射影行列の結合行列（MVTPRJ_matrix）であって、ここにおいて前記乗算の結果は、
V_prj = CV_obj* MVTPRJ_matrixまたは
V_prj = V_obj* MVTPRJ_matrix
によって定義される前記射影空間の前記頂点座標(V_pri)を出力するエンジンであって、ここでCV_objは前記オブジェクト空間の前記クリップされた頂点座標であり、V_objは前記オブジェクト空間のクリップされていない頂点座標であるエンジン。
【請求項３７】
請求項31に記載のエンジンにおいて、前記利用者定義クリッピング手段は、
P_eye = Inv_Mc * P、および
P_obj = P_eyeT * M
によって定義される眼点空間のクリップ平面(P_eye)を前記オブジェクト空間のクリップ平面(P_obj)に変換する手段を具備するエンジンであって、ここで、Pは入力クリップ平面であり、Mcは前記クリップ平面のためのモデルビュー行列であり、Inv_Mcは前記Mcの逆行列であり、Mは座標のためのモデルビュー行列であり、Tは行列またはベクトルの転置であり、および、*は行列の乗算を表すエンジン。
【請求項３８】
請求項37に記載のエンジンにおいて、前記利用者定義クリッピング手段は、もし
P_objT * V_obj >= 0
であれば前記オブジェクト空間の前記クリップ平面(P_obj)を使用して、前記オブジェクト空間のクリップされた頂点座標を生成する手段をさらに具備するエンジンであって、ここにおいて、P_objはクリップされることになっている前記オブジェクト空間の前記クリップ平面であり、Tは行列またはベクトルの転置であり、および、*は行列の乗算を表すエンジン。
【請求項３９】
照明が有効のとき眼点空間の頂点座標の頂点座標処理を行なうことと、照明が無効のとき頂点座標オブジェクトの頂点座標処理を行なうこととがプロセッサで実行可能なプログラム命令を有するプログラムコード。
【請求項４０】
請求項39に記載のプログラムコードにおいて、前記オブジェクト空間において前記頂点処理を行なうように作動し得る前記プログラム命令は、前記オブジェクト空間の前記頂点座標を使用して前記オブジェクト空間においてプリミティブアセンブリングを行なうように作動し得るプログラムコード。
【請求項４１】
請求項40に記載のプログラムコードにおいて、プリミティブアセンブリングを行なうように作動し得る前記プログラム命令は、前記プロセッサにより実行されると、前記オブジェクト空間の前記頂点座標の多角形アセンブリング、線アセンブリング、および点アセンブリングのうちの１つを選択的に行なうように作動し得るプログラム命令を含むプログラムコード。
【請求項４２】
請求項39に記載のプログラムコードにおいて、前記眼点空間において前記頂点処理を行なうように作動し得る前記プログラム命令は、前記眼点空間の前記頂点座標を使用して前記眼点空間においてプリミティブアセンブリングを行なうように作動し得るプログラムコード。
【請求項４３】
請求項42に記載のプログラムコードにおいて、前記眼点空間においてプリミティブアセンブリングを行なうように作動し得る前記プログラム命令は、前記プロセッサにより実行されると、前記眼点空間の前記頂点座標の多角形アセンブリング、線アセンブリング、および点アセンブリングのうちの１つを選択的に行なうように作動し得るプログラム命令を含むプログラムコード。
【請求項４４】
請求項39に記載のプログラムコードにおいて、前記眼点空間において前記頂点座標処理を行なうように作動し得る前記プログラム命令は、実行されると、前記眼点空間の前記頂点座標を射影空間へ変換するように作動し得るプログラム命令を含むプログラムコード。
【請求項４５】
請求項44に記載のプログラムコードにおいて、前記オブジェクト空間において前記頂点座標処理を行なうように作動し得る前記プログラム命令は、実行されると、前記オブジェクト空間においてモデルビュー変換および射影変換を結合するように作動し得るプログラム命令を含むプログラムコード。
【請求項４６】
請求項45に記載のプログラムコードにおいて、モデルビュー変換および射影変換を結合するように作動し得る前記プログラム命令は、プロセッサにより実行されると、１つのベクトルと行列の乗算によって前記オブジェクト空間の前記頂点座標を前記射影空間へ直接変換するように作動し得るプログラム命令を含むプログラムコード。
【請求項４７】
請求項46に記載のプログラムコードにおいて、前記行列は、モデルビュー行列および射影行列の結合行列（MVTPRJ_matrix）であって、ここにおいて前記乗算の結果は、
V_prj = CV_obj* MVTPRJ_matrixまたは
V_prj = V_obj* MVTPRJ_matrix
によって定義される前記射影空間の前記頂点座標(V_pri)を出力するプログラムコードであって、ここでCV_objは前記オブジェクト空間のクリップされた頂点座標であり、V_objは前記オブジェクト空間のクリップされていない頂点座標であるプログラムコード。
【請求項４８】
請求項39に記載のプログラムコードにおいて、前記オブジェクト空間において前記頂点座標処理を行なうように作動し得る前記プログラム命令は、実行されると、
P_eye = Inv_Mc * P、および
P_obj = P_eyeT * M
によって定義される前記眼点空間のクリップ平面(P_eye)を前記オブジェクト空間のクリップ平面(P_obj)に変換する利用者定義クリッピングを行なうように動作可能なプログラム命令を含むプログラムコードであって、ここで、Pは入力クリップ平面であり、Mcは前記クリップ平面のためのモデルビュー行列であり、Inv_Mcは前記Mcの逆行列であり、Mは座標のためのモデルビュー行列であり、Tは行列またはベクトルの転置であり、および、*は行列の乗算を表すプログラムコード。
【請求項４９】
請求項48に記載のプログラムコードにおいて、前記利用者定義クリッピングを行なうように作動し得る前記プログラム命令は、実行されると、もし
P_objT * V_obj >= 0
であればクリップするプログラム命令を含むプログラムコードであって、ここにおいて、P_objはクリップされることになっている前記オブジェクト空間の前記クリップ平面であり、V_objは前記オブジェクト空間の前記頂点座標であり、Tは行列またはベクトルの転置であり、および、*は行列の乗算を表すプログラムコード。
【請求項５０】
3D画像化装置であって、
照明機能が有効であるか無効であるかを決定する手段と、
前記照明機能が有効であるとき眼点空間の頂点座標を処理する眼点空間処理手段と、
前記照明機能が無効であるときオブジェクト空間の頂点座標を処理するオブジェクト空間処理手段と
を具備する装置。
【請求項５１】
請求項50に記載の装置において、前記オブジェクト空間処理手段は、前記オブジェクト空間の前記頂点座標を使用して前記オブジェクト空間においてプリミティブアセンブリングをする手段を含む装置。
【請求項５２】
請求項51に記載の装置において、前記プリミティブアセンブリング手段は、前記オブジェクト空間の前記頂点座標の多角形アセンブリング、線アセンブリング、および点アセンブリングのうちの１つを選択的に行なう手段を含む装置。
【請求項５３】
請求項50に記載の装置において、前記眼点空間処理手段は、前記眼点空間の前記頂点座標を使用して前記眼点空間においてプリミティブアセンブリングをする手段を含む装置。
【請求項５４】
請求項53に記載の装置において、前記眼点空間プリミティブアセンブリング手段は、多角形アセンブリング、線アセンブリング、および点アセンブリングのうちの１つを選択的に行なう手段を含む装置。
【請求項５５】
請求項50に記載の装置において、前記眼点空間処理手段は、前記眼点空間の前記頂点座標を射影空間へ変換する手段を含む装置。
【請求項５６】
請求項55に記載の装置において、前記オブジェクト空間処理手段は、前記オブジェクト空間の前記頂点座標を前記射影空間へ変換するモデルビューおよび射影の結合変換手段を含む装置。
【請求項５７】
請求項56に記載の装置において、前記モデルビューおよび射影の結合変換手段は、１つのベクトルと行列の乗算によって前記オブジェクト空間の前記頂点座標を前記射影空間へ直接変換する手段を含む装置。
【請求項５８】
請求項57に記載の装置において、前記行列は、モデルビュー行列および射影行列の結合行列（MVTPRJ_matrix）であり、および前記乗算の結果は、
V_prj = CV_obj* MVTPRJ_matrixまたは
V_prj = V_obj* MVTPRJ_matrix
によって定義される前記射影空間の前記頂点座標(V_pri)を出力する装置であって、ここでCV_objは前記オブジェクト空間のクリップされた頂点座標であり、V_objはクリップされていない頂点座標である装置。
【請求項５９】
請求項50に記載の装置において、前記オブジェクト空間処理手段は、
P_eye = Inv_Mc * P、および
P_obj = P_eyeT * M
によって定義される前記眼点空間のクリップ平面(P_eye)を前記オブジェクト空間のクリップ平面(P_obj)に変換する利用者定義クリッピング手段を含む装置であって、ここで、Pは入力クリップ平面であり、Mcは前記クリップ平面のためのモデルビュー行列であり、Inv_Mcは前記Mcの逆行列であり、Mは座標のためのモデルビュー行列であり、Tは行列またはベクトルの転置であり、および、*は行列の乗算を表す装置。
【請求項６０】
請求項59に記載の装置において、前記利用者定義クリッピング手段は、もし
P_objT * V_obj >= 0
であればクリップする手段を含む装置であって、ここにおいて、P_objはクリップされることになっている前記オブジェクト空間の前記クリップ平面であり、V_objは前記オブジェクト空間の前記頂点座標であり、Tは行列またはベクトルの転置であり、および、*は行列の乗算を表す装置。
【請求項６１】
請求項50に記載の装置において、前記装置は、ビデオ能力のあるセルラ電話、ビデオ能力のある衛星電話、パソコン、ラップトップ、ビデオ能力のある無線通信または計算装置、および携帯情報端末のうちの1つを具備する装置。
【請求項６２】
オブジェクト空間利用者定義クリッピングを処理する方法であって、眼点空間のクリップ平面(P_eye)をオブジェクト空間のクリップ平面(P_obj)に変換するステップと、前記オブジェクト空間の前記クリップ平面(P_obj)および前記オブジェクト空間の前記頂点座標を使用して前記オブジェクト空間においてクリップされた頂点座標を生成する利用者定義クリッピングステップとを具備する方法。
【請求項６３】
前記オブジェクト空間の前記クリップされた頂点座標および前記オブジェクト空間のクリップされていない頂点座標を射影空間に直接変換するステップをさらに具備する、請求項62に記載の方法。
【請求項６４】
利用者定義クリッピングのデュアルモード処理のための方法であって、照明機能が有効または無効かを決定するステップと、前記照明機能が無効であるときオブジェクト空間においてクリップされた頂点座標を生成するためにオブジェクト空間定義クリッピングでオブジェクト空間頂点座標処理を行なうステップと、前記照明機能が有効であるとき眼点空間においてクリップされた頂点座標を生成するために眼点空間利用者定義クリッピングで眼点空間頂点座標処理を行なうステップとを具備する方法。
【請求項６５】
請求項64に記載の方法において、前記オブジェクト空間頂点座標処理ステップは、前記オブジェクト空間の前記クリップされた頂点座標および前記オブジェクト空間のクリップされていない頂点座標を射影空間に直接変換するステップをさらに具備する方法。
【請求項６６】
請求項64に記載の方法において、前記眼点空間頂点座標処理は、前記眼点空間の前記クリップされた頂点座標および前記眼点空間のクリップされていない頂点座標を射影空間へ変換するステップをさらに具備する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、三次元のグラフィックス処理に関する。
【背景技術】
【０００２】
一般に、三次元(3D)グラフィックスアプリケーションは、3Dオブジェクトを二次元(2D)空間(例えば表示画面)に表示する。2Dグラフィックス画素は、位置、色および輝度の特性を有している。他方、3D画素は、それに加えて、その点が虚軸のZ軸上のどこにあるかを示す深度の特性を有している。各々が深度の値を有する3D画素が組み合わせられると、テクスチャ（texture）が生成される。
【０００３】
３Dオブジェクトについての情報を、表示可能なビットマップへ変換することは、レンダリング（rendering）として知られており、この変換は、相当のメモリと処理パワーとを必要とする。かつて、3Dグラフィックスは、強力なワークステーションの上でのみ利用可能であったが、最近では３Dアクセラレータがパソコン(PC)内で普通にみられるようになってきた。グラフィックスアクセラレータは、多くの３Dレンダリング操作を処理する特別のマイクロプロセッサとメモリとを含んでいる。デスクトップコンピュータのためのOpenGL（登録商標）(オープン・グラフィックス・ライブラリ)は、3Dおよび2Dのコンピュータグラフィックスを作成するアプリケーションを書くためのアプリケーションプログラミングインターフェイス(API)を定義する。APIは、プリミティブ（多角形、線分、点などの図形構成要素）から複雑な三次元シーンを描くための何百もの関数を含んでいる。
【０００４】
利用者定義クリップ平面は、目に見えない多角形を早く効率的にカリング（破棄）すること、パフォーマンスを上げること、および電力を節約することを可能にする。利用者定義クリッピング（user-defined clipping）は、通常、PCグラフィックスシステムのハードウェアの中で行われる。利用者定義クリッピングは、ハンドヘルド装置においては比較的新しい特色である。OpenGL ESは、ソフトウェアとグラフィックスの間のインターフェースを生成するデスクトップOpenGLのサブセットである。さらに、利用者定義クリッピングは、モバイル電話のソフトウェアまたはハードウェアのいずれかの中でも行われる。利用者定義クリッピングがソフトウェアの中で行われる場合、利用者定義クリッピングは、通常、眼点座標（eye coordinates）において行われる。最初に、オブジェクト空間から眼点空間へ頂点(頂点座標)が変換される。変換された頂点は、眼点空間において利用者定義クリッピング平面に対してテストされる。頂点は、アセンブルされ、プリミティブにされる。あるプリミティブが部分的にクリッピング平面の半空間に存在する場合、そのプリミティブは、クリッピング平面によって切り取られる（クリップされる）。しかし、多数の頂点をオブジェクト空間から眼点空間へ変換するには、相当数の計算が必要とされる。
【０００５】
例えば、OpenGL ESまたはOpenGLのような3Dグラフィックスアプリケーションにおいて、利用者は、複数のクリッッピング平面を特定することができる。クリッピング平面は、3D空間の任意の平面である。各平面は、半空間を定義する。どのオブジェクトまたはオブジェクトのどの部分も、半空間内に存在しなければ、そのはみ出した部分がクリップされる。シーン内のどのオブジェクトも、すべてのクリッピング平面に対してテストされる。このプロセスが利用者定義クリッピングと呼ばれるものである。他のタイプのクリッピングは、視錐台（eye frustum）に対してオブジェクトを切り取るものであって、視錐台クリッピングと呼ばれる。視錐台クリッピングについては、ここでは詳述しない。
【０００６】
現在のチャレンジは、ハンドヘルドの３D画像装置にみられる３Dソフトウェアエンジンを使用して、利用者定義クリッピングを効率よく実行することにある。ハンドヘルドの3D画像化装置は、電池電力および処理能力が限られている。多数の頂点をオブジェクト空間から眼点空間へ変換するには、相当数の計算が必要である。これらの計算は、3D画像化装置のパフォーマンスを下げる。
【０００７】
OpenGL ESエンジンによって提供されるような、図1の眼点空間における通常の利用者定義クリッピングプロセスにおいて、ステップS22の頂点オブジェクト座標（V_objと表記される）は、ステップS24においてモデルビュー変換プロセスを用いて変換される。ステップS24において、頂点オブジェクト座標V_objは、V_eyeと表記される頂点眼点座標を形成するために、眼点空間へ変換される。ここでは、頂点オブジェクト座標V_objに対して座標のためのモデルビュー行列Mによる乗算が行われる。頂点眼点座標V_eyeは、ステップS28(多角形の場合)、S30（線分の場合)およびS32(点の場合)のうちの1つにおいてプリミティブアセンブリングにかけられる。ステップS28における多角形プリミティブアセンブリングおよびステップS30における線分プリミティブアセンブリングは、ステップS34におけるフラットシェーディング（簡単な陰影づけ）プロセスにさらにかけられる。陰影モデルがフラットシェーディングの場合、各頂点の色は、三角形または線分の最後の頂点の色で置換される。ステップS34のフラットシェーディングプロセスまたはステップS32の点アセンブルプロセスからの出力は、ステップ40における眼点空間の利用者定義クリッピングプロセス−もし有効であれば−にかけられる。ステップS40におけるクリッピングプロセスを有効にすることについては、後で詳しく説明する。
【０００８】
プリミティブは、多角形、線分または点であってよく、図1に示される通常の利用者定義クリッピングプロセスを使用してクリップされることができる。これらのプリミティブは、ステップS40において利用者クリップ平面に対してクリップされることができる。クリップ座標において、ステップS44のビューボリューム（視体積）は、以下の式で定義される。
【０００９】
−wc ≦ xc ≦ wc
−wc ≦ yc ≦ wc
−wc ≦ zc ≦ wc
ここで、xc、ycおよびzcは、クリップ座標である。
【００１０】
ビューボリュームは、クリップボリュームを生成するnに等しい数の利用者定義クリップ平面によってさらに制限される可能性がある。ここで、nは実装に依存する。各々の利用者定義平面は、半空間を特定する。クリップボリュームは、すべてのこのような半空間とビューボリュームとの交差である(ステップS44)。通常のOpenGLでは、眼点空間または射影空間のいずれかで利用者クリッピングがなされうるということに注目すべきである。しかし、ステップS44は、それが射影空間でなされると仮定している。しかしながら、もしステップS38において利用者定義クリップ平面が有効にならなければ、クリップボリュームは、ステップS44におけるビューボリュームである。したがって、フラットシェーディングプロセスS34(プリミティブが多角形または線分の場合)またはステップS32の点アセンブルプロセスは、ステップS40の利用者定義クリッピングプロセスを経ないでステップS42の射影変換にかけられる。
【００１１】
利用者定義クリップ平面は、S12において、関数ClipPlane（plane、eqn[4]）で特定される。ここで、第1の引数planeの値は、シンボル定数CLIP_PLANEi（iは0とn−1の間の整数）であって、n個の利用者定義クリップ平面の1つを示し、また、eqn[4]は、4つの単精度浮動小数点値のアレイである (OpenGLは、倍精度の浮動小数点を必要とする)。4つの単精度浮動小数点値は、オブジェクト座標におけるステップS14 の平面方程式Pの係数であって、p1、p2、p3およびp4として表記される。Mcと表記される現在のモデルビュー行列は、ステップS18においてクリップ平面Pのために記憶される。クリップ平面Pのための現在のモデルビュー行列Mcの逆は、逆行列プロセスによってステップS20で得られるまたは計算される。結果の逆行列は、Inv_Mcと表記される。前記係数（p1、p2、p3およびp4）がS16において特定されるとき、前記係数に対してInv_Mcが乗算適用され、P_eyeが以下のとおり算出される。
【００１２】
P_eye = (p'1 p'2 p'3 p'4) = (p1 p2 p3 p4) Mc−1。
【００１３】
ここで、Mcは、現在のモデルビュー行列である。Mc−1は、Inv_Mcである。結果の平面方程式は、Mcが特異行列の場合、未定義であって、Mcが適切に調整されていない（poorly-conditioned）場合、不正確であるということになるかもしれない。P_eyeは、ステップS16における眼点座標の平面方程式係数である。ステップS16にはステップS40が続く。ステップS40において、
P_eyeT * V_eye >= 0または
(p'1 * xe + p'2* ye + p'3* ze + p'4 * we ) >= 0
を満足する眼点座標(xe ye ze we)Tを備えるすべての点は、前記平面によって定義される半空間内に存在する。この条件を満足しない点は、半空間に存在しない。ここで、Tは、転置（transpose）であって、また、*は行列またはベクトルの乗算を表す。
【００１４】
ステップS36において、利用者定義クリップ平面が有効コマンドによって有効にされる。代替的に、クリッピングが無効コマンドで無効にされることもある。ステップS38において、利用者定義クリップ平面が有効か、無効かの決定がなされる。もしその決定が「YES」(有効を意味する)であれば、フラットシェーディングプロセスS34(S28 またはS30の多角形または線分アセンブルの場合)または点アセンブルプロセスS32の出力は、ステップS40において眼点空間のクリッピングにかけられる。いずれかのコマンドに対する引数の値は、CLIP_PLANEi（iは、0とnの間の整数）であって、iの値を特定することは、添え字iを備える平面方程式を有効または無効にする。定数は、ClipPlane i = ClipPlane 0 + iに従う。
【００１５】
ステップS32に関して、考察中のプリミティブが点である場合、プリミティブがクリップボリューム内に存在すれば、クリッピングは、プリミティブを不変のまま通過させ、そうでなければ、プリミティブを廃棄する。ステップS30においてプリミティブが線分である場合、プリミティブが完全にクリップボリューム内に存在すれば、クリッピングは、プリミティブに対して何もせず、プリミティブが完全にクリップボリューム外に存在すれば、プリミティブを廃棄する。線分の一部がボリューム内にあり、一部がボリューム外にある場合、線分はクリップされて、一方の頂点または両方の頂点のために新しい頂点座標が計算される。クリップされた線分の終点は、元の線分およびクリップボリュームの境界の両方の上にある。
【００１６】
ステップS40におけるクリッピングプロセスは、クリップされた頂点の各々について、0 ≦ t ≦ 1の間の値tを出力する。クリップされた頂点の座標がDでかつ元の頂点の座標がD1およびD2である場合、tは、次の関係式によって与えられる。
【００１７】
D = t D1+ (1 + t) D2
ここで、tの値は、色およびテクスチャ座標クリッピング等において使用される。
【００１８】
ステップS28においてプリミティブが多角形であるとき、あらゆる辺がクリップボリュームの内部に完全にある場合、プリミティブは、通過させられ、そうでない場合、クリップされるかまたは破棄されるかのいずれかである。多角形クリッピングは、多角形の辺がクリップされる結果をもたらすかもしれないが、それでも多角形の接続性は維持されなければならないので、これらのクリップされた辺は、クリップボリュームの境界に沿って位置する新しい辺によって接続される。したがって、クリッピングは、多角形の中に新しい頂点を導入することを要求する可能性がある。クリッピングによって導入される辺が境界としてフラグされ（辺フラグ＝TRUE）かつこれらの頂点でカットオフされる多角形の元の辺が元のフラグを保持するように、辺フラグは、これらの頂点に関連づけられる。 
もしたまたま多角形がクリップボリュームの境界の辺と交差したら、クリップされる多角形は、この境界辺上の点を含まなければならない。この点は、境界辺と元の多角形の頂点の凸包との交点にあるはずである。
【００１９】
頂点が正負の異なるwc値を持っている線分または多角形は、クリッピング後、複数の接続されているコンポーネントを生成する可能性がある。いくつかの実装は、この状況を取り扱うことを求められていない。すなわち、wc＞0の領域内にあるプリミティブの部分がクリッピングによって作成されることが求められるだけである。
【００２０】
クリップ平面でレンダリングされるプリミティブは、相補的なクライテリアを満足しなければならない。係数（p'1 p'2 p'3 p'4）を備える単一のクリップ平面(または同じように特定された多数のクリップ平面)が有効にされ、一連のプリミティブが描かれると仮定せよ。次に、元のクリップ平面が係数（−p'1 −p'2 −p'3 −p'4）で再特定され(および他のどのクリップ平面についても対応的に)、プリミティブが再び描かれると仮定せよ。この場合、プリミティブはどの画素も欠いてはならないし、またどの画素も当該プリミティブがクリップ平面によってカットされる領域内で2度描かれてはならない。
【００２１】
クリッピングは、平面方程式（各々が４つの単精度浮動小数点係数から成る）およびこれらの利用者定義平面方程式のどれが有効にされるかを示す対応するビットを要求する。初期状態において、すべての利用者定義平面方程式の係数は0で、すべての平面が無効にされている。
【００２２】
眼点空間の利用者定義クリッピングプロセスにについての上記説明を考慮すると、3Dグラフィックスのソフトウェアおよび/またはハードウェアのエンジンを備える３D画像化装置における利用者定義クリッピングに必要な計算を減らす必要がある。
【００２３】
また、オブジェクト空間から眼点空間へ頂点を変換することを避けるためにオブジェクト空間で利用者定義クリッピングを実行する必要がある。3Dゲームコンテンツ処理については、ほとんどの場合、オブジェクト空間から眼点空間へ多数の頂点を変換することに比べて、眼点空間からオブジェクト空間へ少数の利用者定義クリップ平面を変換するほうが、必要とする計算が少なくてすむ。
【００２４】
さらに、照明（lighting）が無効であれば眼点座標の生成を避ける必要がある。
【発明の概要】
【００２５】
以上のことを考慮し、本発明は、限られた電源能力のモバイルまたはハンドヘルドの通信または計算装置において、電力消費がより小さなオブジェクト空間の利用者定義クリッピングに備えることを目的とする。
【００２６】
本発明のさらなる目的は、眼点空間の利用者定義クリッピングに通常必要とされる計算回数を減らすために、オブジェクト空間から眼点空間への頂点変換を避けるオブジェクト空間利用者定義クリッピングを提供することである。
【００２７】
本発明のさらなる目的は、3Dゲームコンテンツの多くの場合において、多数の頂点をオブジェクト空間から眼点空間へ変換するのに必要な計算より、少数の利用者定義クリップ平面を眼点空間からオブジェクト空間へ変換するための計算を少なくすることである。
【００２８】
本発明の前記の目的および他の目的は、以下のものを具備するオブジェクト空間の利用者定義クリッピングドライバによって達成される：オブジェクト空間において頂点座標のプリミティブアセンブルを行なうことができるプリミティブアセンブリングモジュール、およびオブジェクト空間のクリップ平面（P_obj）およびオブジェクト空間のプリミティブアセンブルされた頂点座標を使用して、オブジェクト空間のクリップされた頂点座標を生成するように作動し得る利用者定義クリッピングモジュール。
【００２９】
オブジェクト空間のクリップされた頂点座標およびクリップされていない頂点座標は、１つのベクトルと行列の乗算によってオブジェクト空間から射影空間に直接変換される。照明が無効でかつ利用者定義クリッピングが無効または有効の場合、2つの変換（モデルビューおよび射影）を2つの4×4行列ではなく、1つの4×4行列に結合することができる。
【００３０】
ドライバは、ソフトウェア、ハードウェアまたはハードウェアとソフトウェアの組み合わせで実装されてもよい。
【００３１】
代替的に、オブジェクト空間でクリップされた頂点座標は、射影変換の直前まで、オブジェクト空間から眼点空間へ変換されないとすることもできる。
【００３２】
本発明のさらなる態様は、プロセッサにより実行可能なプログラムコードであって、実行されると、オブジェクト空間で頂点座標をプリミティブアセンブルするように作動し得るプログラム命令を有するプログラムコードを提供することである。このコードは、オブジェクト空間のクリップ平面（P_obj）およびオブジェクト空間のプリミティブアセンブルされた頂点座標を使用して、オブジェクト空間のクリップされた頂点座標を生成する利用者定義クリッピングモジュールを実行するように作動することも可能でもある。
【００３３】
本発明のさらなる態様は、３Dグラフィックスエンジンにおいて照明機能が無効であるとき、オブジェクト空間の頂点座標の利用者定義クリッピングを行なうように作動し得るオブジェクト空間利用者定義クリッピングドライバを具備する３Dグラフィックスエンジンを提供することである。この３Dグラフィックスエンジンは、オブジェクト空間のクリップされた頂点座標を射影空間へ変換するグラフィックス・コアも含んでいる。
【００３４】
本発明のさらなる態様は、プロセッサにより実行可能なプログラム命令を有するプログラムコードであって、実行されると、照明が有効であるとき眼点空間の頂点座標の頂点座標処理を行うとともに照明が無効であるときオブジェクト空間の頂点座標の頂点座標処理を行なうように作動し得るプログラムコードを提供することである。
【００３５】
オブジェクト空間の頂点処理を行なうように作動し得るプログラム命令は、オブジェクト空間の頂点座標およびオブジェクト空間の利用者定義クリッピングを使用して、オブジェクト空間でプリミティブアセンブルを行なうように作動することができる。
【００３６】
眼点空間で頂点処理を行なうように作動し得るプログラム命令は、眼点空間の頂点座標および眼点空間の利用者定義クリッピングを使用して眼点空間でプリミティブアセンブルを行なうように作動することができる。
【００３７】
本発明のさらなる態様は、照明機能が有効か無効かを決定する決定手段、照明機能が有効であるとき眼点空間の頂点座標を処理する眼点空間処理手段、および照明機能が無効であるときオブジェクト空間の頂点座標を処理するオブジェクト空間処理手段を具備する3D画像化装置を提供することである。
【００３８】
オブジェクト空間処理手段は、オブジェクト空間の頂点座標およびオブジェクト空間の利用者定義クリッピングを使用して、オブジェクト空間でプリミティブアセンブルを実行する。
【００３９】
眼点空間処理手段は、眼点空間の頂点座標および眼点空間の利用者定義クリッピングを使用して、眼点空間でプリミティブアセンブルを実行する。
【００４０】
オブジェクト空間処理手段は、１つのベクトルと行列の乗算によって、オブジェクト空間のクリップされた頂点座標およびクリップされていない頂点座標を射影空間へ直接変換する手段を含んでいる。照明が無効でかつ利用者定義クリッピングが無効または有効の場合、2つの変換（モデルビュー変換および射影変換）は、2つの行列にではなく、1つの行列に結合されることができる。
【００４１】
本発明のさらなる態様は、以下のステップを具備するオブジェクト空間の利用者定義クリッピングの方法である：眼点空間のクリップ平面(P_eye)をオブジェクト空間のクリップ平面(P_obj)へ変換すること、およびオブジェクト空間のクリップ平面(P_obj)およびオブジェクト空間の頂点座標を使用して、オブジェクト空間のクリップされた頂点座標を生成するために利用者定義クリッピングを行なうこと。
【００４２】
本発明のさらなる態様は、以下のステップを具備する利用者定義クリッピングのデュアルモード処理方法である：照明機能が有効か無効かを決定するステップ、照明機能が無効であるとき、オブジェクト空間のクリップされた頂点座標を生成するためにオブジェクト空間の利用者定義クリッピングを使用してオブジェクト空間頂点座標処理を行なうステップ、および照明機能が有効であるとき、眼点空間のクリップされた頂点座標を生成するために眼点空間の利用者定義クリッピングを使用して眼点空間頂点座標処理を行なうステップ。
【００４３】
利用者定義クリッピングのデュアルモード処理方法は、以下のステップをさらに具備する：オブジェクト空間のクリップされた頂点座標およびオブジェクト空間のクリップされていない頂点座標を射影空間へ直接変換するステップ。
【００４４】
本発明の利点は、照明が無効であるとき眼点座標の生成を避けることによってもたらされるパフォーマンスの向上と消費電力の低減である。
【図面の簡単な説明】
【００４５】
以上の要約ならびに以下の本発明の好ましい実施形態についての詳細な説明は、添付の図面とともに読まれるとき、よりよく理解されるであろう。発明の例示のために、現時点で好ましい実施形態が図において示される。しかしながら、発明はここで示される正確な構成に限られるものではないことが理解されなければならない。
【図１】図1は、眼点空間の通常の利用者定義クリッピングプロセスの流れ図を例示する。
【図２】図2は、眼点空間の利用者定義クリッピングを備える通常の頂点プロセスパイプラインの流れ図を例示する。
【図３】図3は、本発明によるオブジェクト空間の利用者定義クリッピングプロセスの流れ図を例示する。
【図４】図4は、本発明によるオブジェクト空間の利用者定義クリッピングを備える頂点プロセスパイプラインの流れ図を例示する。
【図５Ａ】図5Aは、本発明によるソフトウェアで実装されるオブジェクト空間の利用者定義クリッピングドライバを備える三次元(3D)画像化装置のブロック図を例示する。
【図５Ｂ】図5Bは、本発明によるハードウェアで実装されるオブジェクト空間の利用者定義クリッピングドライバを備える三次元(3D)画像化装置のブロック図を例示する。
【図６】図6は、図5Aまたは5Bの装置の記憶ユニットの記憶項目のブロック図を例示する。
【図７Ａ】図7Aは、図5A の装置のオブジェクト空間の利用者定義クリッピングドライバの一般的ブロック図を例示する。
【図７Ｂ】図7Bは、図5B の装置のオブジェクト空間の利用者定義クリッピングドライバの一般的ブロック図を例示する。
【図８】図8は、本発明によるデュアルモードの利用者定義クリッピング方法の流れ図を例示する。
【発明を実施するための形態】
【００４６】
本発明については多くの異なる形式での実施形態が許されるところ、本件明細書および添付の図面は、発明の使用例としての若干の形式のみを開示するものである。本発明は、説明されるとおりの実施形態に限定されることを意図したものではなく、本発明の範囲は、添付されている特許請求の範囲において明らかにされることになろう。
【００４７】
本発明による3D画像化装置の好ましい実施形態は、オブジェクト空間の利用者定義クリッピング方法についての特定の適用例によって以下において説明される。3D画像化装置は、パソコン(PC)の3Dグラフィックスシステム、PDAのようなハンドヘルドの計算装置、または3Dグラフィックスアプリケーションを採用するモバイル電話であってもよい。しかしながら、ゲームアプリケーション、シミュレータグラフィックスおよび仮想現実グラフィックスのような目的のための3Dグラフィックスアプリケーションを備えるその他のタイプの計算装置にも本発明が十分適用可能であることが当業者によって認識されるであろう。本発明の実装は、3Dソフトウェアエンジンにおける利用者定義クリッピングプロセスに適している。
【００４８】
さて図面を詳しく参照すると、全体を通じて同様のエレメントに同様の番号が使用されているところ、図3においては、本発明によるオブジェクト空間の利用者定義クリッピング方法（一般に番号100で特定）の実施形態が示されている。
【００４９】
図4に最もよく示されているように、オブジェクト空間の利用者定義クリッピング方法100は、照明が無効であるときのオブジェクト空間の利用者定義クリッピングを備える頂点プロセスパイプライン150を含んでいる。方法100は、ステップS112においてV_objと表記されるような頂点オブジェクト座標のためのデータを識別する。その後、頂点オブジェクト座標V_objは、ステップS118(多角形の場合)、S120(線分の場合)およびS122(点の場合)のうちの1つにおいてプリミティブアセンブリングにかけられる。ステップS118の多角形およびステップS120の線分のためのプリミティブアセンブリングは、ステップS124のフラットシェーディングプロセスにかけられる。陰影モデルがフラットシェーディングの場合、各頂点の色は、三角形または線分の最後の頂点の色で置き換えられる。ステップS124のフラットシェーディングプロセスまたはS122の点アセンブルプロセスからの出力は、利用者定義クリッピングプロセスに（ステップS126によって有効にされれば）かけられる。
【００５０】
ビューボリュームは、クリッピングプロセスS130においてクリップ半空間を生成するnに等しい数の利用者定義クリップ平面によって、さらに制限される可能性がある。ここで、nは実装に依存する。各利用者定義平面は、半空間を特定する。クリップボリュームは、すべてのそのような半空間とビューボリュームとの交差である(ステップS134)。しかしながら、どの利用者定義クリップ平面もステップS126において有効でないとき、クリップボリュームは、ステップS134におけるビューボリュームである(モデルビュー変換および射影変換の結合変換にかけられる)。
【００５１】
クリッピングは、平面方程式（各方程式は４つの単精度浮動小数点係数から成る）およびこれらの利用者定義平面方程式のうちのどれが有効かを示す対応するビットを必要とする。初期状態において、すべての利用者定義平面方程式の係数は0であって、すべての平面は無効である。
【００５２】
クリップ平面が無効であるとき、ステップS128のあとにS132が続く。ステップS132において、フラットシェーディングプロセスS124(プリミティブが多角形または線分である場合)またはステップS122の点アセンブルプロセスからの出力は、ステップ130の利用者クリッピングなしで、ステップS132におけるモデルビュー変換および射影変換の両方にかけられる。ステップS132のあとにステップS134が続き、ここでは、以下によって定義されるビューボリュームクリッピングプロセスが起こる。
【００５３】
−wc ≦ xc ≦ wc
−wc ≦ yc ≦ wc
−wc ≦ zc ≦ wc
ここで、xc、ycおよびzcは、クリップ座標である。ステップS134は、方法100を終える。
【００５４】
次に図2を参照すると、眼点空間の利用者定義クリッピングを備える通常の頂点プロセスパイプライン50において、このパイプライン50は、ステップS22の頂点オブジェクト座標を含んでいる。ステップS22にはステップ24が続く。ステップS24において、モデルビュー変換プロセスが起こり、オブジェクト空間の頂点オブジェクト座標は、眼点空間へ変換される。その後、ステップS24のあとに、ステップS28、S30、S32およびS34を一般に含むプリミティブアセンブリングプロセスS27が続く。プリミティブアセンブリングプロセスS27のあとに利用者クリッピングプロセスS40(クリッピングが有効になっていると仮定して)が続き、S40のあとにS42の射影変換プロセスが続く。ステップS42のあとにステップS44が続き、ここでは、ビューボリュームクリッピングのプロセスが起こる。ステップS44は、パイプライン50を終える。
【００５５】
他方、図4において最もよくわかるように、オブジェクト空間の利用者定義クリッピングを備える頂点プロセスパイプライン150は、スプリットし、ここにおいて、ドライバ218A(図7A)は、ステップS117においてオブジェクト空間におけるプリミティブアセンブルを実行し、そしてS117 のあとにS131のオブジェクト空間の利用者定義クリッピングプロセスが後続する（有効コマンドがすでに受理されていると仮定して）。ステップS117は、ステップS118、S120、S122およびS124を含み、ステップS131は、ステップS102、S104、S106、S108、S110、S114、S116、S126、S128およびS130を含む。３Dグラフィックスエンジン220は、ソフトウェアグラフィックスエンジンまたはハードウェアグラフィックスエンジンとして実装され、グラフィックス・コアを提供する。３Dグラフィックスエンジン220Aは、プログラム命令216Aから離れて図示されているが、適切なプログラム命令(不図示)を含むだろう。図4、図5Aおよび図7Aに示される実施形態において、ドライバ218Aは、一般にソフトウェアとして実装される。３Dグラフィックスエンジン220Aにおいて、ステップS112'の頂点オブジェクト座標は、まだオブジェクト空間内にあるものの、クリップされた頂点オブジェクト座標（CV_objと表記）であって、ステップS132 のモデルビュー変換および射影変換の結合プロセスによって射影空間頂点座標へ変換される必要がある。このことについては、単一の4×4行列のような単一行列を使用して、あとでより詳細に説明する予定である。利用者クリッピングステップS131を通過するいくつかの頂点座標(V_obj)は、平面が無効にされることの結果として(ステップS128からS132まで)、またはS130の条件が満たされない場合、クリップされない。これらの頂点座標は、オブジェクト空間のクリップされない頂点座標(V_obj)である。したがって、ステップS112'の頂点座標は、CV_objおよびV_objの両方であるデータをステップS132に提供することができる。
【００５６】
代替的に、モデルビュー変換および射影変換の結合プロセスS132は、図1のステップS24と同じ方程式を使用するステップS132A(点線で示される)で表記される2ステッププロセスを含んでもよい。ステップS132Aのモデルビュー変換は、ステップS24のモデルビュー変換と同じである。ステップS132Aは、ステップS132B(点線で示される)の射影変換プロセスの直前に、クリップされた頂点オブジェクト座標を眼点空間に変換する。この2ステッププロセスは、2つの別々の行列を必要とする。ステップS132またはS132B のあとにS134のビューボリュームクリッピングプロセスが続く。
【００５７】
次にステップS132のモデルビュー変換および射影変換の結合プロセスを参照し、下記のことを仮定する。
【００５８】
V_eye = V_obj * MVT_matrix
ここで、MVT_matrixは、モデルビュー変換行列である。利用者クリッピングのためのV_eyeが使用されないので、行列MVT_matrixおよび行列Projection_matrixは、1つの行列MVTPRJ_matrixに結合される。射影座標は、
V_prj = CV_obj* MVTPRJ_matrixまたは
V_prj = V_obj* MVTPRJ_matrix
として計算することができる。ここで、CV_objは、オブジェクト空間のクリップされた頂点座標であり、また、V_objは、オブジェクト空間のクリップされていない頂点座標である。V_prjは、射影空間のすべての頂点座標であり、また、MVTPRJ_matrixは、MVT_matrixおよびProjection_matrixの結合である。
【００５９】
パイプライン150は、頂点をオブジェクト空間から眼点空間へ変換することを避けるために、オブジェクト空間において利用者定義クリッピングを実行する。3Dゲームコンテンツでは、ほとんどの場合、パイプライン150は、多数の頂点をオブジェクト空間から眼点空間へ変換するより、少数の利用者定義クリップ平面を眼点空間からオブジェクト空間へ変換するほうが、少ない計算を必要とする。
【００６０】
さらに、パイプライン150において、モデルビュー変換は、S132に表記されている射影変換と結合されることができる。この場合、ステップS131の利用者定義クリッピングプロセスの後、クリップされた頂点座標は、2つではなく１つのベクトルと行列の乗算によって、オブジェクト空間から射影空間へ直接変換される。通常のOpenGLでは、照明および利用者定義クリッピングの両方が無効のとき、2つの変換が結合されることができる。本件発明の例示的実施形態では、照明が無効であるかぎり、2つの変換は結合されることができる。したがって、利用者定義クリッピングは、無効または有効のいずれであってもよい。理解されることができるように、単一の行列の使用は、クリップされた頂点座標を射影空間の中に移すための計算を低減する。
【００６１】
再び図3を参照すると、利用者は、ステップS102で複数のクリッピング平面を特定することができる。クリッピング平面は、3D空間の任意の平面である。各平面は、半空間を定義する。利用者定義クリッピングにおいて、どのオブジェクトまたはオブジェクトのどの部分も、半空間内に存在しなければ、そのはみ出した部分がクリップされる。シーンのどのオブジェクトも、すべてのクリッピング平面に対してテストされる。
【００６２】
ステップS102において、利用者定義クリップ平面は、ClipPlane(plane、eqn[4])を備える関数を呼び出すことによって特定される。ここで、第1の引数planeの値は、記号の定数CLIP_PLANEi（iは、0とn−1の間の整数）であって、n個の利用者定義クリップ平面の１つを表し、また、eqn[4]は、4つの浮動小数点の値のアレイである。4つの浮動小数点の値は、p1、p2、p3およびp4として表記されるオブジェクト座標のステップS104の平面方程式Pの係数である。Mcと表記される現在のモデルビュー行列は、ステップS108におけるクリップ平面のために記憶される。クリップ平面のための現在のモデルビュー行列Mcの逆は、逆行列プロセスによってステップS110で得られるまたは計算される。逆行列は、Inv_Mcと表記される。前記係数がS106において特定されるとき、前記係数に対してInv_Mcが乗算適用され、その結果、
P_eye = (p’1 p’2 p’3 p’4) = (p1 p2 p3 p4) Mc−1
で定義されるP_eyeが算出される。ここで、Mcは、現在のモデルビュー行列である。Mc−1は、Inv_Mcと表記される行列Mcの逆行列である。結果の平面方程式は、Mcが特異行列の場合、未定義であって、Mcが適切に調整されていない（poorly-conditioned）場合、不正確であるということになるかもしれない。また、P_eyeは、眼点座標の平面方程式の係数である。
【００６３】
ステップS106の眼点空間の平面方程式係数P_eyeは、モデルビュー行列座標MによってステップS114でオブジェクト空間に変換される。S116のモデルビュー行列座標Mは、ステップS26の行列座標と同じである。さらに、ステップS132Aに関し、モデルビュー変換は、ステップS26と同じであり得る。眼点空間の平面方程式係数のオブジェクト空間への変換は、
P_obj = (p’1 p’2 p’3 p’4)TMまたは
P_obj = P_eyeT *M = (po1 po2 po3 po4)
によって定義される。ここで、P_objは、オブジェクト空間の平面方程式係数である。Tは、行列またはベクトルの転置を表わし、また、*は、行列の乗算を表わす。 
ステップS114のあとにステップS130が続き、ここでは、
P_objT* V_obj >= 0
を満たす頂点オブジェクト座標V_obj = (xo yo zo wo)を備えるすべての点は、前記平面で定義される半空間内にあるということになる。逆に、この条件を満たさない点は、この半空間内にはないということになる。
【００６４】
ステップS126では、有効コマンドで利用者定義クリップ平面が有効になる。代替的に、利用者は、無効コマンドでクリップ平面を無効にすることもできる。ステップS128では、利用者定義クリップ平面が有効であるか無効であるかの決定がなされる。その決定が「YES」(有効を意味する)の場合、フラットシェーディングプロセスS124(ステップS118またはS120の多角形または線分アセンブルの場合)または点アセンブルプロセスS122からの出力は、オブジェクト空間のステップS130におけるクリッピングにかけられる。いずれかのコマンドに対する引数の値は、CLIP_PLANEi（iは、0とnの間の整数）である。iの値を特定することは、添え字iを備える平面方程式を有効または無効にする。定数は、ClipPlane i = ClipPlane 0 + iに従う。
【００６５】
次にステップS130を参照すると、利用者定義クリッピングプロセスは、眼点空間ではなく、オブジェクト空間で適用される。クリッピングのためのすべての頂点座標がオブジェクト空間から眼点空間へ変換されるのではなく、ステップS104で特定された利用者定義クリップ平面が眼点空間からオブジェクト空間へ変換され、クリッピングはそれに対して適用される。このようにして、複数の頂点座標の変換に必要な計算は、ステップS106のクリップ平面をオブジェクト空間へ変換するためのより少ない計算に置き換えられる。ほとんどの場合、頂点座標の個数は、特定された利用者定義クリップ平面の個数よりはるかに多い。利用者定義クリッピングをオブジェクト空間に移動させることによって、多くの計算サイクルが節約され、もって３D画像化能力を備えて成るモバイルまたはハンドヘルド装置の電力消費が軽減される。
【００６６】
眼点空間における通常の利用者クリッピングは、下記の変換にしたがって、P_eyeT * V_eyeで定義される。
【００６７】
P_eyeT * V_eye = P_eyeT * (M * V_obj)
= (P_eyeT * M) * V_obj
= P_objT* V_obj
ここで、P_objT = P_eyeT * Mである。
【００６８】
このようにして、ステップS130の利用者クリッピングプロセスは、P_objT * V_objを用いて行なわれることができる。このことが方法100の鍵である。
【００６９】
頂点ベースの照明プロセスは眼点空間の頂点をベースとするので、オブジェクト空間のクリッピングを行なう方法100は、照明が有効のとき計算を節約するためには適用可能ではないだろう。そのかわり、照明が有効なときは、通常の方法10が使用されるべきである。OpenGLおよびOpenGL ESには、glEnable(GLenum、アレイ)等を用いて照明を有効および無効にするアプリケーションプログラムインターフェイス(API)がある。
【００７０】
次に図8を参照すると、デュアルモードの利用者定義クリッピング方法160が図5Aおよび5B の3D画像化装置200Aまたは200Bにおける使用のために示されている。当該方法は、S164に始まる。S164では、照明が無効であるかどうかの決定が行われる。ステップS164の決定が「YES」である場合、S164にS166が続き、S166では、利用者定義クリッピングによる頂点処理が図3または図4の流れ図にしたがってオブジェクト空間で起こる。他方、ステップS164の決定が「NO」である場合、S164にはS168が続き、S168では、利用者定義クリッピングによる頂点処理が図1および2に示されるように眼点空間で起こる。かくして、ドライバ218Aまたは218Bは、照明が有効のとき作動する状態にあることを必要とするのみである。
【００７１】
図4の頂点ベースの処理は、グラフィックスパイプラインにおける頂点ごとの操作の内部ループの中にある。頂点ごとのモデルビュー変換を無くすことによって、システムは、頂点データの処理を高速化する。頂点ベースの処理とは、データを頂点ごとに処理することである。ステップS134のビューボリュームクリッピングとスクリーン上のビューポートの後、処理は、画素ごとのレベルになる。多角形の各頂点のデータに基づいて、その多角形内のすべての画素が描画／充足される。計算の節約は、消費電力の削減に直結し得る。
【００７２】
利用者クリッピングがより早い時点で行われるので、つまりクリッピングが眼点空間ではなくオブジェクト空間でなされるので、図4において最もよくわかるように、頂点座標をデジタル信号プロセサ(DSP)またはハードウェアベースのグラフィックス・コアに送信する前に、ソフトウェア中の前処理として利用者定義クリッピングプロセスを適用することが可能になる。そうすることによって、DSPまたはハードウェアグラフィックス・コアにおけるグラフィックスパイプラインの複雑度が低減され、かつあらかじめ開発されたグラフィックスシステムで利用者クリッピングの特徴を実現することができる。頂点座標は、S117でアセンブルされ、S131の利用者定義クリップ平面によってクリップされる。オブジェクトのクリップされた頂点座標は、射影空間への変換のためのステップS132におけるさらなる処理のために３Dグラフィックスエンジン220Aに送られる。
【００７３】
［点］
次にS117のプリミティブアセンブルを参照すると、プリミティブが点である場合、オブジェクト空間S112の頂点オブジェクト座標は、V_objである。眼点空間の頂点座標V_eyeは、
V_eye=M* V_obj
である。S104のオブジェクト空間の入力クリップ平面はどれもPである。S108のクリップ平面のためのモデルビュー変換行列は、Mcである。次に、眼点空間のクリップ平面P_eyeは、
P_eye = Inv_Mc * P
である。
【００７４】
その点のためのモデルビュー変換行列を用いて、S114において平面Pを眼点空間からその点のオブジェクト空間へ変換せよ。その点のオブジェクト空間のクリップ平面P_objは、
P_obj = P_eyeT * M
である。次に、ステップS130またはS131にしたがってその点のオブジェクト空間のクリッピングを実行せよ。以下に記される証明のように、P_eyeT * V_eye >= 0場合、そしてその場合にかぎり、P_objT* V_obj>= 0のである。この証明は、以下のように定義される。
【００７５】
P_objT * V_obj
= (P_eyeT * M) * V_obj
= P_eyeT * (M * V_obj)
= P_eyeT * V_eye
ここで、眼点空間の点の頂点座標V_eyeは、Mによってオブジェクト空間の座標から変換される。これは、
V_eye = M * V_obj
によって定義される。
【００７６】
［線分］
プリミティブが線分の場合、この線分は両端の2つの頂点によって記述されることができる。オブジェクト空間において、その2つ頂点は、V_obj1とV_obj2である。モデルビュー変換行列Mによって線分を眼点空間へ変換するために、
V_eye1 = M* V_obj1、および
V_eye2 = M* V_obj2
である。S104のオブジェクト空間の入力クリップ平面はどれもPである。S108のクリップ平面のためのモデルビュー変換行列は、Mcである。次に、眼点空間のクリップ平面P_eyeは、
P_eye = Inv_Mc* P
によって定義される。
【００７７】
線分のためのモデルビュー変換行列Mを用いて、S114において平面Pを眼点空間から線分のオブジェクト空間へ変換せよ。線分のオブジェクト空間のクリップ平面P_objは、
P_obj = P_eyeT * M
によって定義される。次に、ステップS130またはS131にしたがって線分のオブジェクト空間でクリッピングを実行せよ。
【００７８】
線分が全体として眼点空間のクリップボリュームの中または外にあるとき、そのときにかぎり、線分は全体としてオブジェクト空間のクリップボリュームの中または外にあることは明白である。眼点空間で計算されたクリップ点がオブジェクト空間で計算されたクリップ点から変換された線分と同じであることを立証する証明は、以下に記される。
【００７９】
クリップ点がオブジェクト空間および眼点空間の両方で同じであることを証明するために、オブジェクト空間のクリップ点をC_objとして定義し、眼点空間のクリップ点をC_eyeとして定義せよ。tは、平面にクリップされた線におけるクリップ点の比と仮定せよ。オブジェクト空間において、次に、
t_obj = P_objT * V_obj2 / (P_objT * V_obj2 + P_objT * V_obj2)、
および眼点空間において、
t_eye = P_eyeT * V_eye2 / (P_eyeT * V_eye2 + P_eyeT * V_eye2)
である。
【００８０】
オブジェクト空間のクリップ点は、
C_obj = t_obj * V_obj1 + (1 − t_obj) * V_obj2
である。
【００８１】
眼点空間のクリップ点は、
C_eye = t_eye *V_eye1 + (1 − t_eye) * V_eye2
である。
【００８２】
もしt_eye = t_objであれば、眼点空間のクリップ点は、線のモデルビュー変換行列Mによって変換されたオブジェクト空間のクリップ点であるべきである。C_eyeについての証明は、C_eye:
= t_eye *V_eye1 + (1 − t_eye) * V_eye2 
= t_ obj * (M * V_obj1) + (1 − t_obj) * (M * V_obj2)
= M * (t_obj * V_obj1 + (1 − t_obj) * V_obj2) 
= M * C_obj
によって定義される。
【００８３】
［多角形］
多角形の各辺は前述の線分として扱われるので、線分について真であることは、多角形についても真である。
【００８４】
前述のことを考慮すると、通常のアプローチと本発明の間には3つの大きな違いがある。第1に、本発明では、ステップS132Bの射影変換の直前まで、または射影空間へ直接変換されるまで、頂点座標は、オブジェクト空間から眼点空間へ変換されない。第2に、本発明では、利用者定義クリップ平面は、眼点空間からオブジェクト空間へ変換される。第3に、本発明では、クリッピングは、P_eyeT * V_eye >= 0かどうかではなく、P_objT* V_obj >= 0かどうかで決定される。
【００８５】
再び図5Aおよび6を参照して、次に三次元(3D)の画像化装置200Aについて詳しく説明する。装置200Aは、双方向の有線または無線通信を可能にする通信設備（不図示）を備えるモバイル電話または他のハンドヘルド計算装置（例えば、PDA）、およびビデオ能力のあるモバイル電話、セルラ電話または衛星電話であってもよい。装置200Aは、PC、ラップトップまたは他の無線計算装置であってもよい。装置200Aは、スクリーン上に2Dビットマップを表示するためのプロセッサ210および表示装置212を含んでいる。記憶ユニット214は、頂点オブジェクト座標236、オブジェクト空間のクリップされた頂点座標(CV_obj)236'、クリップ平面230、前記平面のためのモデルビュー行列232、座標のためのモデルビュー行列234、射影変換行列240、およびMVTPRJ_matrix 242のために、必要な記憶を提供する。記憶ユニット214は、ボリュームクリッピング238も含んでいる。記憶ユニット214は、装置200Aのタイプで使用される1つまたは複数の適切なコンピュータ可読媒体を含んでいる。
【００８６】
装置200Aは、オブジェクト空間利用者定義クリッピングドライバ218A または事前処理ステージを備えるプログラム命令216A、および３Dグラフィックスアプリケーションモジュール222（以下に限るものではないが、例えば、ゲームをするためのゲームコンテンツ、シミュレータ、CAD、仮想現実グラフィックスを有するもの）をさらに含んでいる。眼点空間利用者定義クリッピングモジュール224は、図1および2に示される眼点空間の利用者定義クリッピングを備える頂点処理用ソフトウェアであり、デュアルモードの利用者定義クリッピング方法160で使用されるプログラム命令216Aに統合されている。それにもかかわらず、デュアルモード操作については、眼点空間利用者定義クリッピングモジュール224は、ハードウェアベースのものであってもよく、216Bのプログラム命令から取り除かれることになろう。
【００８７】
次に図5Bを参照すると、三次元(3D)画像化装置200Bは、オブジェクト空間利用者定義クリッピングドライバ218Bのハードウェア実装を描いている。装置200Aと同様の装置200Bは、双方向の有線または無線通信を可能にする通信設備（不図示）を備えるモバイル電話または他のハンドヘルドの計算装置（例えば、PDA）、およびビデオ能力のあるモバイル電話、セルラ電話または衛星電話であってもよい。装置200Bは、PCまたはラップトップであってもよい。装置200Bは、スクリーン上に2Dビットマップを表示するためのプロセッサ210および表示装置212、および記憶ユニット214を含んでいる。
【００８８】
装置200Bは、３Dグラフィックスアプリケーションモジュール222（点線の中に図示）（以下に限るものではないが、例えば、ゲームをするためのゲームコンテンツ、シミュレータ、CAD、仮想現実グラフィックスを有するもの）を含んでいる。眼点空間利用者定義クリッピングモジュール224は、図1および2に示される眼点空間の利用者定義クリッピングを備える頂点処理用ソフトウェアであり、デュアルモードの利用者定義クリッピング方法160で使用されるプログラム命令216Bに統合されている。
【００８９】
ハードウェア実装において、３Dグラフィックスエンジン220Bは、ハードウェアベースのオブジェクト空間利用者定義クリッピングドライバ218Bを統合するまたは接続する。それにもかかわらず、デュアルモード操作については、眼点空間利用者定義クリッピングモジュール224は、ハードウェアベースのものであってもよく、216Bのプログラム命令から取り除かれることになろう。
【００９０】
図7Aを特に参照すると、利用者クリッピングは、頂点座標を３Dグラフィックスエンジン220AのDSPまたはハードウェアグラフィックス・コアに送り込む前に、ソフトウェア中の事前処理ステージまたはドライバ218Aとして、より早い時点で行われる。ソフトウェアベースのオブジェクト空間利用者定義クリッピングドライバ218Aは、オブジェクト空間の頂点オブジェクト座標240を含んでいる（点線の中に図示）。ドライバ218Aは、プリミティブアセンブリングモジュール242Aおよびオブジェクト空間利用者定義クリッピングモジュール244Aをさらに含んでいる。プリミティブアセンブリングモジュール242Aは、多角形アセンブルサブモジュール242AA線分アセンブルサブモジュール242AB、点アセンブルサブモジュール242ACおよびフラットシェーディングサブモジュール242ADを含んでいる。プリミティブアセンブリングモジュール242Aは、ステップS118、S120、S122およびS124のプロセスを実行するプログラム命令を含んでいる。ドライバ218Aは、３Dグラフィックスエンジン220Aとドライバ218Aを接続するために３Dグラフィックスエンジン・ソフトウェア・インタフェース246Aも含んでいる。.
図7Bを特に参照すると、利用者クリッピングは、頂点座標を３Dグラフィックスエンジン220BのDSPまたはハードウェアグラフィックス・コアに送り込む前に、ハードウェア中の事前処理ステージまたはドライバ218Bとして行われる。ハードウェアベースのオブジェクト空間利用者定義クリッピングドライバ218Bは、オブジェクト空間の頂点オブジェクト座標240を含んでいる（点線内に図示）。ドライバ218Bは、プリミティブアセンブリングモジュール242Bおよびオブジェクト空間利用者定義クリッピングモジュール244Bをさらに含んでいる。プリミティブアセンブリングモジュール242Bは、多角形アセンブルサブモジュール242BA、線分アセンブルサブモジュール242BB、点アセンブルサブモジュール242BCおよびフラットシェーディングサブモジュール242BDを含んでいる。プリミティブアセンブリングモジュール242Bは、ステップS118、S120、S122およびS124のプロセスを実行する。ドライバ218Bは、ドライバ218Bを３Dグラフィックスエンジン220Bと接続するために３Dグラフィックスエンジン・ハードウェア・インタフェース246Bも含んでいる。
【００９１】
本発明によるオブジェクト空間の利用者定義クリッピングを行なう方法および装置は、照明がなければ眼点座標の生成を避けることにより、より高いパフォーマンスを実現し、より小さな消費電力を必要とするということが当業者に理解されるであろう。
【００９２】
本発明の実施形態についての上記説明は、例示と説明のために示されたものである。 網羅的であるとか、発明を開示されているままの正確な形式に限定するとか、そういうことを意図したものではなく、上記教示に照らして様々な変形が可能であり、また発明の実行から様々な変形が得られてもよい。企図される特定の使用への適合に応じて様々な実施形態でかつ様々な修正を伴って本件発明を利用することが当業者にとって可能となるように本件発明の原理およびその応用を説明することを目的として、実施形態は選択され記述された。本発明の範囲は、ここに添付されている請求項およびそれらの均等物によって定義されることが意図されている。
【図１】
2010503927.tif 000003
【図２】
2010503927.tif 000004
【図３】
2010503927.tif 000005
【図４】
2010503927.tif 000006
【図５Ａ】
2010503927.tif 000007
【図５Ｂ】
2010503927.tif 000008
【図６】
2010503927.tif 000009
【図７Ａ】
2010503927.tif 000010
【図７Ｂ】
2010503927.tif 000011
【図８】
2010503927.tif 000012
【国際調査報告】
2010503927.tif 000013
2010503927.tif 000014
2010503927.tif 000015