(57)【要約】  【課題】  コマンド発行のための処理負荷及びシステムのオーバーヘッドの低減を図ることができる演算処理装置を提供する。  【解決手段】  単独のコマンド「Ａｆｆｉｎｅ」，「Ｐｐｒｏｊ」及び「Ｖｉｅｗ」を組み合わせて１つのコマンド「ＡＰＶ」として実行可能なため、コマンドを発行するＣＰＵ５の処理負荷およびシステムのオーバーヘッドが軽くなる。コマンド「ＡＰＶ」の処理過程で生成される中間値（単独のコマンドの出力値）は、メインＲＡＭ２５に書き出されず、レジスタＧＲ０〜ＧＲ１５に保持されるため、コマンドの実行に必要なメモリ領域を小さくできるとともに、メモリアクセスに必要なバス帯域を小さくできる。【選択図】  図４
2007128180.tif 000002
【特許請求の範囲】
【請求項１】
幾何演算を処理する演算処理装置であって、
幾何演算を実行する実行手段と、
外部から入力されるコマンドを解釈し、入力された前記コマンドに応じた処理を前記実行手段に実行させるように前記実行手段を制御する制御手段と、
前記幾何演算に用いられる演算対象データ及び／又は前記幾何演算の結果である演算結果データを保持するデータ保持手段と、を備え、
前記コマンドは、複数種類用意され、
前記実行手段は、前記複数種類のコマンドのうち、第１グループに属する前記コマンドに応じて、前記演算処理装置の外部のメモリ及び／又は前記データ保持手段から前記演算対象データを受け取り、幾何演算を実行し、前記演算結果データを前記外部のメモリに出力し、
前記複数種類のコマンドのうち、第２グループに属する前記コマンドは、前記第１グループに属する異なる前記コマンドの所定の組み合わせを実行することを指示する命令であり、
前記実行手段は、前記第２グループに属する前記コマンドに応じて、前記所定の組み合わせに含まれる前記コマンドのうち、最初の前記コマンドを実行する際には、前記外部のメモリ及び／又は前記データ保持手段から前記演算対象データを受け取って、幾何演算を実行し、最初の前記コマンド以外の前記コマンドを実行する際には、前記データ保持手段から前記演算対象データを受け取って、幾何演算を実行し、
前記所定の組み合わせに含まれる前記コマンドのうち、最後の前記コマンド以外の前記コマンドを実行後には、前記演算結果データを前記データ保持手段に出力し、最後の前記コマンドを実行後には、前記演算結果データを前記外部のメモリ及び／又は前記データ保持手段に出力する、演算処理装置。
【請求項２】
幾何演算を処理する演算処理装置であって、
幾何演算を実行する実行手段と、
外部から入力されるコマンドを解釈し、入力された前記コマンドに応じた処理を前記実行手段に実行させるように前記実行手段を制御する制御手段と、
前記幾何演算に用いられる演算対象データ及び／又は前記幾何演算の結果である演算結果データを保持するデータ保持手段と、を備え、
前記実行手段は、
前記制御手段からの制御に従って、入力されたデータをそのまま出力する、あるいは所定のデータ型に変換して出力する型変換手段と、
前記型変換手段が出力するデータを用いて演算を実行する演算手段と、を含み、
前記制御手段は、前記演算対象データを前記演算処理装置の外部のメモリ及び／又は前記データ保持手段から読み出して、前記型変換手段に入力し、前記型変換手段から出力されたデータを前記演算手段に入力し、前記演算手段から出力されるデータを前記演算結果データとして前記メモリ及び／又は前記データ保持手段に書き込むように前記実行手段を制御する、演算処理装置。
【請求項３】
前記制御手段は、入力されたコマンドが所定の行列演算の実行を命令するものである場合、入力行列中の所定の要素に対しては前記型変換手段が入力されたデータを前記所定のデータ型へ変換するように前記実行手段を制御し、前記入力行列中の前記所定の要素以外の要素に対しては、前記型変換手段が入力されたデータを前記所定のデータ型へ変換せずにそのまま出力するように前記実行手段を制御する、請求項２記載の演算処理装置。
【請求項４】
前記型変換手段が行う前記所定のデータ型の変換は、ゼロ拡張及び／又は符号拡張である、請求項２又は３記載の演算処理装置。
【請求項５】
幾何演算を処理する演算処理装置であって、
幾何演算を実行する実行手段と、
前記幾何演算に用いられる演算対象データ及び／又は前記幾何演算の結果である演算結果データを保持するデータ保持手段と、を備え、
前記実行手段は、
複数の数値と１つの倍率とを含むデータを入力とし、前記複数の数値のうち１つを選択して前記倍率と乗算を行い、乗算結果を出力する数値抽出手段と、
前記数値抽出手段が出力する前記乗算結果を用いて演算を実行する演算手段と、を含み、
前記実行手段は、前記演算対象データを前記演算処理装置の外部のメモリ及び／又は前記データ保持手段から読み出し、前記数値抽出手段に入力し、前記数値抽出手段から出力された前記乗算結果を前記演算手段に入力し、前記演算手段から出力されるデータを前記演算結果データとして前記メモリ及び／又は前記データ保持手段に書き込む、演算処理装置。
【請求項６】
幾何演算を処理する演算処理装置であって、
三次元直交座標系で多角形状のグラフィック要素を定義する複数の頂点座標を入力とし、前記各頂点座標の座標変換を行う座標変換手段と、
前記座標変換後の複数の頂点の、所定座標軸成分の総和を求め、求めた総和を前記多角形状のグラフィック要素の奥行き値として出力する総和算出手段と、を備える演算処理装置。
【請求項７】
幾何演算を処理する演算処理装置であって、
三次元直交座標系で多角形状のグラフィック要素を定義する複数の頂点座標を入力とし、前記各頂点座標の座標変換を行う座標変換手段と、
前記座標変換後の複数の頂点の、所定座標軸成分の総和を求める総和算出手段と、
前記総和および前記多角形状のグラフィック要素の奥行き値の初期値を入力とし、前記総和と前記初期値とを加算し、加算結果を前記多角形状のグラフィック要素の奥行き値として出力する加算手段と、を備える演算処理装置。
【請求項８】
前記総和算出手段は、前記総和を浮動小数点数形式に変換して出力する、請求項６又は７記載の演算処理装置。
【請求項９】
浮動小数点数形式における前記総和の指数部のバイアス値を保持するバイアス保持手段をさらに備え、
前記バイアス保持手段は、前記演算処理装置の外部からアクセス可能であり、外部からリード及びライトすることができる、請求項８記載の演算処理装置。
【請求項１０】
前記座標変換後の複数の頂点の複数の前記所定座標軸成分のうちの少なくとも１つが所定の範囲内にない場合、当該多角形状のグラフィック要素の全頂点座標に描画範囲外の値を設定するカリング手段をさらに備える請求項６又は７記載の演算処理装置。
【請求項１１】
前記座標変換後の複数の頂点の複数の前記所定座標軸成分のうちの少なくとも１つが所定の範囲内にない場合、前記多角形状のグラフィック要素を定義するデータを描画用データ列から取り除くカリング手段をさらに備える請求項６又は７記載の演算処理装置。
【請求項１２】
前記座標変換後の複数の頂点の複数の前記所定座標軸成分のうちの少なくとも１つが所定の範囲内にない場合、当該多角形状のグラフィック要素の全頂点座標に描画範囲外の値を設定することができる第１のカリング手段と、
前記座標変換後の複数の頂点の複数の前記所定座標軸成分のうちの少なくとも１つが前記所定の範囲内にない場合、前記多角形状のグラフィック要素を定義するデータを描画用データ列から取り除くことができる第２のカリング手段と、
前記座標変換後の複数の頂点の複数の前記所定座標軸成分のうちの少なくとも１つが前記所定の範囲内にない場合の処理を実行する手段として、前記第１のカリング手段あるいは前記第２のカリング手段のいずれかを選択する選択手段と、をさらに備える請求項６又は７記載の演算処理装置。
【請求項１３】
前記所定の範囲を設定する閾値を保持する閾値保持手段をさらに備え、
前記閾値保持手段は、前記演算処理装置の外部からアクセス可能であり、外部からリード及びライトすることができる、請求項１０から１２記載の演算処理装置。
【請求項１４】
幾何演算を処理する演算処理装置であって、
三次元直交座標系において、頂点の並び順が、時計回りとなる面を表、反時計回りとなる面を裏と定義された多角形状のグラフィック要素の各頂点座標を二次元直交座標系に投影する投影手段と、
前記投影後の全頂点座標から、第１頂点座標、第２頂点座標、及び第３頂点座標を選択する選択手段と、
前記第２頂点座標から前記第１頂点座標を減算して第１ベクトルを算出する第１のベクトル算出手段と、
前記第３頂点座標から前記第１頂点座標を減算して第２ベクトルを算出する第２のベクトル算出手段と、
前記第１ベクトルと前記第２ベクトルとの外積演算を行う外積演算手段と、
前記外積演算の結果の符号に基づいて、前記二次元直交座標系に前記多角形状のグラフィック要素の表と裏のどちらの面が現れるかを判定する判定手段と、を備える演算処理装置。
【請求項１５】
前記裏の面が現れると判定された前記多角形状のグラフィック要素の前記二次元直交座標系における全頂点座標に描画範囲外の値を設定するカリング手段をさらに備える請求項１４記載の演算処理装置。
【請求項１６】
前記裏の面が現れると判定された前記多角形状のグラフィック要素を定義するデータを描画用データ列から取り除くカリング手段をさらに備える請求項１４記載の演算処理装置。
【請求項１７】
前記裏の面が現れると判定された前記多角形状のグラフィック要素の前記二次元直交座標系における全頂点座標に描画範囲外の値を設定することができる第１のカリング手段と、
前記裏の面が現れると判定された前記多角形状のグラフィック要素を定義するデータを描画用データ列から取り除くことができる第２のカリング手段と、
前記裏の面が現れると判定された場合の処理を実行する手段として、前記第１のカリング手段あるいは前記第２のカリング手段のいずれかを選択する選択手段と、をさらに備える請求項１４記載の演算処理装置。
【請求項１８】
幾何演算を処理する演算処理装置であって、
三次元直交座標系において定義された多角形状のグラフィック要素の各頂点座標を二次元直交座標系に投影する投影手段と、
前記投影後の頂点座標の座標軸成分の各々に所定値を加算する加算手段と、
前記加算の結果である座標軸成分からなる頂点座標が所定の範囲内にあるか否かを判定する判定手段と、を備える演算処理装置。
【請求項１９】
前記加算の結果である座標軸成分からなる頂点座標が所定の範囲外と判定された頂点を含む前記多角形状のグラフィック要素の前記二次元直交座標系における全頂点座標に描画範囲外の値を設定するカリング手段をさらに備える請求項１８記載の演算処理装置。
【請求項２０】
前記加算の結果である座標軸成分からなる頂点座標が所定の範囲外と判定された頂点を含む前記多角形状のグラフィック要素を定義するデータを描画用データ列から取り除くカリング手段をさらに備える請求項１８記載の演算処理装置。
【請求項２１】
前記加算の結果である座標軸成分からなる頂点座標が所定の範囲外と判定された頂点を含む前記多角形状のグラフィック要素の前記二次元直交座標系における全頂点座標に描画範囲外の値を設定することができる第１のカリング手段と、
前記加算の結果である座標軸成分からなる頂点座標が所定の範囲外と判定された頂点を含む前記多角形状のグラフィック要素を定義するデータを描画用データ列から取り除くことができる第２のカリング手段と、
前記加算の結果である座標軸成分からなる頂点座標が所定の範囲外と判定された場合の処理を実行する手段として、前記第１のカリング手段あるいは前記第２のカリング手段のいずれかを選択する選択手段と、をさらに備える請求項１８記載の演算処理装置。
【請求項２２】
前記加算手段が使用する前記所定値を保持する所定値保持手段をさらに備え、
前記所定値保持手段は、前記演算処理装置の外部からアクセス可能であり、外部からリード及びライトすることができる、請求項１８から２１記載の演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、三次元グラフィックスにおける幾何演算を処理する演算処理装置及びその関連技術に関する。
【背景技術】
【０００２】
非特許文献１には、三次元グラフィックス技術が開示されている。この文献に記載されているように、三次元グラフィックスの描画を行う場合、様々な座標変換を行わなければならない。座標変換等の幾何演算を高速に処理するための幾何演算専用プロセッサが備えられている場合、これらの演算は、それぞれの座標変換のたびに幾何演算専用プロセッサにコマンドを発行することにより行われる。あるいは、合成可能な変換行列については、予め変換行列を合成して、１コマンドの発行で一連の座標変換を同時に行い、合成不可能な変換行列については、そのためのコマンドを逐次発行して演算を行う。
【０００３】
【非特許文献１】山岡祥著，「Ｔｕｒｂｏ  Ｃによる３Ｄグラフィックス」，第１版，森北出版株式会社，１９９５年２月１０日，ｐ．１６０
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記いずれの場合でも、必要な全ての座標変換を行うには、複数のコマンドを発行しなければならない。このため、コマンドを発行する機能ユニット（例えば、ＣＰＵ等）の処理負荷が大きくなり、また、システムのオーバーヘッドが大きくなる。
【０００５】
そこで、本発明は、コマンド発行のための処理負荷及びシステムのオーバーヘッドの低減を図ることができる演算処理装置及びその関連技術を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の第１の観点によれば、演算処理装置は、幾何演算を処理する演算処理装置であって、幾何演算を実行する実行手段と、外部から入力されるコマンドを解釈し、入力された前記コマンドに応じた処理を前記実行手段に実行させるように前記実行手段を制御する制御手段と、前記幾何演算に用いられる演算対象データ及び／又は前記幾何演算の結果である演算結果データを保持するデータ保持手段と、を備え、前記コマンドは、複数種類用意され、前記実行手段は、前記複数種類のコマンドのうち、第１グループに属する前記コマンドに応じて、前記演算処理装置の外部のメモリ及び／又は前記データ保持手段から前記演算対象データを受け取り、幾何演算を実行し、前記演算結果データを前記外部のメモリに出力し、前記複数種類のコマンドのうち、第２グループに属する前記コマンドは、前記第１グループに属する異なる前記コマンドの所定の組み合わせを実行することを指示する命令であり、前記実行手段は、前記第２グループに属する前記コマンドに応じて、前記所定の組み合わせに含まれる前記コマンドのうち、最初の前記コマンドを実行する際には、前記外部のメモリ及び／又は前記データ保持手段から前記演算対象データを受け取って、幾何演算を実行し、最初の前記コマンド以外の前記コマンドを実行する際には、前記データ保持手段から前記演算対象データを受け取って、幾何演算を実行し、前記所定の組み合わせに含まれる前記コマンドのうち、最後の前記コマンド以外の前記コマンドを実行後には、前記演算結果データを前記データ保持手段に出力し、最後の前記コマンドを実行後には、前記演算結果データを前記外部のメモリ及び／又は前記データ保持手段に出力する。
【０００７】
この構成によれば、単独のコマンド（第１グループのコマンド：「単独コマンド」と呼ぶ。）を組み合わせて１つのコマンド（第２グループのコマンド：「複合コマンド」と呼ぶ。）として実行可能なため、コマンドを発行する機能ユニット（例えば、ＣＰＵ等）の処理負荷およびシステムのオーバーヘッドが軽くなる。また、複合コマンドの処理過程で生成される中間値（単独コマンドの出力値）は、外部のメモリに書き出されず、内部のデータ保持手段に保持されるため、コマンドの実行に必要なメモリ領域を小さくできるとともに、メモリアクセスに必要なバス帯域を小さくできる。
【０００８】
本発明の第２の観点によれば、演算処理装置は、幾何演算を処理する演算処理装置であって、幾何演算を実行する実行手段と、外部から入力されるコマンドを解釈し、入力された前記コマンドに応じた処理を前記実行手段に実行させるように前記実行手段を制御する制御手段と、前記幾何演算に用いられる演算対象データ及び／又は前記幾何演算の結果である演算結果データを保持するデータ保持手段と、を備え、前記実行手段は、前記制御手段からの制御に従って、入力されたデータをそのまま出力する、あるいは所定のデータ型に変換して出力する型変換手段と、前記型変換手段が出力するデータを用いて演算を実行する演算手段と、を含み、前記制御手段は、前記演算対象データを前記演算処理装置の外部のメモリ及び／又は前記データ保持手段から読み出して、前記型変換手段に入力し、前記型変換手段から出力されたデータを前記演算手段に入力し、前記演算手段から出力されるデータを前記演算結果データとして前記メモリ及び／又は前記データ保持手段に書き込むように前記実行手段を制御する。
【０００９】
この構成によれば、演算対象データとしての各行列の要素のビット数を最適化して格納しておき、型変換手段によって、最適化された演算対象データを演算前に所定のデータ型に揃えることにより、演算対象データを格納するメモリ領域及びレジスタ領域を節約することができる。なお、演算対象データとしての各行列の要素の精度および表現可能範囲は必ずしも均一ではないが、型変換手段による変換後のデータ型は、演算回路の都合などで均一に揃えられている。
【００１０】
この演算処理装置において、前記制御手段は、入力されたコマンドが所定の行列演算の実行を命令するものである場合、入力行列中の所定の要素に対しては前記型変換手段が入力されたデータを前記所定のデータ型へ変換するように前記実行手段を制御し、前記入力行列中の前記所定の要素以外の要素に対しては、前記型変換手段が入力されたデータを前記所定のデータ型へ変換せずにそのまま出力するように前記実行手段を制御する。
【００１１】
この演算処理装置において、前記型変換手段が行う前記所定のデータ型の変換は、ゼロ拡張及び／又は符号拡張である。
【００１２】
本発明の第３の観点によれば、演算処理装置は、幾何演算を処理する演算処理装置であって、幾何演算を実行する実行手段と、前記幾何演算に用いられる演算対象データ及び／又は前記幾何演算の結果である演算結果データを保持するデータ保持手段と、を備え、前記実行手段は、複数の数値と１つの倍率とを含むデータを入力とし、前記複数の数値のうち１つを選択して前記倍率と乗算を行い、乗算結果を出力する数値抽出手段と、前記数値抽出手段が出力する前記乗算結果を用いて演算を実行する演算手段と、を含み、前記実行手段は、前記演算対象データを前記演算処理装置の外部のメモリ及び／又は前記データ保持手段から読み出し、前記数値抽出手段に入力し、前記数値抽出手段から出力された前記乗算結果を前記演算手段に入力し、前記演算手段から出力されるデータを前記演算結果データとして前記メモリ及び／又は前記データ保持手段に書き込む。
【００１３】
この構成によれば、演算対象データとしての行列またはベクトルの要素に倍率を乗算したデータを演算するので、実際に演算が施されるデータのサイズを一定に保ちながら、倍率の設定変更によって、複数の、表現可能な範囲をサポートすることができる。これにより、演算対象データを格納するメモリ領域及びレジスタ領域を節約することができる。
【００１４】
本発明の第４の観点によれば、演算処理装置は、幾何演算を処理する演算処理装置であって、三次元直交座標系で多角形状のグラフィック要素を定義する複数の頂点座標を入力とし、前記各頂点座標の座標変換を行う座標変換手段と、前記座標変換後の複数の頂点の、所定座標軸成分の総和を求め、求めた総和を前記多角形状のグラフィック要素の奥行き値として出力する総和算出手段と、を備える。
【００１５】
この構成によれば、描画処理において、多角形状のグラフィック要素（例えば、ポリゴン）が１つの奥行き値で定義される場合（つまり、頂点ごとの奥行き値を持つことができない場合）においても、各頂点の所定座標軸成分（例えば、Ｚ軸成分）から多角形状のグラフィック要素の奥行き値を算出することができる。
【００１６】
本発明の第５の観点によれば、演算処理装置は、幾何演算を処理する演算処理装置であって、三次元直交座標系で多角形状のグラフィック要素を定義する複数の頂点座標を入力とし、前記各頂点座標の座標変換を行う座標変換手段と、前記座標変換後の複数の頂点の、所定座標軸成分の総和を求める総和算出手段と、前記総和および前記多角形状のグラフィック要素の奥行き値の初期値を入力とし、前記総和と前記初期値とを加算し、加算結果を前記多角形状のグラフィック要素の奥行き値として出力する加算手段と、を備える。
【００１７】
この構成によれば、多角形状のグラフィック要素（例えば、ポリゴン）の奥行き値の初期値は、奥行き値のバイアスとして機能し、これにより意図的に多角形状のグラフィック要素の描画優先順位を上げたり下げたりする表現が可能になる。
【００１８】
上記第４の観点及び第５の観点における演算処理装置において、前記総和算出手段は、前記総和を浮動小数点数形式に変換して出力する。
【００１９】
この構成によれば、奥行き値を浮動小数点数形式で表現することにより、少ないビット数で広範な座標空間の範囲をカバーできる。また、視点に近い領域では高い精度で、遠い領域では粗い精度で奥行き値を表現でき、少ないビット数の奥行き値で３次元グラフィックスの描画に求められる精度に応じた表現が可能となる。
【００２０】
この演算処理装置は、浮動小数点数形式における前記総和の指数部のバイアス値を保持するバイアス保持手段をさらに備え、前記バイアス保持手段は、前記演算処理装置の外部からアクセス可能であり、外部からリード及びライトすることができる。
【００２１】
この構成によれば、総和の指数部のバイアスを、外部の機能ユニット（例えば、ＣＰＵ等）が設定可能とすることにより、三次元空間中の複数の多角形状のグラフィック要素の分散の程度に応じ、奥行き値を最適化できる。すなわち、限定的な精度の奥行き値であっても、多角形状のグラフィック要素の奥行き方向の並び順を正しく表現できるため、メモリ使用量を節約できる。
【００２２】
上記第４の観点及び第５の観点における演算処理装置は、前記座標変換後の複数の頂点の複数の前記所定座標軸成分のうちの少なくとも１つが所定の範囲内にない場合、当該多角形状のグラフィック要素の全頂点座標に描画範囲外の値を設定するカリング手段を備えることができる。
【００２３】
この構成によれば、少なくとも１つの頂点の所定座標軸成分（例えば、Ｚ軸成分）が所定の範囲にない多角形状のグラフィック要素が描画されないようにすることで、描画処理の負荷を軽減できる。
【００２４】
上記第４の観点及び第５の観点における演算処理装置は、前記座標変換後の複数の頂点の複数の前記所定座標軸成分のうちの少なくとも１つが所定の範囲内にない場合、前記多角形状のグラフィック要素を定義するデータを描画用データ列から取り除くカリング手段を備えることができる。
【００２５】
この構成によれば、少なくとも１つの頂点の所定座標軸成分（例えば、Ｚ軸成分）が所定の範囲にない多角形状のグラフィック要素を描画用データ列から取り除くことで、メモリ使用量の節約、および描画処理の負荷の軽減ができる。
【００２６】
上記第４の観点及び第５の観点における演算処理装置は、前記座標変換後の複数の頂点の複数の前記所定座標軸成分のうちの少なくとも１つが所定の範囲内にない場合、当該多角形状のグラフィック要素の全頂点座標に描画範囲外の値を設定することができる第１のカリング手段と、前記座標変換後の複数の頂点の複数の前記所定座標軸成分のうちの少なくとも１つが前記所定の範囲内にない場合、前記多角形状のグラフィック要素を定義するデータを描画用データ列から取り除くことができる第２のカリング手段と、前記座標変換後の複数の頂点の複数の前記所定座標軸成分のうちの少なくとも１つが前記所定の範囲内にない場合の処理を実行する手段として、前記第１のカリング手段あるいは前記第２のカリング手段のいずれかを選択する選択手段と、を備えることができる。
【００２７】
この構成によれば、少なくとも１つの頂点の所定座標軸成分（例えば、Ｚ軸成分）が所定の範囲内にない場合の処理を選択可能とすることで、外部の機能ユニット（例えば、ＣＰＵ等）が出力結果を参照・調製する必要がある場合には、第１のカリング手段を選択し、そうでなければメモリを節約するために第２のカリング手段を選択することが可能となる。
【００２８】
上記演算処理装置は、前記所定の範囲を設定する閾値を保持する閾値保持手段をさらに備え、前記閾値保持手段は、前記演算処理装置の外部からアクセス可能であり、外部からリード及びライトすることができる。
【００２９】
このように、所定の範囲を定める閾値を閾値保持手段（例えば、レジスタ）で設定可能にすることで、描画対象となる三次元空間の範囲を外部の機能ユニット（例えば、ＣＰＵ等）が自由に制御できる。
【００３０】
本発明の第６の観点によれば、演算処理装置は、幾何演算を処理する演算処理装置であって、三次元直交座標系において、頂点の並び順が、時計回りとなる面を表、反時計回りとなる面を裏と定義された多角形状のグラフィック要素の各頂点座標を二次元直交座標系に投影する投影手段と、前記投影後の全頂点座標から、第１頂点座標、第２頂点座標、及び第３頂点座標を選択する選択手段と、前記第２頂点座標から前記第１頂点座標を減算して第１ベクトルを算出する第１のベクトル算出手段と、前記第３頂点座標から前記第１頂点座標を減算して第２ベクトルを算出する第２のベクトル算出手段と、前記第１ベクトルと前記第２ベクトルとの外積演算を行う外積演算手段と、前記外積演算の結果の符号に基づいて、前記二次元直交座標系に前記多角形状のグラフィック要素の表と裏のどちらの面が現れるかを判定する判定手段と、を備える。
【００３１】
この構成によれば、ベクトル外積演算による多角形状のグラフィック要素（例えば、ポリゴン）の表裏判定を、三次元直交座標系でなく、二次元直交座標系へ投影後の頂点座標を用いて行うことにより、演算量を大幅に削減できる。
【００３２】
この演算処理装置は、前記裏の面が現れると判定された前記多角形状のグラフィック要素の前記二次元直交座標系における全頂点座標に描画範囲外の値を設定するカリング手段を備えることができる。
【００３３】
この構成によれば、裏と判定された多角形状のグラフィック要素が描画されないようにすることで、描画処理の負荷を軽減できる。
【００３４】
上記演算処理装置は、前記裏の面が現れると判定された前記多角形状のグラフィック要素を定義するデータを描画用データ列から取り除くカリング手段を備えることができる。
【００３５】
この構成によれば、裏と判定された多角形状のグラフィック要素を描画用データ列から取り除くことで、メモリ使用量の節約、および描画処理の負荷の軽減ができる。
【００３６】
上記演算処理装置は、前記裏の面が現れると判定された前記多角形状のグラフィック要素の前記二次元直交座標系における全頂点座標に描画範囲外の値を設定することができる第１のカリング手段と、前記裏の面が現れると判定された前記多角形状のグラフィック要素を定義するデータを描画用データ列から取り除くことができる第２のカリング手段と、前記裏の面が現れると判定された場合の処理を実行する手段として、前記第１のカリング手段あるいは前記第２のカリング手段のいずれかを選択する選択手段と、を備えることができる。
【００３７】
この構成によれば、裏の面が現れると判定された場合の処理を選択可能とすることで、外部の機能ユニット（例えば、ＣＰＵ等）が出力結果を参照・調製する必要がある場合には、第１のカリング手段を選択し、そうでなければメモリを節約するために、第２のカリング手段を選択することが可能となる。
【００３８】
本発明の第７の観点によれば、演算処理装置は、幾何演算を処理する演算処理装置であって、三次元直交座標系において定義された多角形状のグラフィック要素の各頂点座標を二次元直交座標系に投影する投影手段と、前記投影後の頂点座標の座標軸成分の各々に所定値を加算する加算手段と、前記加算の結果である座標軸成分からなる頂点座標が所定の範囲内にあるか否かを判定する判定手段と、を備える。
【００３９】
この構成によれば、所定値を加算した後の多角形状のグラフィック要素（例えば、ポリゴン）が所定の範囲内にあるか否かの判定を、三次元直交座標系でなく、二次元直交座標系へ投影後の頂点座標を用いて行うことにより、演算量を大幅に削減できる。
【００４０】
この演算処理装置は、前記加算の結果である座標軸成分からなる頂点座標が所定の範囲外と判定された頂点を含む前記多角形状のグラフィック要素の前記二次元直交座標系における全頂点座標に描画範囲外の値を設定するカリング手段を備えることができる。
【００４１】
この構成によれば、所定の範囲にないと判定された頂点を含む多角形状のグラフィック要素が描画されないようにすることで、描画処理の負荷を軽減できる。
【００４２】
上記演算処理装置は、前記加算の結果である座標軸成分からなる頂点座標が所定の範囲外と判定された頂点を含む前記多角形状のグラフィック要素を定義するデータを描画用データ列から取り除くカリング手段を備えることができる。
【００４３】
この構成によれば、所定の範囲にないと判定された頂点を含む多角形状のグラフィック要素を描画用データ列から取り除くことで、メモリ使用量の節約、および描画処理の負荷の軽減ができる。
【００４４】
上記演算処理装置は、前記加算の結果である座標軸成分からなる頂点座標が所定の範囲外と判定された頂点を含む前記多角形状のグラフィック要素の前記二次元直交座標系における全頂点座標に描画範囲外の値を設定することができる第１のカリング手段と、前記加算の結果である座標軸成分からなる頂点座標が所定の範囲外と判定された頂点を含む前記多角形状のグラフィック要素を定義するデータを描画用データ列から取り除くことができる第２のカリング手段と、前記加算の結果である座標軸成分からなる頂点座標が所定の範囲外と判定された場合の処理を実行する手段として、前記第１のカリング手段あるいは前記第２のカリング手段のいずれかを選択する選択手段と、を備えることができる。
【００４５】
この構成によれば、頂点座標が所定の範囲にないと判定された場合の処理を選択可能とすることで、外部の機能ユニット（例えば、ＣＰＵ等）が出力結果を参照・調製する必要がある場合には、第１のカリング手段を選択し、そうでなければメモリを節約するために、第２のカリング手段を選択することが可能となる。
【００４６】
上記演算処理装置は、前記加算手段が使用する前記所定値を保持する所定値保持手段をさらに備え、前記所定値保持手段は、前記演算処理装置の外部からアクセス可能であり、外部からリード及びライトすることができる。
【００４７】
このように、二次元座標系に投影後の座標に加算する所定値を外部の機能ユニット（例えば、ＣＰＵ等）が変更できるようにすることで、表示画面中の任意の位置にビューポートを設定できる。
【発明を実施するための最良の形態】
【００４８】
以下、本発明の実施の形態について、図面を参照しながら説明する。なお、図中、同一または相当部分については同一の参照符号を付してその説明を援用する。また、信号のどのビットかを示す必要があるときは、信号名の後に、［ａ：ｂ］あるいは［ａ］を付する。［ａ：ｂ］は、その信号の第ａ番目のビットから第ｂ番目のビットを意味し、［ａ］は、その信号の第ａ番目のビットを意味する。「０ｂ」は２進数を、「０ｘ」は１６進数を意味する。
【００４９】
図１は、本発明の実施の形態によるマルチメディアプロセッサ１の内部構成を示すブロック図である。図１に示すように、このマルチメディアプロセッサ１は、外部メモリインタフェース３、ＤＭＡＣ（ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ  ｃｏｎｔｒｏｌｌｅｒ）４、中央演算処理装置（以下、「ＣＰＵ」と呼ぶ。）５、ＣＰＵローカルＲＡＭ７、レンダリングプロセッシングユニット（以下、「ＲＰＵ」と呼ぶ。）９、カラーパレットＲＡＭ１１、サウンドプロセシングユニット（以下、「ＳＰＵ」と呼ぶ。）１３、ＳＰＵローカルＲＡＭ１５、ジオメトリエンジン（以下、「ＧＥ」と呼ぶ。）１７、Ｙソーティングユニット（以下、「ＹＳＵ」と呼ぶ。）１９、外部インタフェースブロック２１、メインＲＡＭアクセスアービタ２３、メインＲＡＭ２５、Ｉ／Ｏバス２７、ビデオＤＡＣ（ｄｉｇｉｔａｌ  ｔｏ  ａｎａｌｏｇ  ｃｏｎｖｅｒｔｅｒ）２９、オーディオＤＡＣブロック３１、及びＡ／Ｄコンバータ（以下、「ＡＤＣ」と呼ぶ。）３３を具備する。メインＲＡＭ２５及び外部メモリ５０を区別して説明する必要がないときは、「メモリＭＥＭ」と表記する。
【００５０】
ＣＰＵ５は、メモリＭＥＭに格納されたプログラムを実行して、各種演算やシステム全体の制御を行う。また、ＣＰＵ５は、ＤＭＡＣ４にプログラム及びデータの転送要求を行うこともできるし、ＤＭＡＣ４を介さずに、外部メモリ５０から直接プログラムコードをフェッチし、外部メモリ５０に直接データアクセスを行うこともできる。
【００５１】
Ｉ／Ｏバス２７は、ＣＰＵ５をバスマスタとするシステム制御用のバスであり、バススレイブである各機能ユニット（外部メモリインタフェース３、ＤＭＡＣ４、ＲＰＵ９、ＳＰＵ１３、ＧＥ１７、ＹＳＵ１９、及び外部インタフェースブロック２１）の制御レジスタ及びローカルＲＡＭ７，１１，１５へのアクセスに用いられる。このようにして、これらの機能ユニットは、Ｉ／Ｏバス２７を通じて、ＣＰＵ５により制御される。
【００５２】
ＣＰＵローカルＲＡＭ７は、ＣＰＵ５専用のＲＡＭであり、サブルーチンコールや割り込み時におけるデータの退避などを行うためのスタック領域、及びＣＰＵ５のみが扱う変数の格納領域等として使用される。
【００５３】
ＲＰＵ９は、ポリゴン及びスプライトから構成される三次元イメージをリアルタイムに生成する。具体的には、ＲＰＵ９は、ＹＳＵ１９によるソート済みの、ポリゴン構造体配列の各構造体インスタンス及びスプライト構造体配列の各構造体インスタンスを、メインＲＡＭ２５から読み出し、所定の処理を実行して、スクリーン（表示画面）のスキャンに合わせて水平ラインごとにイメージを生成する。生成されたイメージは、コンポジットビデオ信号波形を示すデータストリームに変換され、ビデオＤＡＣ２９に出力される。また、ＲＰＵ９は、ＤＭＡＣ４に対して、ポリゴン及びスプライトのテクスチャパターンデータの取り込みのためのＤＭＡ転送要求を行う機能を有する。
【００５４】
テクスチャパターンデータとは、ポリゴンまたはスプライトに貼り付けられる２次元の画素配列データであり、各画素データは、カラーパレットＲＡＭ１１のエントリを指定するための情報の一部である。以降、テクスチャパターンデータの画素を「テクセル」と呼称し、スクリーンに表示されるイメージを構成する画素を指す「ピクセル」とは区別して使用する。従って、テクスチャパターンデータは、テクセルデータの集合である。
【００５５】
ポリゴン構造体配列は、多角形状のグラフィック要素であるポリゴンのための構造体配列であり、スプライト構造体配列は、スクリーンに平行な矩形のグラフィック要素であるスプライトのための構造体配列である。ポリゴン構造体配列の要素を、「ポリゴン構造体インスタンス」と呼び、スプライト構造体配列の要素を、「スプライト構造体インスタンス」と呼ぶ。ただし、両者を区別して説明する必要がないときは、単に「構造体インスタンス」と呼ぶこともある。
【００５６】
ポリゴン構造体配列に格納された各ポリゴン構造体インスタンスは、ポリゴンごとの表示情報（スクリーンにおける頂点座標、テクスチャマッピングモードでのテクスチャパターンに関する情報及びグーローシェーディングモードでのカラーデータ（ＲＧＢのカラーコンポーネント）を含む。）であり、１つのポリゴン構造体インスタンスに１つのポリゴンが対応している。スプライト構造体配列に格納された各スプライト構造体インスタンスは、スプライトごとの表示情報（スクリーンにおける座標及びテクスチャパターンに関する情報を含む。）であり、１つのスプライト構造体インスタンスに１つのスプライトが対応している。
【００５７】
ビデオＤＡＣ２９は、アナログのビデオ信号を生成するためのデジタル／アナログ変換器である。ビデオＤＡＣ２９は、ＲＰＵ９から入力されたデータストリームをアナログのコンポジットビデオ信号に変換し、ビデオ信号出力端子（図示せず）からテレビジョンモニタ等（図示せず）に出力する。
【００５８】
カラーパレットＲＡＭ１１は、本実施の形態では５１２色すなわち５１２エントリのカラーパレットからなる。ＲＰＵ９は、テクスチャパターンデータに含まれるテクセルデータをカラーパレットのエントリを指定するインデックスの一部として、カラーパレットＲＡＭ１１を参照し、テクスチャパターンデータを、カラーデータ（ＲＧＢのカラーコンポーネント）に変換する。
【００５９】
ＳＰＵ１３は、ＰＣＭ（ｐｕｌｓｅ  ｃｏｄｅ  ｍｏｄｕｌａｔｉｏｎ）波形データ（以下、「ウェーブデータ」と呼ぶ。）、アンプリチュードデータ、及びメインボリュームデータを生成する。具体的には、ＳＰＵ１３は、最大６４チャンネル分のウェーブデータを生成して時分割多重化するとともに、最大６４チャンネル分のエンベロープデータを生成してチャンネルボリュームデータと乗算し、アンプリチュードデータを時分割多重化する。そして、ＳＰＵ１３は、メインボリュームデータ、時分割多重化されたウェーブデータ、及び時分割多重化されたアンプリチュードデータを、オーディオＤＡＣブロック３１に出力する。また、ＳＰＵ１３は、ＤＭＡＣ４に対して、ウェーブデータ及びエンベロープデータの取り込みのためのＤＭＡ転送要求を行う機能を有する。ＳＰＵ１３の詳細は後述する。
【００６０】
オーディオＤＡＣブロック３１は、ＳＰＵ１３から入力されたウェーブデータ、アンプリチュードデータ、及びメインボリュームデータをそれぞれアナログ信号に変換し、結果をアナログ乗算して、アナログオーディオ信号を生成する。このアナログオーディオ信号は、オーディオ信号出力端子（図示せず）からテレビジョンモニタ等（図示せず）のオーディオ入力端子（図示せず）に出力される。
【００６１】
ＳＰＵローカルＲＡＭ１５は、ＳＰＵ１３がウェーブ再生及びエンベロープ生成を行う際に用いるパラメータ（例えば、ウェーブデータやエンベロープデータの格納アドレスやピッチ情報など）を格納する。
【００６２】
本発明の特徴の１つであるＧＥ１７は、三次元イメージを表示するための幾何演算を実行する。具体的には、ＧＥ１７は、行列積、ベクトルアフィン変換、ベクトル直交変換、透視投影変換、頂点明度／ポリゴン明度計算（ベクトル内積）、及びポリゴン裏面カリング処理（ベクトル外積）などの演算を実行する。詳細は後述する。
【００６３】
ＹＳＵ１９は、メインＲＡＭ２５に格納されているポリゴン構造体配列の各構造体インスタンス及びスプライト構造体配列の各構造体インスタンスを、ソートルール１〜４に従ってソートする。この場合、ポリゴン構造体配列とスプライト構造体配列とで、別個にソートが行われる。
【００６４】
以下、ＹＳＵ１９によるソートルール１〜４について説明するが、その前に座標系について説明する。テレビジョンモニタ等のディスプレイ装置（図示せず）への実際の表示に用いられる二次元座標系をスクリーン座標系と呼ぶ。本実施の形態では、スクリーン座標系は、水平方向２０４８ピクセル×垂直方向１０２４ピクセルの２次元ピクセル配列から構成される。座標原点は左上にあり、右方向がＸ軸の正、下方向がＹ軸の正に相当する。ただし、実際に表示される領域は、スクリーン座標系の全空間ではなく一部の空間である。この表示領域をスクリーンと呼ぶことにする。
【００６５】
ソートルール１は、最小Ｙ座標が小さい順に、各ポリゴン構造体インスタンスを並べ替えることである。最小Ｙ座標とは、ポリゴンの全頂点のＹ座標のうち、最も小さいＹ座標のことである。Ｙ座標はスクリーンの垂直座標であり、下向きが正方向である。ソートルール２は、最小Ｙ座標が同じである複数のポリゴンについては、デプス値が大きい順に、各ポリゴン構造体インスタンスを並べることである。なお、デプス値が大きいほど奥に描画される。
【００６６】
ただし、ＹＳＵ１９は、スクリーンの先頭ラインに表示されるピクセルを持つ複数のポリゴンについては、最小Ｙ座標が異なっている場合でも、それらが同一であるとみなして、ソートルール１ではなく、ソートルール２に従って、各ポリゴン構造体インスタンスの並べ替えを行う。つまり、スクリーンの先頭ラインに表示されるピクセルを持つポリゴンが複数存在する場合は、最小Ｙ座標が同一であるとみなして、デプス値が大きい順に並べ替えられる。これがソートルール３である。
【００６７】
インタレーススキャンの場合でも、ソートルール１〜３が適用される。ただし、奇数フィールドを表示するためのソートでは、奇数ラインに表示されるポリゴンの最小Ｙ座標及び／又はその奇数ラインの１つ前の偶数ラインに表示されるポリゴンの最小Ｙ座標が同一であるとみなして、ソートルール２によるソートを行う。ただし、先頭の奇数ラインは除く。なぜなら、その１つ前の偶数ラインが存在しないからである。一方、偶数フィールドを表示するためのソートでは、偶数ラインに表示されるポリゴンの最小Ｙ座標及び／又はその偶数ラインの１つ前の奇数ラインに表示されるポリゴンの最小Ｙ座標が同一であるとみなして、ソートルール２によるソートを行う。これがソートルール４である。
【００６８】
スプライトに関するソートルール１〜４は、それぞれポリゴンに関するソートルール１〜４と同様である。
【００６９】
外部メモリインタフェース３は、外部バス５１を介して、外部メモリ５０からのデータの読み出し、及び外部メモリ５０へのデータの書き込みを司る。この場合、外部メモリインタフェース３は、図示しないＥＢＩ優先順位テーブルに従って、ＣＰＵ５及びＤＭＡＣ４からの外部バスアクセス要求要因（外部バス５１へのアクセスを要求する要因）を調停して、いずれか１つの外部バスアクセス要求要因を選択する。そして、選択した外部バスアクセス要求要因に対して外部バス５１へのアクセスを許可する。ＥＢＩ優先順位テーブルは、ＣＰＵ５からの複数種類の外部バスアクセス要求要因及びＤＭＡＣ４からの外部バスアクセス要求要因の優先順位を定めたテーブルである。
【００７０】
外部バスアクセス要求要因として、ＣＰＵに含まれる図示しないＩＰＬ（ｉｎｉｔｉａｌ  ｐｒｏｇｒａｍ  ｌｏａｄｅｒ）によるブロック転送要求、ＣＰＵ５によるデータアクセス要求、ＣＰＵ５による命令フェッチ要求、及びＤＭＡＣ４によるＤＭＡ要求がある。
【００７１】
ＤＭＡＣ４は、メインＲＡＭ２５と、外部バス５１に接続された外部メモリ５０と、の間でＤＭＡ転送を行う。この場合、ＤＭＡＣ４は、図示しないＤＭＡ優先順位テーブルに従って、ＣＰＵ５、ＲＰＵ９、及びＳＰＵ１３からのＤＭＡ転送要求要因（ＤＭＡ転送を要求する要因）を調停して、いずれか１つのＤＭＡ転送要求要因を選択する。そして、外部メモリインタフェース３に対して、ＤＭＡ要求を行う。ＤＭＡ優先順位テーブルは、ＣＰＵ５、ＲＰＵ９、及びＳＰＵ１３からのＤＭＡ要求要因の優先順位を定めたテーブルである。
【００７２】
ＳＰＵ１３のＤＭＡ要求要因として、（１）ウェーブデータをウェーブバッファに転送すること、（２）エンベロープデータをエンベロープバッファに転送すること、がある。ウェーブバッファ及びエンベロープバッファは、それぞれメインＲＡＭ２５上に設定されるウェーブデータ及びエンベロープデータのテンポラリ格納領域である。なお、ＳＰＵ１３の２つのＤＭＡ要求要因間の調停は、ＳＰＵ１３内のハードウェア（図示せず）で行われ、ＤＭＡＣ４は関知しない。
【００７３】
ＲＰＵ９のＤＭＡ要求要因として、テクスチャパターンデータをテクスチャバッファに転送すること、がある。テクスチャバッファは、メインＲＡＭ２５上に設定されるテクスチャパターンデータのテンポラリ格納領域である。
【００７４】
ＣＰＵ５のＤＭＡ要求要因として、（１）仮想記憶管理においてページミスが発生した場合のページ転送、（２）アプリケーションプログラム等が要求するデータ転送、がある。なお、ＣＰＵ５内で複数のＤＭＡ転送要求が同時に発生した場合は、その調停はＣＰＵ５で実行されるソフトウェアにて行われ、ＤＭＡＣ４は関知しない。
【００７５】
外部インタフェースブロック２１は、周辺装置５４とのインタフェースであり、２４チャンネルのプログラマブルなデジタル入出力（Ｉ／Ｏ）ポートを含む。２４チャンネルのＩ／Ｏポートの各々は、４チャンネル分のマウスインタフェース機能、４チャンネル分のライトガンインタフェース機能、２チャンネル分の汎用タイマ／カウンタ、１チャンネル分の調歩同期式シリアルインタフェース機能、１チャンネル分の汎用パラレル／シリアル変換ポート機能のうち１または複数に内部接続されている。
【００７６】
ＡＤＣ３３は、４チャンネルのアナログ入力ポートに接続され、これらを介して、アナログ入力装置５２から入力されたアナログ信号をデジタル信号に変換する。例えば、マイク音声等のアナログ入力信号をサンプリングしてデジタルデータに変換する。
【００７７】
メインＲＡＭアクセスアービタ２３は、機能ユニット（ＣＰＵ５、ＲＰＵ９、ＧＥ１７、ＹＳＵ１９、ＤＭＡＣ４、及び外部インタフェースブロック２１（汎用パラレル／シリアル変換ポート）からのメインＲＡＭ２５へのアクセス要求を調停して、いずれかの機能ユニットにアクセス許可を出す。
【００７８】
メインＲＡＭ２５は、ＣＰＵ５のワーク領域、変数格納領域、および仮想記憶管理領域等として利用される。また、メインＲＡＭ２５は、ＣＰＵ５が他の機能ユニットに受け渡すデータの格納領域、ＲＰＵ９及びＳＰＵ１３が外部メモリ５０からＤＭＡによって取得したデータの格納領域、ＧＥ１７及びＹＳＵ１９の入力データ及び出力データの格納領域等としても使用される。
【００７９】
外部バス５１は、外部メモリ５０にアクセスするためのバスである。ＣＰＵ５およびＤＭＡＣ４から、外部メモリインタフェース３を介してアクセスされる。外部バス５１のアドレスバスは、３０ビットから成り、最大で１Ｇバイト（＝８Ｇビット）の外部メモリ５０を接続することができる。外部バス５１のデータバスは、１６ビットから成り、８ビット又は１６ビットのデータバス幅を持つ外部メモリ５０を接続できる。異なるデータバス幅を持つ外部メモリを同時に接続可能であり、アクセスする外部メモリによってデータバス幅を自動的に切り替える機能が備えられる。
【００８０】
次に、マルチメディアプロセッサ１によるグラフィックス処理の概要を説明する。
【００８１】
図２は、図１のマルチメディアプロセッサ１によるグラフィックス処理の流れの概要を示すフローチャートである。図２に示すように、ステップＳ１にて、ＣＰＵ５は、各オブジェクト（１または複数のポリゴンから構成され、同じ拡大・縮小、回転、及び平行移動の変換が適用される単位）及び各スプライトの拡大・縮小、回転、及び平行移動のパラメータを算出する。算出されたパラメータから、各オブジェクト及び各スプライトに対し、拡大・縮小、回転、及び平行移動のための変換行列が生成される。これらの変換行列は、各オブジェクト及び各スプライトのローカルな座標系（ローカル座標系）から、全てのオブジェクト及び全てのスプライトを統一の座標系で表現する直交座標系（ワールド座標系）への変換に用いられる。
【００８２】
また、ＣＰＵ５は、視点（カメラ）座標、対象点座標、及び視線ベクトルの更新等を行う。これらのパラメータから、ワールド座標系から視点を中心とした直交座標系（ビュー座標系）への変換行列が生成される。
【００８３】
ステップＳ２にて、ＧＥ１７は、各オブジェクト及び各スプライトに対し、拡大・縮小、回転、及び平行移動のための変換行列が複数存在する場合、それらの変換行列の行列積を求めることにより、複数の変換行列を単一の変換行列に合成する。さらに、ＧＥ１７は、合成された変換行列と、座標系変換のための変換行列と、の行列積を求めて、オブジェクト頂点座標配列、オブジェクト法線ベクトル配列、及びスプライト座標を変換するための変換行列をそれぞれ合成する。
【００８４】
ステップＳ３にて、ＧＥ１７は、合成された変換行列を用い、オブジェクト頂点座標配列、オブジェクト法線ベクトル配列、及びスプライト座標の幾何変換を行う。また、ＧＥ１７は、変換後のオブジェクト法線ベクトル配列と光源ベクトルとの内積を演算し、オブジェクトの各頂点または面（ポリゴン）の明度を算出する。このような幾何変換及びライティングの結果は、ポリゴン構造体配列及びスプライト構造体配列に格納される。
【００８５】
ステップＳ４にて、ＲＰＵ９による描画処理が行われる前に、ＹＳＵ１９は、ソートルール１〜４に従って、ポリゴン構造体インスタンスおよびスプライト構造体インスタンスをソートする。
【００８６】
ステップＳ５にて、ＲＰＵ９は、ＹＳＵ１９によるソート後のポリゴン構造体インスタンスおよびスプライト構造体インスタンスを読み出すとともに、テクスチャマッピングモードのポリゴン及びスプライトの属性を示すテクスチャアトリビュート構造体インスタンスを読み出しつつ、各水平表示ラインのピクセルデータ列を生成する。また、テクスチャマッピングモードのポリゴン及びスプライトのピクセルデータ列生成には、これらに貼り付けるテクスチャパターンデータを、外部メモリ５０から読み出すことが必要とされる。このようなピクセルデータ列生成処理を「ラスタライジング」と呼ぶ。
【００８７】
本実施の形態では、ポリゴンの描画モードとして、テクスチャマッピングを用いて描画を行うテクスチャマッピングモードと、グーローシェーディングを用いてポリゴンの描画を行うグーローシェーディングモードと、を実装している。テクスチャマッピングは、二次元の格子状に並べられたテクセルのパターンをポリゴン表面に貼り付ける描画手法である。グーローシェーディングは、少ない個数のポリゴンで擬似的に滑らかな曲面を表現するために用いられるスムーズシェーディングの一種である。グーローシェーディングでは、独立に指定されたポリゴンの頂点色を直線補完することでポリゴン内の各ピクセルの描画色を求める。
【００８８】
また、ＲＰＵ９は、シザリングを実行する。シザリングとは、ポリゴン及びスプライトのピクセルデータ列生成時に、指定されたビューポートの領域からはみ出している部分を切り取って表示しないようにする処理である。生成されたピクセルデータ列は、ＲＰＵ９内のラインバッファ（図示せず）に書き込まれるが、この際に書き込みピクセルが半透明色に設定されている場合、ラインバッファ内のピクセルのカラーと書き込みピクセルのカラーを混ぜ合わせるカラーブレンディングが行われる。
【００８９】
ステップＳ６にて、ＲＰＵ９は、ラインバッファから表示対象の各ピクセルの情報を読み出し、同期信号及びカラーバースト信号等を追加してコンポジットビデオ信号のデジタルデータストリームを生成する。生成されたデータストリームは、ビデオＤＡＣ２９に入力され、ビデオＤＡＣ２９からは、アナログのコンポジットビデオ信号が出力される。
【００９０】
さて、ＧＥ１７の詳細な説明に入る前に、三次元グラフィックス処理における座標系について説明する。
【００９１】
三次元直交座標系には、左手座標系と右手座標系とがある。本実施の形態では、右手座標系を採用する。右手座標系は、右手の親指、人差し指、中指をそれぞれ互いに垂直になるように立てたとき、親指がＸ軸の正、人差し指がＹ軸の正、中指がＺ軸の正を指す座標系である。
【００９２】
ローカル座標系は、オブジェクトを構成する各頂点の座標が、オブジェクト自身の原点からの相対値として表されている三次元座標系である。オブジェクトの各頂点の座標は、ローカル座標系の値で表され、ＲＯＭ等の外部メモリ５０に格納される。なお、オブジェクトによっては、ローカル座標系が階層構造となっているものもある。
【００９３】
ワールド座標系は、一つのシーンを構成する全てのオブジェクトに対して共通な三次元座標系である。各オブジェクトおよび視点（カメラ）の移動及び回転等は、通常この座標系で計算される。
【００９４】
ビュー座標系は、視点（カメラ）の位置を原点とし、視点の水平右方向及び垂直下方向をそれぞれＸ軸及びＹ軸の正とする三次元直交座標系である。この座標系では、視線ベクトル（Ｘ，Ｙ，Ｚ）の値は、（０，０，−１）として与えられ、対象点から視点へと向かう単位ベクトルとして定義される。
【００９５】
透視座標系は、ビュー座標系のオブジェクトを透視投影変換して得られる２次元座標系である。透視投影は、視点に近いオブジェクトが大きく、遠いオブジェクトが小さく投影される、人間の目から見る映像を得るための投影手法である。この投影を行う変換を透視投影変換と呼ぶ。透視投影変換を行う際には、視点から投影面までの距離を指定する必要がある。また、この座標系の原点は空間の中心に位置し、座標は符号付きの値で表される。
【００９６】
スクリーン座標系は、画面表示の際に用いられる２次元座標系である。但し、実際に画面に表示される領域は、この座標空間の一部となる。この座標系の原点は空間全体の左上に位置し、座標は符号無しの値で表される。ＲＰＵ９が扱う座標系は、この座標系のみである。
【００９７】
さて、上記のように、オブジェクトの各頂点の座標は、ローカル座標系の値で外部メモリ５０に格納されるので、三次元グラフィックスの表示を行う場合、上記した座標系の変換を経て、最終的に画面に表示するためのスクリーン座標系に変換しなければならない。
【００９８】
図３は、本実施の形態における座標変換フローの一例を示す図である。図３では、例として、ポリゴンの頂点座標配列の変換を示す。図３を参照して、ステップＳ１１の処理は、階層構造を持つオブジェクトに対してのみ行われる。ステップＳ１１にて、マルチメディアプロセッサ１は、各階層の変換行列を合成して、ローカル変換行列を生成し、これを用いて、頂点座標を変換する（ローカル変換）。変換行列自体は、三次元アフィン変換行列として定義される。
【００９９】
ステップＳ１２にて、マルチメディアプロセッサ１は、ワールド変換行列を用いて、ローカル座標系からワールド座標系に頂点座標を変換する（ワールド変換）。各オブジェクトの拡大・縮小、回転、及び平行移動は、この座標系で計算される。変換行列自体は、三次元アフィン変換行列として定義される。
【０１００】
ステップＳ１３にて、マルチメディアプロセッサ１は、ビュー変換行列を用いて、ワールド座標系の頂点座標をビュー座標系に変換する（ビュー変換）。変換行列自体は、三次元アフィン変換行列として定義される。
【０１０１】
ステップＳ１４にて、マルチメディアプロセッサ１は、視点から投影面までの距離に基づいて、ビュー座標系の頂点座標を、透視座標系に変換する（透視投影変換）。ビュー座標系でのＸＹＺ座標を（ｘｖ，ｙｖ，ｚｖ）、透視座標系でのＸＹ座標を（ｘｐ，ｙｐ）、視点から投影面までの距離を「ｄ」とすると、透視投影変換は次式で表される。
【０１０２】
【数１】
2007128180.tif 000003
【０１０３】
ステップＳ１５にて、マルチメディアプロセッサ１は、Ｘ成分及びＹ成分のオフセット値を用いて、透視座標系の頂点座標を、スクリーン座標系に変換する（ビューポート変換）。透視座標系では、ポリゴンの頂点座標は原点を中心とした符号付きの値となっている。これに対し、実際に画面表示の際に用いられるスクリーン座標系では、左上を原点とした符号無しの値であるため、ポリゴンの頂点座標に一定のオフセットを加算し、移動させる必要がある（スプライトについても同様）。また、多人数プレイ用のアプリケーションなど画面上に複数のビューポートを設ける場合、それぞれのビューポート位置への移動を行う必要がある（スプライトについても同様）。これらが、ビューポート変換である。
【０１０４】
透視座標系でのＸＹ座標を（ｘｐ，ｙｐ）、スクリーン座標系でのＸＹ座標を（ｘｓ，ｙｓ）、ＸＹ座標に加算されるオフセット値をそれぞれ「ｏｆｆｘ」及び「ｏｆｆｙ」とすると、ビューポート変換は次式で表される。
【０１０５】
【数２】
2007128180.tif 000004
【０１０６】
ここで、ステップＳ１１からＳ１３の各変換行列は、予め合成されて、各変換を一度に行うことができる変換行列が生成されている。このため、ステップＳ１１からＳ１３の各変換は、一度に行われる。つまり、ローカル変換の三次元アフィン変換行列、ワールド変換の三次元アフィン変換行列、及びビュー変換の三次元アフィン変換行列は合成され、一括してこれらの座標変換が行われる。
【０１０７】
次に、３次元アフィン変換及び３次元直交変換について説明する。３次元直交空間のベクトル(ｘ，ｙ，ｚ)を変換して得られるベクトル（ｘ´，ｙ´，ｚ´）が以下のように表される場合、この変換を３次元アフィン変換と呼ぶ。
【０１０８】
【数３】
2007128180.tif 000005
【０１０９】
この変換では、拡大・縮小、回転、及び平行移動を行うことが可能である。この変換を行う変換行列を同次座標表現すると、以下のような４次正方行列となる。
【０１１０】
【数４】
2007128180.tif 000006
【０１１１】
マルチメディアプロセッサ１では、３次元アフィン変換は、主にポリゴンの頂点座標の変換に用いられる。１つのベクトルに対して複数回の３次元アフィン変換を行う場合、行列の結合法則を利用して、複数の変換行列を１つの変換行列に合成することが可能である。アフィン変換に関連して、ＧＥ１７には、行列積を求めるコマンド「ＭａｔｒｉｘＭｕｌｔｉ」、及び３次元アフィン変換を行うコマンド「Ａｆｆｉｎｅ」が用意される。これらコマンドについては後で詳述する。
【０１１２】
３次元直交空間のベクトル(ｘ，ｙ，ｚ)を変換して得られるベクトル（ｘ´，ｙ´，ｚ´）が以下のように表される場合、この変換を３次元直交変換と呼ぶ。
【０１１３】
【数５】
2007128180.tif 000007
【０１１４】
この変換では、拡大・縮小、及び回転を行うことが可能である。この変換を行う変換行列は、以下のような３次正方行列で表される。
【０１１５】
【数６】
2007128180.tif 000008
【０１１６】
マルチメディアプロセッサ１では、３次元ベクトル直交変換は、主に頂点法線ベクトルおよびポリゴン（面）法線ベクトルの変換に用いられる。１つのベクトルに対して複数回の３次元ベクトル直交変換を行う場合、行列の結合法則を利用して、複数の変換行列を１つの変換行列に合成することが可能である。３次元ベクトル直交変換に関連して、ＧＥ１７には、行列積を求めるコマンド「ＭａｔｒｉｘＭｕｌｔｉ」、３次元ベクトル直交変換を行うコマンド「Ｔｒａｎｓ」が用意される。これらについては、後で詳述する。
【０１１７】
さて、次に、ＧＥ１７が行う各種処理について、適宜図面を参照しながら説明する。まず、頂点座標変換について説明する。
【０１１８】
図４は、ＧＥ１７によるポリゴンの頂点座標変換処理の流れを示すフローチャートである。先ず、入力データとして、頂点座標配列を用意する。この頂点座標配列の形式は、後述するＶｅｃｔｏｒ１０構造体であり、各メンバは、ローカル座標系の頂点座標である。
【０１１９】
ステップＳ２１にて、ＧＥ１７は、コマンド「Ａｆｆｉｎｅ」によって、頂点座標に対して、ローカル座標系からビュー座標系へのアフィン変換を施し、ビュー座標系の頂点座標を出力する。なお、コマンド実行前に、ローカル座標系からビュー座標系への変換行列の各要素を、ＧＥ１７内の後述するレジスタＧＲ０〜ＧＲ１１に格納しておく。出力データの形式は、後述するＶｅｃｔｏｒ３２構造体である。
【０１２０】
ステップＳ２２にて、ＧＥ１７は、コマンド「Ｐｐｒｏｊ」によって、ビュー座標系に変換された頂点座標に対して、ビュー座標系から透視座標系への透視投影変換を施し、透視座標系の頂点座標を出力する。なお、コマンド実行前に、視点から投影面までの距離を、ＧＥ１７内の後述するレジスタ「Ｄｉｓｔａｎｃｅ」に格納しておく。出力データの形式は、後述するＶｅｃｔｏｒ１６構造体である。
【０１２１】
ステップＳ２３にて、ＧＥ１７は、コマンド「Ｖｉｅｗ」によって、透視座標系に変換された頂点座標に対して、透視座標系からスクリーン座標系へのビューポート変換を施し、スクリーン座標系の頂点座標を出力する。なお、コマンド実行前に、Ｘ座標オフセット値及びＹ座標オフセット値を、ＧＥ１７内の後述するレジスタ「ＶｉｅｗｐｏｒｔＯｆｆｓｅｔＸ」及び「ＶｉｅｗｐｏｒｔＯｆｆｓｅｔＹ」に格納しておく。出力データの形式は、後述するＶｅｃｔｏｒ１６構造体である。
【０１２２】
ここで、コマンド「Ａｆｆｉｎｅ」、「Ｐｐｒｏｊ」、及び「Ｖｉｅｗ」をそれぞれ単独で実行する代わりに、コマンド「ＡＰＶ」によって、これらの処理を一括して実行することもが可能である。
【０１２３】
なお、この頂点座標変換の処理を、ポリゴン頂点座標の変換だけでなく、スプライト座標の変換にも用いることが可能である。
【０１２４】
次に、ライティングについて説明する。マルチメディアプロセッサ１が扱う標準的な３Ｄグラフィックスにおいては、光源として平行光源がワールド座標中に１つだけ存在することを想定している。すなわち、光源の座標は設定されず、光源を向く矢印の向きが光源ベクトルとして設定される。平行光源の例としては太陽光が挙げられる。
【０１２５】
マルチメディアプロセッサ１が扱う標準的なライティング処理においては、オブジェクトの表面は１００％の拡散反射を行うものとして想定され、鏡面反射は考慮されない。ここでは、１００％の拡散反射を、「入射した光が全ての方向に対して均一に反射をすること」として定義する。この場合、オブジェクトの表面をどの方向から見ても明るさは変わらない。すなわち、オブジェクト表面の明るさは、表面の法線ベクトルと光源ベクトルとの成す角によってのみ定められ、視点の位置に左右されない。したがって、拡散光明度「ｄｉｆｆｕｓｅ」は、下記の式のように、２つのベクトルの内積より求められる。但し、内積演算結果が負の場合、結果は「０」に飽和される。
【０１２６】
【数７】
2007128180.tif 000009
【０１２７】
（数７）において、ベクトルＬは光源ベクトル（単位ベクトル）、ベクトルＮはオブジェクト表面の単位法線ベクトル、角度θはベクトルＬとベクトルＮとが成す角を示す。
【０１２８】
但し、このライティングモデルでは、オブジェクト表面を裏側から見ている場合のライティング結果を正しく得ることができない。このため、オブジェクトの表裏にかかわらず光源が照らしている面を見ている場合、すなわち、ベクトルＬとベクトルＮとの内積の符号と、視線ベクトルとベクトルＮとの内積の符号とが等しい場合、オブジェクト表面の単位法線ベクトルと光源ベクトルとの内積演算結果の絶対値を求めることにより、正しいライティング結果を得る。これを整理すると、（数７）の拡散光明度の算出式は、以下のように修正される。
【０１２９】
【数８】
2007128180.tif 000010
【０１３０】
（数８）において、ベクトルＶは視線ベクトル（単位ベクトル）とし、角度θ´はベクトルＶとベクトルＮとが成す角を示す。視線ベクトルは、物体表面に法線ベクトルが設定されている点から視点へと向かうベクトルとして与えられるべきであるが、ライティングを施す全ての頂点およびポリゴン（面）に対して各々の視線ベクトルを算出すると膨大な演算量となってしまうため、マルチメディアプロセッサ１のライティングモデルでは、ビュー座標系での視線ベクトルを常に（０，０，−１）として扱う。
【０１３１】
ここまで、ベクトルＮをオブジェクト表面の単位法線ベクトルとして扱っているが、後述のように、テクスチャマッピングモードのポリゴンに対するライティング処理では、ポリゴン（面）の法線ベクトルを入力データとして扱い、グーローシェーディングモードのポリゴンに対するライティング処理では、ポリゴンの頂点に対する法線ベクトルを入力データとして扱う。したがって、ベクトルＮは、ライティングを施すポリゴンの描画モードに応じて、「ポリゴン（面）の単位法線ベクトル」あるいは「頂点の単位法線ベクトル」として扱われる。
【０１３２】
ところで、実際の空間に存在する物体は、太陽や電灯等の自ら発光する光源によってのみ照らされるのではなく、他の物体や物体自体の他の面によって反射された光がさらに物体表面を照らす。これを演算によって求めると膨大な演算量となってしまうため、リアルタイムの３Ｄグラフィックスの生成には適さない。しかし、単一の平行光源の反射光のみをモデル化すると、光源ベクトルと法線ベクトルとの成す角がπ／２ラジアン（＝９０度）以上の場合にポリゴンの表（おもて）の面に全く光が当たらないことになる。結果として、ポリゴンの表（おもて）の面は黒色で描画されることとなり、リアリティに欠ける表現となってしまう。
【０１３３】
そこで、マルチメディアプロセッサ１においては、オブジェクトの全ての面に環境光明度「ａｍｂｉｅｎｔ」として拡散光明度「ｄｉｆｆｕｓｅ」に一定値を加算する形の表現をとる。したがって、ポリゴン／頂点の明度「ｂｒｉｇｈｔｎｅｓｓ」は、下記のように求められる。
【０１３４】
【数９】
2007128180.tif 000011
【０１３５】
但し、上記のように加算は飽和演算として行われるため、加算結果が１．０以上となる場合には、結果は１．０に飽和される。
【０１３６】
次に、フローチャートを用いて、テクスチャマッピングモードでのライティング処理について説明する。なお、テクスチャマッピングモードのポリゴンに対しては、ライティング処理はポリゴン（面）単位で行われる。
【０１３７】
図５は、テクスチャマッピングモードでのポリゴンに対するライティング処理のフローチャートである。先ず、入力データとして、ポリゴン（面）毎の法線ベクトル配列を用意する。この配列の要素数および並び順は、出力データを格納する後述のポリゴン構造体配列の要素数および並び順に一致している必要がある。この法線ベクトル配列の各要素は、後述するＶｅｃｔｏｒ１０構造体であり、ローカル座標系の単位法線ベクトルを示している。
【０１３８】
オブジェクトが変形しない場合、予め算出したローカル座標系の単位法線ベクトルを、外部メモリ５０に格納しておくことが好ましい。一方、オブジェクトが変形する場合等、各ポリゴン（面）の単位法線ベクトルをリアルタイムで算出する必要がある場合には、ベクトルの外積を用いて算出する。ポリゴンの表の面（あるいは片面ポリゴンの可視面）を頂点ＡＢＣが時計回りに配置されている側とすると、ポリゴンの単位法線ベクトルＮは下記の式で求められる。なお、本実施の形態では、ポリゴンを三角形に限定する。
【０１３９】
【数１０】
2007128180.tif 000012
【０１４０】
（数１０）において、ベクトルＢは頂点Ａから頂点Ｂへ向かうベクトル、ベクトルＣは頂点Ａから頂点Ｃへ向かうベクトルを示す。
【０１４１】
ステップＳ３１にて、ＧＥ１７は、コマンド「Ｔｒａｎｓ」によって、ポリゴンの法線ベクトルに対して、ローカル座標系からビュー座標系への直交変換（回転変換）を施し、ビュー座標系の単位法線ベクトルを出力する。なお、コマンド実行前に、ローカル座標系からビュー座標系への変換行列の各要素を、ＧＥ１７内のレジスタＧＲ０〜ＧＲ８に格納しておく。出力ベクトルの形式は、後述するＶｅｃｔｏｒ３２構造体である。
【０１４２】
ステップＳ３２にて、ＧＥ１７は、コマンド「Ｄｏｔ」によって、ビュー座標系におけるポリゴンの法線ベクトルとビュー座標系における光源ベクトルとの内積を算出し、結果をポリゴン明度配列に出力する。なお、コマンド実行前に、ビュー座標系における光源ベクトルの各要素を、ＧＥ１７内のレジスタ「ＬｉｇｈｔＶＸ」、「ＬｉｇｈｔＶＹ」、及び「ＬｉｇｈｔＶＺ」に格納しておく。出力されるデータの形式は、後述するＤｏｔ構造体である。
【０１４３】
ステップＳ３３にて、ＧＥ１７は、コマンド「Ｂｒｉｇｈｔ−Ｐ」によって、Ｄｏｔ構造体配列に格納されたビュー座標系におけるポリゴンの法線ベクトルとビュー座標系における光源ベクトルとの内積演算結果と、ＧＥ１７内のレジスタ「Ａｍｂｉｅｎｔ」に格納された環境光明度と、から、ポリゴン（面）毎の明度を算出し、後述のポリゴン構造体配列のメンバ「Ｌｉｇｈｔ」として格納する。
【０１４４】
なお、コマンド「Ｔｒａｎｓ」、「Ｄｏｔ」、及び「Ｂｒｉｇｈｔ−Ｐ」をそれぞれ単独で実行する代わりに、コマンド「ＴＤＢＰ」によって、これらの処理を一括して実行することが可能である。
【０１４５】
ＲＰＵ９は、描画処理時に、ポリゴン構造体インスタンスのメンバ「Ｌｉｇｈｔ」の値とカラーパレットＲＡＭ１１から読み出した各テクセルのＲＧＢ値との乗算結果から、ポリゴンの各ピクセルの描画色を算出する。したがって、カラーパレットＲＡＭ１１に設定する値は、明度１００％の場合のカラーデータ、すなわちテクスチャの元来のカラーデータである。
【０１４６】
次に、フローチャートを用いて、グーローシェーディングモードでのライティング処理について説明する。なお、グーローシェーディングモードのポリゴンに対しては、ライティング処理は頂点単位で行われる。
【０１４７】
図６は、グーローシェーディングモードでのライティング処理の流れを示すフローチャートである。図６を参照して、先ず、入力データとして、頂点毎の法線ベクトル配列を用意する。この配列の要素数および並び順は、出力データを格納する後述のポリゴン構造体配列が参照する、スクリーン座標系における頂点座標配列の要素数および並び順に一致している必要がある。この法線ベクトル配列の各要素は、後述するＶｅｃｔｏｒ１０構造体であり、ローカル座標系の単位法線ベクトルを示している。
【０１４８】
オブジェクトが変形しない場合、予め算出したローカル座標系の単位法線ベクトルを、外部メモリ５０に格納しておくことが好ましい。一方、オブジェクトが変形する場合等、各頂点の単位法線ベクトルをリアルタイムで算出する必要がある場合、算出方法の一例として、頂点を共有するポリゴン（面）の単位法線ベクトルの平均によって近似する手法が挙げられる。
【０１４９】
ステップＳ４１にて、ＧＥ１７は、コマンド「Ｔｒａｎｓ」によって、頂点の法線ベクトルに対して、ローカル座標系からビュー座標系への直交変換（回転変換）を施し、ビュー座標系の単位法線ベクトルを出力する。なお、コマンド実行前に、ローカル座標系からビュー座標系への変換行列の各要素を、ＧＥ１７内のレジスタＧＲ０〜ＧＲ８に格納しておく。出力ベクトルの形式は、後述するＶｅｃｔｏｒ３２構造体である。
【０１５０】
ステップＳ４２にて、ＧＥ１７は、コマンド「Ｄｏｔ」によって、ビュー座標系における頂点の法線ベクトルとビュー座標系における光源ベクトルとの内積を算出し、結果を頂点明度配列に出力する。なお、コマンド実行前に、ビュー座標系における光源ベクトルの各要素を、ＧＥ１７内のレジスタ「ＬｉｇｈｔＶＸ」、「ＬｉｇｈｔＶＹ」、及び「ＬｉｇｈｔＶＺ」に格納しておく。出力されるデータの形式は、後述するＤｏｔ構造体である。
【０１５１】
ステップＳ４３にて、ＧＥ１７は、コマンド「Ｃｃａｌｃ」によって、先ず、Ｄｏｔ構造体配列に格納されたビュー座標系における頂点の法線ベクトルとビュー座標系における光源ベクトルとの内積演算結果と、ＧＥ１７内のレジスタ「Ａｍｂｉｅｎｔ」に格納された環境光明度とから、頂点毎の明度を算出する。その後、算出された頂点の明度と、ポリゴン構造体インスタンスのメンバ「Ａｃ」、「Ｂｃ」、及び「Ｃｃ」に格納されている各頂点のＲＧＢ値との乗算結果から、ライティング後の各頂点のＲＧＢ値を算出し、ポリゴン構造体インスタンスのメンバ「Ａｃ」、「Ｂｃ」、及び「Ｃｃ」に書き戻す。
【０１５２】
なお、コマンド「Ｔｒａｎｓ」及び「Ｄｏｔ」をそれぞれ単独で実行する代わりに、コマンド「ＴＤ」によって、これらの処理を一括して実行することが可能である。
【０１５３】
ＲＰＵ９は、描画処理時に、ポリゴン構造体インスタンスの「Ａｃ」、「Ｂｃ」、及び「Ｃｃ」に格納されている各頂点のＲＧＢ値から直線補間により、ポリゴンの各ピクセルの描画色を算出する。
【０１５４】
次に、裏面カリングについて説明する。マルチメディアプロセッサ１で扱われるポリゴンには、片面ポリゴンと両面ポリゴンとがある。片面ポリゴンは裏側から見た場合に表示されないものとして定義しているので、片面ポリゴンの裏面の描画を省略することにより、描画処理の無駄を省き、総合的な描画能力の向上を図ることができる。片面ポリゴンの裏面の描画を省略する処理を裏面カリングと呼ぶ。
【０１５５】
図７（ａ）は、ポリゴンの表の面の例示図、図７（ｂ）は、ポリゴンの裏の面の例示図である。図７（ａ）及び図７（ｂ）に示すように、マルチメディアプロセッサ１では、ポリゴンＰの表裏を頂点の並び順で定めている。つまり、ポリゴンＰの頂点ＡＢＣが、時計回りに並んで見える面を「表（おもて）面」、反時計回りに並んで見える面を「裏面」と定義する。このような定義に基づくと、ポリゴンＰの表裏判定を行うために、ベクトルの外積を用いることができる。
【０１５６】
ベクトルａとベクトルｂとの外積によって得られるベクトルａ×ｂは、ベクトルａ及びｂと垂直かつ、ベクトルａからベクトルｂへと右ねじを回した場合のねじの進行方向を向いている。したがって、ベクトルａ×ｂと視線ベクトルとの内積を算出することにより、ポリゴンＰを視点から見て、表裏のいずれの面が見えているかを判別できる。
【０１５７】
ＧＥ１７が行うポリゴンの表裏判定においては、スクリーン座標系に変換されたポリゴンが用いられ、全てのポリゴンの頂点のＺ座標は同じ値であるとみなされる。このようにしても視点から見た表裏の関係は変わらないため、外積の計算を単純化できる利点がある。
【０１５８】
例えば、ベクトルａ、ベクトルｂ、およびベクトルａ×ｂの各ベクトルの３次元直交座標系での成分を、それぞれ（Ｘａ，Ｙａ，Ｚａ）、（Ｘｂ，Ｙｂ，Ｚｂ）、および（Ｘａｂ，Ｙａｂ，Ｚａｂ）とすると、ベクトルａ×ｂの各成分は以下のように求められる。
【０１５９】
【数１１】
2007128180.tif 000013
【０１６０】
ただし、ＧＥ１７は、Ｚａ＝Ｚｂ＝０とみなすため、次式のみを実行する。
【０１６１】
【数１２】
2007128180.tif 000014
【０１６２】
スクリーン座標系におけるポリゴンの頂点ＡＢＣのＸＹ座標をそれぞれ（Ａｘ，Ａｙ）、（Ｂｘ，Ｂｙ）、及び（Ｃｘ，Ｃｙ）とすると、表裏判定のためのベクトルの外積のＺ成分Ｖｚは、次のようになる。
【０１６３】
【数１３】
2007128180.tif 000015
【０１６４】
ＧＥ１７は、コマンド「ＣＷＤ」に応じて、スクリーン座標系の頂点座標が格納されたポリゴン構造体インスタンスのメンバ「Ａｘ」、「Ａｙ」、「Ｂｘ」、「Ｂｙ」、「Ｃｘ」、および「Ｃｙ」の値より、ベクトルの外積のＺ成分Ｖｚを求める。
【０１６５】
また、ＧＥ１７は、ポリゴン構造体インスタンスのメンバ「Ｆａｃｅ」より、ポリゴンが「片面ポリゴン」か「両面ポリゴン」かを判別し、下記のように裏面カリング処理を行う。つまり、ＧＥ１７は、メンバ「Ｆａｃｅ」＝０の場合（つまり、片面ポリゴンの場合）、Ｖｚ≧０ならば、裏面カリングを行い、メンバ「Ｆａｃｅ」＝１の場合（つまり、両面ポリゴンの場合）、裏面カリングを行わない。
【０１６６】
ＧＥ１７は、裏面カリングされるポリゴン構造体インスタンスのメンバ「Ａｘ」、「Ｂｘ」、及び「Ｃｘ」には、それぞれ「２０４７」（Ｘ座標の最大値）を設定し、メンバ「Ａｙ」、「Ｂｙ」、及び「Ｃｙ」には、それぞれ「１０２３」（Ｙ座標の最大値）を設定する。
【０１６７】
また、コマンド「ＣＷＤ」の発行時に、ＧＥ１７内のレジスタ「ＧＥＣｏｍｍａｎｄ」のフィールド「ＩｎｖａｌｉｄＳｔｒｕｃｔｕｒｅＲｅｍｏｖｅ」に「１」が設定されていた場合、ＧＥ１７は、裏面カリングされたポリゴン構造体インスタンスを、出力されるポリゴン構造体配列から取り除き、有効なポリゴン構造体インスタンスのみを前詰めで配列に格納する。
【０１６８】
次に、ビューボリュームクリッピングについて説明する。ビューボリュームクリッピングとは、視点に近すぎるポリゴンまたは視点から遠すぎるポリゴンや、透視投影変換後にスクリーン座標系からはみ出してしまうポリゴンの描画を省略することにより、効率的な描画処理を実現するための機能である。
【０１６９】
マルチメディアプロセッサ１におけるビューボリュームクリッピングは、ＧＥ１７に対するコマンド「Ｐｐｒｏｊ」および「Ｖｉｅｗ」（あるいはコマンド「Ｐｐｒｏｊ」および「Ｖｉｅｗ」を含む複合コマンド「ＡＰＶ」）によって、頂点座標が、設定されたビューボリューム内に存在するか否かをテストし、ＧＥ１７に対するコマンド「ＣＷＤ」によって、ビューボリューム内に無い頂点を持つポリゴン構造体インスタンスをカリングすることで行う。これらのことを図面を用いて説明する。
【０１７０】
図８は、ビューボリュームクリッピングの説明図である。図８を参照して、ニアクリップ面ＮＣは、ＧＥ１７内のレジスタ「ＺＮｅａｒ」によって規定され、ファークリップ面ＦＣは、ＧＥ１７内のレジスタ「ＺＦａｒ」によって規定される。ビューボリュームＶＶは、ニアクリップ面ＮＣとファークリップ面ＦＣとで囲まれた空間となる。ＧＥ１７は、透視投影変換を行う前に、ビュー座標系の頂点のＺ座標の値がビューボリュームＶＶの範囲内に入っているか否かをテストする。
【０１７１】
そして、ＧＥ１７は、ビュー座標系の頂点のＺ座標が、レジスタ「ＺＮｅａｒ」の値未満、あるいはレジスタ「ＺＦａｒ」の値を超えている場合、スクリーン座標系における頂点座標を格納するＶｅｃｔｏｒ１６構造体のメンバ「Ｃｌｉｐｐｉｎｇ」に「１」をセットする。また、ＧＥ１７は、コマンド「Ｖｉｅｗ」によるビューポート変換後のスクリーン座標系の頂点Ｘ座標の値が「０」未満または「２０４８」以上の場合や、スクリーン座標系の頂点Ｙ座標の値が「０」未満あるいは「１０２４」以上の場合にも、スクリーン座標系における頂点座標を格納するＶｅｃｔｏｒ１６構造体のメンバ「Ｃｌｉｐｐｉｎｇ」に「１」をセットする。
【０１７２】
そして、コマンド「ＣＷＤ」に応じて、ＧＥ１７は、スクリーン座標系における頂点座標配列を参照して、ポリゴン構造体インスタンスの頂点座標を設定するが、この際にメンバ「Ｃｌｉｐｐｉｎｇ」に「１」がセットされている頂点がポリゴン構造体インスタンスの３頂点のいずれかに含まれている場合、そのポリゴン構造体インスタンスをカリングする。つまり、そのポリゴン構造体インスタンスのメンバ「Ａｘ」、「Ｂｘ」、及び「Ｃｘ」のそれぞれに「２０４７」を、メンバ「Ａｙ」、「Ｂｙ」、及び「Ｃｙ」のそれぞれに「１０２３」を設定する。
【０１７３】
また、コマンド「ＣＷＤ」の発行時に、ＧＥ１７内のレジスタ「ＧＥＣｏｍｍａｎｄ」のフィールド「ＩｎｖａｌｉｄＳｔｒｕｃｔｕｒｅＲｅｍｏｖｅ」に「１」が設定されていた場合、ＧＥ１７は、カリングされたポリゴン構造体インスタンスを、出力されるポリゴン構造体配列から取り除き、有効なポリゴン構造体インスタンスのみを前詰めで配列に格納する。
【０１７４】
次に、パースペクティブコレクト（遠近補正）について説明する。
【０１７５】
図９（ａ）は、パースペクティブコレクトを施したテクスチャマッピングの例示図、図９（ｂ）は、パースペクティブコレクトを施していないテクスチャマッピングの例示図である。透視投影変換された三次元イメージを表現するテクスチャマッピングにおいて、画面上の描画ピクセルに対応するテクセルのＵＶ座標を、ポリゴンの各頂点座標に対応する、テクセルのＵＶ座標の単なる線形補完によって求めると、図９（ｂ）に示すように、マッピングされたイメージが歪んでしまうことがある。特に頂点のＺ座標（奥行き）に大きく差がある場合には歪みが大きくなり、複数の３角形ポリゴンで構成される平面の継ぎ目が不自然に見える等の問題が発生する。そこで、このような歪みを解消して、図９（ａ）に示すような歪みのないイメージを生成するために、パースペクティブコレクト（遠近補正）の機能が搭載されている。
【０１７６】
ここで、ＵＶ座標系は、テクセルデータを格納する２次元直交座標系であり、ＵＶ座標で定められる空間をＵＶ空間とする。三角形ポリゴンの各頂点Ａ，Ｂ及びＣをＵＶ空間へ写像したときの座標を（Ａｕ，Ａｖ）、（Ｂｕ，Ｂｖ）および（Ｃｕ，Ｃｖ）とする。また、各頂点Ａ，Ｂ及びＣのビュー座標系におけるＸＹＺ座標を（Ａｘ，Ａｙ，Ａｚ）、（Ｂｘ，Ｂｙ，Ｂｚ）および（Ｃｘ，Ｃｙ，Ｃｚ）とする。
【０１７７】
そうしたとき、（Ａｕ／Ａｚ，Ａｖ／Ａｚ，１／Ａｚ）、（Ｂｕ／Ｂｚ，Ｂｖ／Ｂｚ，１／Ｂｚ）および（Ｃｕ／Ｃｚ，Ｃｖ／Ｃｚ，１／Ｃｚ）の線形補間によって求められた値（ｕ／ｚ，ｖ／ｚ，１／ｚ）の「ｕ／ｚ」に「１／ｚ」の逆数を乗じた値ｕ、および、「ｖ／ｚ」に「１／ｚ」の逆数を乗じた値ｖを、ＵＶ空間におけるテクセル座標（ｕ，ｖ）としてテクセルデータを取得することにより、透視投影変換後の正確なテクスチャマッピングを実現する。
【０１７８】
ただし、マルチメディアプロセッサ１では、「１／Ａｚ」、「１／Ｂｚ」および「１／Ｃｚ」を頂点毎に設定する代りに、「１／Ｂｚ」および「１／Ｃｚ」に「Ａｚ」を掛け合わせた値、すなわち、「Ａｚ／Ｂｚ」および「Ａｚ／Ｃｚ」をポリゴン構造体インスタンスのメンバ「Ｂｗ」及び「Ｃｗ」にそれぞれ設定する。但し、頂点Ａに対するパラメータは常に「１」となるため、ポリゴン構造体には含まれない。
【０１７９】
コマンド「ＣＷＤ」は、ポリゴン構造体インスタンスのメンバ「Ｔｙｐｅ」の値が「０」を示し（つまり、テクスチャマッピングモードのとき）、かつ、カリングされないポリゴン構造体インスタンスに対して、メンバ「Ｂｗ」及び「Ｃｗ」を算出する処理を行う。
【０１８０】
次に、描画優先順位を示すデプス値の算出について説明する。ＲＰＵ９は、ポリゴン単位での描画優先順位に従ってポリゴンの描画を行う。したがって、ＧＥ１７は、ビュー座標系におけるポリゴンの３頂点のＺ座標から、ポリゴンの描画優先順位を表すデプス値の算出を行う必要がある。ポリゴンは、デプス値が大きいほど奥に（先に）描画され、デプス値が小さいほど手前に（後に）描画される。デプス値は、描画されるポリゴン構造体インスタンスのメンバ「Ｄｅｐｔｈ」に格納される。
【０１８１】
ポリゴン構造体のメンバ「Ｄｅｐｔｈ」は、１２ビットの浮動小数点数であり、下位８ビットの仮数フィールドと上位４ビットの指数フィールドとから成る。１２ビットの浮動小数点数形式のメンバ「Ｄｅｐｔｈ」の示す値は、以下の式で表される。
【０１８２】
【数１４】
2007128180.tif 000016
【０１８３】
（数１４）において、「Ｍ」は仮数フィールドを示し、「Ｅ」は指数フィールドを示す。また、「ＤＥＢ」は、指数フィールドＥに対するバイアス（ゲタ）を示し、ＧＥ１７内のレジスタ「ＤｅｐｔｈＢｉａｓ」に０〜７のいずれかを示す３ビットの値として設定される。
【０１８４】
メンバ「Ｄｅｐｔｈ」は、符号無しの値であるため、符号ビットは設けられていない。仮数は１．＊＊＊＊＊＊＊＊の形に正規化されるが、仮数フィールドにはＭＳＢの「１」は含まれておらず、実際の仮数は仮数フィールドの８ビットに１．０を加算した値となる（いわゆる「暗黙の１」が設定されている。）。また、指数フィールドはバイアスが加算された、いわゆる「ゲタばき表現」となる。
【０１８５】
ＧＥ１７は、コマンド「ＣＷＤ」に応じて、ビュー座標系の頂点座標配列を参照し、ポリゴンの３頂点に対応するメンバ「Ｃｌｉｐｐｉｎｇ」（Ｖｅｃｔｏｒ１６構造体）が全て「０」（つまり、カリングなし）の場合にデプス値算出を実行する。ＧＥ１７は、ポリゴンの３頂点のＺ座標を全て加算した結果を上述の１２ビットの浮動小数点数形式に変換し、変換結果の値とポリゴン構造体インスタンスのメンバ「Ｄｅｐｔｈ」に格納されているデプス初期値とを加算し、加算結果をメンバ「Ｄｅｐｔｈ」に書き戻す。ここで、デプス初期値は、１２ビットの符号付きの値（２の補数）であることに注意されたい。また、仮数フィールドの８ビットを得る際の丸めモードは切り捨てである。
【０１８６】
以上のように、ポリゴンには頂点毎のデプス値は与えられず、ポリゴン毎のデプス値のみが与えられる。
【０１８７】
次に、ＧＥ１７の内部構成の詳細を説明していく。
【０１８８】
図１０は、図１のＧＥ１７の内部構成を示すブロック図である。図１０を参照して、ＧＥ１７は、実行ユニット１００、制御ユニット２００、Ｉ／Ｏレジスタセット３００、及びロード／ストアユニット４００を含む。
【０１８９】
Ｉ／Ｏレジスタセット３００は、ＧＥ１７で実行されるコマンドを書き込むレジスタ、ＧＥ１７の各種制御を行うレジスタ、及びコマンドで使用される入力引数を格納するレジスタを含む。ＣＰＵ５は、Ｉ／Ｏバス２７を通じて、これら全てのレジスタにアクセスすることができる。各レジスタの詳細については後述する。Ｉ／Ｏレジスタセット３００は、コマンドの完了時、ＣＰＵ５に対して割り込み要求信号ＩＲＱを出力する。但し、ＧＥ１７からの割り込み要求信号ＩＲＱの出力がイネーブルに設定されている場合に限られる。
【０１９０】
制御ユニット２００は、Ｉ／Ｏレジスタセット３００に含まれるレジスタ「ＧＥＣｏｍｍａｎｄ」（後述）に書き込まれたコマンド、及びＩ／Ｏレジスタセット３００に含まれるレジスタ「ＲｅｐｅａｔＣｏｕｎｔ」に書き込まれたコマンド繰り返し回数に従って、実行ユニット１００およびロード／ストアユニット４００を制御し、コマンドの実行を行う。
【０１９１】
各コマンドの各サイクルにおける制御信号の状態は、マイクロコードとして記憶されている。本実施の形態では、マイクロコードは、ハードワイヤードで構成されているため固定値を示すが、ＲＡＭやＥＥＰＲＯＭでマイクロコード格納領域を構成する場合は、マイクロコードを可変にすることができる。マイクロコードを可変にすると、ダイエリア（半導体上の面積）は大きくなるが、ＧＥ１７のコマンドを必要な処理に応じて最適化することができる。また、制御ユニット２００は、コマンドが実行中か否かを示すコマンド実行中フラグ、およびコマンドの完了時にアサートされるコマンド完了フラグを、Ｉ／Ｏレジスタセット３００に出力する。これらのフラグの状態は、Ｉ／Ｏレジスタセット３００に含まれるレジスタ「ＧＥＳｔａｔｕｓ」に反映される。
【０１９２】
実行ユニット１００は、各種演算器を含み、制御ユニット２００の制御に応じて各種演算を実行する。また、ロード／ストアユニット４００を通じて、メインＲＡＭ２５からのリードデータを受け取って演算の入力値として用い、演算の結果をライトデータとしてメインＲＡＭ２５に書き出す。
【０１９３】
ロード／ストアユニット４００は、制御ユニット２００から入力されるアドレスと制御信号とに従って、メインＲＡＭアクセスアービタ２３にメインＲＡＭ２５のリード要求またはライト要求を発行する。リード要求が受け付けられると、メインＲＡＭ２５から読み出されたリードデータを実行ユニット１００に引き渡す。また、ライト要求が受け付けられると、実行ユニット１００から受け取ったライトデータをメインＲＡＭアクセスアービタ２３に引き渡す。
【０１９４】
図１１は、図１０のＩ／Ｏレジスタセット３００に含まれる各種レジスタの説明図である。図１１に示すように、Ｉ／Ｏレジスタセット３００は、レジスタ「ＧＲ０」〜「ＧＲ１５」、レジスタ「Ｄｉｓｔａｎｃｅ」、レジスタ「ＺＮｅａｒ」、レジスタ「ＺＦａｒ」、レジスタ「ＶｉｅｗｐｏｒｔＯｆｆｓｅｔＸ」、レジスタ「ＶｉｅｗｐｏｒｔＯｆｆｓｅｔＹ」、レジスタ「Ａｍｂｉｅｎｔ」、レジスタ「ＬｉｇｈｔＶＸ」、レジスタ「ＬｉｇｈｔＶＹ」、レジスタ「ＬｉｇｈｔＶＺ」、レジスタ「ＤｅｐｔｈＢｉａｓ」、レジスタ「ＧＥＣｏｍｍａｎｄ」、レジスタ「ＧＥＳｔａｔｕｓ」、レジスタ「ＲｅｐｅａｔＣｏｕｎｔ」、レジスタ「ＰｏｌｙｇｏｎＣｏｕｎｔ」、レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」、レジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｒｅｓｓ」、及びレジスタ「ＧＥＢａｓｅＡｄｄｒｅｓｓ」を含む。各レジスタは、図中対応するＩ／Ｏバスアドレスに配置される。
【０１９５】
レジスタ「ＧＲ０」〜「ＧＲ１５」は、それぞれ、各コマンドの実行の際に、入力データ又は出力データを格納するレジスタである。レジスタ「ＧＲ０」〜「ＧＲ１５」の各々は、３２ビットである。コマンドによっては、ハーフワード（１６ビット）単位で使用されることもある。
【０１９６】
レジスタ「Ｄｉｓｔａｎｃｅ」は、透視投影変換における視点から投影面までの距離を、１６ビット符号無し整数で指定する。レジスタ「ＺＮｅａｒ」は、透視投影変換の際に行われるビューボリュームクリッピングのニアクリップ値（図８のニアクリップ面ＮＣ）を、１６ビット符号無し整数で指定する。レジスタ「ＺＦａｒ」は、透視投影変換の際に行われるビューボリュームクリッピングのファークリップ値（図８のファークリップ面ＦＣ）を、１６ビット符号無し整数で指定する。
【０１９７】
レジスタ「ＶｉｅｗｐｏｒｔＯｆｆｓｅｔＸ」は、ビューポート変換の際にＸ座標に加算されるオフセット値（（数２）の「ｏｆｆｘ」）を、１２ビット符号無し固定小数点数で指定する。レジスタ「ＶｉｅｗｐｏｒｔＯｆｆｓｅｔＹ」は、ビューポート変換の際にＹ座標に加算されるオフセット値（（数２）の「ｏｆｆｙ」）を、１２ビット符号無し固定小数点数で指定する。レジスタ「Ａｍｂｉｅｎｔ」は、ポリゴン明度算出あるいはポリゴン頂点色算出の際に必要とされる環境光明度の値を、符号無し固定小数点数で指定する（（数９）参照）。
【０１９８】
レジスタ「ＬｉｇｈｔＶＸ」は、ベクトル内積算出の際に入力される一方のベクトルのＸ成分を、符号付き固定小数点数で指定する。ビュー座標系の光源ベクトルのＸ成分が設定されることを想定している。レジスタ「ＬｉｇｈｔＶＹ」は、ベクトル内積算出の際に入力される一方のベクトルのＹ成分を、符号付き固定小数点数で指定する。ビュー座標系の光源ベクトルのＹ成分が設定されることを想定している。レジスタ「ＬｉｇｈｔＶＺ」は、ベクトル内積算出の際に入力される一方のベクトルのＺ成分を、符号付き固定小数点数で指定する。ビュー座標系の光源ベクトルのＺ成分が設定されることを想定している。なお、図５のステップＳ３２及び図６のステップＳ４２を参照されたい。
【０１９９】
レジスタ「ＤｅｐｔｈＢｉａｓ」は、ポリゴンのデプス値Ｄｅｐｔｈの指数部のバイアス（ゲタ）を設定する。バイアスの値を「ＤＥＢ」、デプス値Ｄｅｐｔｈの仮数部を「Ｍ」、指数部を「Ｅ」とすると、デプス値Ｄｅｐｔｈは、（数１４）のようになる。
【０２００】
レジスタ「ＧＥＣｏｍｍａｎｄ」は、ＧＥ１７の制御のためのコマンドを設定するレジスタである。このレジスタにコマンドコードをライトすることにより、各コマンドの実行が開始される。後で詳細に説明するが、ＧＥ１７を制御するためのコマンドとして、コマンド「ＮＯＰ（操作無し）」、コマンド「Ａｆｆｉｎｅ（ベクトルアフィン変換）」、コマンド「Ｐｐｒｏｊ（透視投影変換）」、コマンド「Ｖｉｅｗ（ビューポート変換）」、コマンド「Ｃｕｌｌ（頂点座標設定およびカリング）」、コマンド「Ｔｒａｎｓ（ベクトル直交変換）」、コマンド「Ｄｏｔ（ベクトル内積）」、コマンド「Ｂｒｉｇｈｔ−Ｐ」（ポリゴン明度算出）」、コマンド「Ｃｃａｌｅ（ポリゴン頂点色算出）」、コマンド「ＡＰＶ（ベクトルアフィン変換／透視投影変換／ビューポート変換）」、コマンド「ＣＷＤ（頂点座標設定およびカリング／パースペクティブコレクト／デプス算出）」、コマンド「ＴＤＢＰ（ベクトル直交変換／ベクトル内積／ポリゴン明度算出）」、コマンド「ＴＤ（ベクトル直交変換／ベクトル内積）」、コマンド「ＭａｔｒｉｘＭｕｌｔｉ（行列積）」、およびコマンド「Ｓｑｒｔ（平方根算出）」が用意され、それぞれに５ビットのコマンドコードが割り当てられる。
【０２０１】
レジスタ「ＧＥＣｏｍｍａｎｄ」は、５ビットのコマンドコードを格納するフィールド、１ビットの「ＩｎｖａｌｉｄＳｔｒｕｃｔｕｒｅＲｅｍｏｖｅ（不要ポリゴン構造体インスタンス削除制御）」フィールド、及び１ビットの「ＩｎｔｅｒｒｕｐｔＥｎａｂｌｅ（割り込み制御）」フィールドを含む。
【０２０２】
フィールド「ＩｎｖａｌｉｄＳｔｒｕｃｔｕｒｅＲｅｍｏｖｅ」は、「０」のとき、カリング／クリッピング判定されたポリゴン構造体インスタンスを配列から削除しないことを示し、「１」のとき、カリング／クリッピング判定されたポリゴン構造体インスタンスを配列から削除することを示す。フィールド「ＩｎｔｅｒｒｕｐｔＥｎａｂｌｅ」は、「０」のとき、コマンド実行完了後、割り込み要求を発生しないことを示し、「１」のとき、コマンド実行完了後、割り込み要求ＩＲＱ（図１０参照）を発生することを示す。
【０２０３】
レジスタ「ＧＥＳｔａｔｕｓ」は、ＧＥ１７のステータスおよび演算結果を示す８ビットのレジスタである。レジスタ「ＧＥＳｔａｔｕｓ」は、各々１ビットのキャリーフラグＣＹ，オーバーフローフラグＯＶ，サインフラグＳ，ゼロ除算フラグＺｅｒｏＤｉｖ，割り込みフラグＩｎｔｅｒｒｕｐｔ及びコマンド実行中フラグＯｐｅｒａｔｉｎｇを含む。
【０２０４】
キャリーフラグＣＹが「０」の場合、コマンド実行中にキャリーが発生しなかったことを示し、「１」の場合、コマンド実行中に１度以上キャリーが発生したことを意味する。オーバーフローフラグＯＶが「０」の場合、コマンド実行中にオーバーフローが発生しなかったことを意味し、「１」は、コマンド実行中に１度以上オーバーフローが発生したことを意味する。
【０２０５】
サインフラグＳが「０」の場合、コマンド実行（最終）結果のサイン（符号）フラグ（ＭＳＢ）が「０」であることを示し、「１」の場合、コマンド実行（最終）結果のサインフラグ（ＭＳＢ）が「１」であることを示す。ゼロ除算フラグＺｅｒｏＤｉｖが「０」の場合、ゼロ除算が発生しなかったことを意味し、「１」の場合、ゼロ除算が発生したことを意味する（コマンド実行は中止）。
【０２０６】
割り込みフラグＩｎｔｅｒｒｕｐｔが「０」の場合、割り込み要求が無いことを意味し、「１」の場合、割り込み要求中であることを意味する。コマンド実行中フラグＯｐｅｒａｔｉｎｇが「０」の場合、ＧＥ１７がアイドル状態であることを意味し、「１」の場合、ＧＥ１７が、コマンド実行状態であることを意味する。
【０２０７】
レジスタ「ＲｅｐｅａｔＣｏｕｎｔ」は、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ／Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）型コマンドの実行を繰り返す回数を指定する。コマンドの実行が１回行われる毎にデクリメントされ、アンダーフローが発生すると実行が停止される。したがって、このレジスタに実際に設定する値は、「繰り返し回数−１」になる。また、ＳＩＭＤ型以外のコマンドについては、コマンドの実行開始前に、このレジスタに「０」を設定する。
【０２０８】
レジスタ「ＰｏｌｙｇｏｎＣｏｕｎｔ」は、コマンド処理が完了したポリゴン数のカウント値を示す。但し、カリング／クリッピングにより削除されたポリゴンはカウントされない。このレジスタはリードオンリーであり、値はコマンド開始時に「０」にクリアされる。レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」は、コマンド実行の際、ソースオペランド（演算対象が格納される領域）のベースアドレスを設定する。アドレスは、メインＲＡＭ２５領域の物理アドレスである。値は、演算対象のデータ型に応じてアラインされる必要がある。このレジスタの値は、ＳＩＭＤ型コマンド実行時、データ型に応じてインクリメントされる。
【０２０９】
レジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｒｅｓｓ」は、コマンドの実行後、デスティネーションオペランド（演算結果が格納される領域）のベースアドレスを設定する。アドレスは、メインＲＡＭ２５領域の物理アドレスである。値は、演算結果のデータ型に応じてアラインされる必要がある。このレジスタの値は、ＳＩＭＤ型コマンド実行時、データ型に応じてインクリメントされる。
【０２１０】
レジスタ「ＧＥＢａｓｅＡｄｄｒｅｓｓ」は、ＧＥ１７によって処理されるポリゴン構造体インスタンスのベースアドレスを設定する。アドレスは、メインＲＡＭ２５領域の物理アドレスである。ポリゴン構造体インスタンスは１６バイトアラインで配置される必要があるため、アドレスの下位４ビットは常に「００００」とみなされ、これ以外の値が書き込まれても無視される。このレジスタの値は、ＳＩＭＤ型コマンド実行時、１６バイト単位でインクリメントされる。
【０２１１】
次に、ＧＥ１７で処理されるデータのフォーマットを説明する。
【０２１２】
［１］Ｍａｔｒｉｘ３２配列
【０２１３】
Ｍａｔｒｉｘ３２配列は、行列積を求めるコマンド「ＭａｔｒｉｘＭｕｌｔｉ」における入力データおよび出力データの形式である。
【０２１４】
図１２（ａ）は、Ｍａｔｒｉｘ３２配列の構成を示す図、図１２（ｂ）は、図１２（ａ）のＭａｔｒｉｘ３２配列の要素の構成を示す図である。図１２（ａ）に示すように、Ｍａｔｒｉｘ３２配列は、１２個の要素Ｄ［０］〜Ｄ［１１］から成り、各要素Ｄ［０］〜Ｄ［１１］は４行３列の行列の各要素を示す（（数１５）参照）。コマンド「ＭａｔｒｉｘＭｕｌｔｉ」は、４次正方行列同士の行列積を求めるコマンドであるが、第４行の要素は常に（０，０，０，１）に定められているので（（数１５）参照）、第４行の要素は入力データおよび出力データのどちらにも含まれない。Ｍａｔｒｉｘ３２配列の各要素Ｄ［０］〜Ｄ［１１］は、第１行第１列の要素Ｄ［０］から順にメモリＭＥＭに格納される。
【０２１５】
図１２（ｂ）に示すように、Ｍａｔｒｉｘ３２配列の各要素は、符号付き３２ビット固定小数点数で表される。コマンド「ＭａｔｒｉｘＭｕｌｔｉ」の出力データにおいては、全ての要素は３２ビット固定小数点数であるが、後述のコマンド「Ａｆｆｉｎｅ」及び「Ｔｒａｎｓ」で用いられる変換行列においては、第１行〜第３行の第１列〜第３列の行列要素は１６ビット固定小数点数である。３２ビット固定小数点数から１６ビット固定小数点数への変換は、ＣＰＵ５によって行われる。
【０２１６】
［２］Ｖｅｃｔｏｒ１０構造体
【０２１７】
Ｖｅｃｔｏｒ１０構造体は、コマンド「Ａｆｆｉｎｅ」及び「Ｔｒａｎｓ」で用いられる入力データの形式である。ローカル座標系における頂点座標配列および単位法線ベクトル配列の各要素が、Ｖｅｃｔｏｒ１０構造体の形式で表される。
【０２１８】
図１３（ａ）は、Ｖｅｃｔｏｒ１０構造体の構成を示す図、図１３（ｂ）は、Ｖｅｃｔｏｒ１０構造体のメンバの説明図、図１３（ｃ）は、Ｖｅｃｔｏｒ１０構造体のメンバ「Ｘ」〜「Ｚ」の構成を示す図である。図１３（ａ）に示すように、Ｖｅｃｔｏｒ１０構造体は、メンバ「Ｘ」、「Ｙ」、「Ｚ」及び「Ｓｃａｌｅ」からなる。図１３（ｃ）に示すように、ベクトルの成分を示すメンバ「Ｘ」、「Ｙ」及び「Ｚ」の各々は、１０ビット符号付き固定小数点数で表される。ローカル座標系の頂点座標配列及び法線ベクトル配列の各成分は、基本的に約−１．０〜約＋１．０の範囲に正規化されている。但し、図１３（ｂ）に示すように、メンバ「Ｓｃａｌｅ」の値によって、最大約−８．０〜約＋８．０の範囲まで拡大した値とすることが可能である。
【０２１９】
［３］Ｖｅｃｔｏｒ１６構造体
【０２２０】
Ｖｅｃｔｏｒ１６構造体は、コマンド「Ｐｐｒｏｊ」の出力データの形式であり、コマンド「Ｖｉｅｗ」の入力データ及び出力データの形式である。透視座標系またはスクリーン座標系における頂点座標配列の各要素が、Ｖｅｃｔｏｒ１６構造体の形式で表される。但し、カリングやポリゴンパラメータ算出のために、ビュー座標系のベクトルＺ成分の値がＶｅｃｔｏｒ１６構造体に含まれている。
【０２２１】
図１４（ａ）は、Ｖｅｃｔｏｒ１６構造体の構成を示す図、図１４（ｂ）は、Ｖｅｃｔｏｒ１６構造体のメンバの説明図、図１４（ｃ）は、Ｖｅｃｔｏｒ１６構造体のメンバ「Ｚ」の構成を示す図、図１４（ｄ）は、Ｖｅｃｔｏｒ１６構造体のメンバ「Ｘ」及び「Ｙ」の構成を示す図である。図１４（ａ）に示すように、Ｖｅｃｔｏｒ１６構造体は、メンバ「Ｃｌｉｐｐｉｎｇ」、「Ｘ」、「Ｙ」および「Ｚ」からなる。図１４（ｃ）に示すように、ベクトルのＺ成分を示すメンバ「Ｚ」は、３１ビット符号無し固定小数点数で表される。また、図１４（ｄ）に示すように、ベクトルのＸＹ成分を示すメンバ「Ｘ」及び「Ｙ」は、１６ビット符号付き固定小数点数で表される。
【０２２２】
図１４（ｂ）に示すように、メンバ「Ｃｌｉｐｐｉｎｇ」の値は、コマンド「Ｐｐｒｏｊ」および「Ｖｉｅｗ」（または複合コマンド「ＡＰＶ」）によって行われるビューボリュームクリッピングにおいて、ベクトルの示す頂点座標がビューボリュームの外にあると判別された場合に「１」にセットされる。
【０２２３】
［４］Ｖｅｃｔｏｒ３２構造体
【０２２４】
Ｖｅｃｔｏｒ３２構造体は、コマンド「Ａｆｆｉｎｅ」及び「Ｔｒａｎｓ」の出力データの形式であり、コマンド「Ｐｐｒｏｊ」の入力データの形式である。ビュー座標系における頂点座標配列および法線ベクトル配列の各要素が、Ｖｅｃｔｏｒ３２構造体の形式で表される。
【０２２５】
図１５（ａ）は、Ｖｅｃｔｏｒ３２構造体の構成を示す図、図１５（ｂ）は、Ｖｅｃｔｏｒ３２構造体のメンバの説明図である。図１５（ａ）を参照して、Ｖｅｃｔｏｒ３２構造体は、メンバ「Ｘ」、「Ｙ」および「Ｚ」からなる。図１５（ｂ）に示すように、メンバ「Ｘ」、「Ｙ」および「Ｚ」は、それぞれ、ベクトルのＸ成分、Ｙ成分、及びＺ成分を示す。メンバ「Ｘ」、「Ｙ」及び「Ｚ」の各々は、図１２（ｂ）と同じ３２ビット符号付き固定小数点数で表される。
【０２２６】
［５］Ｄｏｔ構造体
【０２２７】
Ｄｏｔ構造体は、コマンド「Ｄｏｔ」および「ＴＤ」の出力データの形式であり、コマンド「Ｃｃａｌｃ」の入力データの形式である。単位法線ベクトルと光源ベクトルとの内積、単位法線ベクトルと視線ベクトルとの内積の演算結果が、Ｄｏｔ構造体に格納される。
【０２２８】
図１６（ａ）は、Ｄｏｔ構造体の構成を示す図、図１６（ｂ）は、Ｄｏｔ構造体のメンバの説明図である。図１６（ａ）を参照して、Ｄｏｔ構造体は、メンバ「Ｄｖａｌｕｅ」、「Ｓ２Ｂ」および「Ｓ１」からなる。図１６（ｂ）を参照して、メンバ「Ｄｖａｌｕｅ」は、法線ベクトルと光源ベクトルとの内積演算結果の絶対値（０〜１．０）を６ビット符号なし固定小数点数で表し、この値から１ＬＳＢを減算し、５ビット符号なし固定小数点数で表したものである。但し、減算の結果が負である場合には、「０」に飽和される。
【０２２９】
メンバ「Ｓ２Ｂ」は、法線ベクトルと視線ベクトルとの内積の符号の反転値である。メンバ「Ｓ１」は、法線ベクトルと光源ベクトルとの内積の符号である。
【０２３０】
次に、ＧＥ１７で扱われるポリゴンデータについて説明する。ポリゴンを画面に表示するためには、１ポリゴンにつき１つのポリゴン構造体インスタンスが必要とされる。また、テクスチャマッピングモードのポリゴンを表示するためには、テクスチャアトリビュート構造体インスタンスが必要とされる。
【０２３１】
ポリゴン構造体の形式は、テクスチャマッピングモードとグーローシェーディングモードとでは、大きく異なっている。また、それぞれのモードにおいて、ＧＥ１７に対する入力データとＲＰＵ９に対する入力データとでは形式が異なる。但し、いずれの構成においてもポリゴン構造体の大きさは、１２８ビット（１６バイト）に固定される。
【０２３２】
ＧＥ１７への入力形式のポリゴン構造体においては、メンバ「Ｄｅｐｔｈ」の値は、デプス値に加算される符号付きのオフセット値（つまり、デプス初期値）である。テクスチャマッピングモードのポリゴンを浮かび上がらせる等、ポリゴンの描画優先順位を制御したい場合に、オフセット値として「０」以外の値を設定する。
【０２３３】
ＲＰＵ９への入力形式のポリゴン構造体においては、メンバ「Ｄｅｐｔｈ」は、（仮数部８ビット＋指数部４ビット）の浮動小数点数で表されるポリゴンのデプス（描画優先順位）を示す。
【０２３４】
図１７は、テクスチャマッピングモードのポリゴン構造体（ＧＥ入力形式）の構成を示す図である。図１８は、テクスチャマッピングモードのポリゴン構造体（ＧＥ入力形式）のメンバの説明図である。
【０２３５】
図１７を参照して、テクスチャマッピングモードでは、ＧＥ１７への入力形式のポリゴン構造体は、メンバ「Ｔｙｐｅ」、「Ｆａｃｅ」、「Ｖｉａ」、「Ｖｉｂ」、「Ｖｉｃ」、「Ｂｗ」、「Ｌｉｇｈｔ」、「Ｔｓｅｇｍｅｎｔ」、「Ｔａｔｔｒｉｂｕｔｅ」、「Ｍａｐ」、「Ｃｗ」、「Ｄｅｐｔｈ」、「Ｖｉｅｗｐｏｒｔ」及び「Ｆｉｌｔｅｒ」からなる。そして、これらメンバの内容は、図１８に示した通りである。
【０２３６】
図１９は、グーローシェーディングモードのポリゴン構造体（ＧＥ入力形式）の構成を示す図である。図２０は、グーローシェーディングモードのポリゴン構造体（ＧＥ入力形式）のメンバの説明図である。
【０２３７】
図１９を参照して、グーローシェーディングモードでは、ＧＥ１７への入力形式のポリゴン構造体は、メンバ「Ｔｙｐｅ」、「Ｆａｃｅ」、「Ｖｉａ」、「Ｖｉｂ」、「Ｖｉｃ」、「Ａｃ」、「Ｂｃ」、「Ｃｃ」、「Ｄｅｐｔｈ」、「Ｖｉｅｗｐｏｒｔ」及び「Ｎａｌｐｈａ」からなる。そして、これらメンバの内容は、図２０に示した通りである。
【０２３８】
次に、ＧＥ１７の制御のための各コマンドについて詳細に説明する。
【０２３９】
［１］コマンド「ＭａｔｒｉｘＭｕｌｔｉ」
【０２４０】
コマンド「ＭａｔｒｉｘＭｕｌｔｉ」は、４次正方行列同士の行列積を求めるコマンドである。但し、行列は３次元直交座標系ベクトルのアフィン変換を想定したものであり、第４行の行列要素は常に（０，０，０，１）であるとみなされ、第４行の行列要素は入力行列及び出力行列には含まれない。
【０２４１】
このコマンドは、主に複数の座標系変換行列の合成に用いられる。例えば、ローカル座標系からワールド座標系への変換行列と、ワールド座標系からビュー座標系への変換行列と、の行列積を求めることにより、ローカル座標系からビュー座標への変換行列を生成することが可能である。
【０２４２】
このコマンドを１回実行することで、１回の行列積演算が行われる。１回のコマンド実行で複数の行列積演算を行うことはできない。このコマンドで実行される行列演算の式は、次の通りである。
【０２４３】
【数１５】
2007128180.tif 000017
【０２４４】
（数１５）において、配列Ｄは、演算結果の行列要素を格納するＭａｔｒｉｘ３２配列、一方の入力行列の行列要素ＧＲ０〜ＧＲ１１は、それぞれ、レジスタＧＲ０〜ＧＲ１１の値、配列Ｓは、他方の入力行列の行列要素を格納するＭａｔｒｉｘ３２配列である。（数１５）を展開すると次のようになる。
【０２４５】
【数１６】
2007128180.tif 000018
【０２４６】
（数１５）及び（数１６）において、配列Ｓは、レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」が示す値をベースアドレスとして、メインＲＡＭ２５上に配置される。配列Ｓの各要素Ｓ［０］〜Ｓ［１１］は、３２ビット符号付き固定小数点フォーマットである。各要素Ｓ［０］〜Ｓ［１１］は、ワード（４バイト）アラインで配置されている必要がある。ここでは、ＣＰＵ５の演算データのビット数に合わせ、４バイト（３２ビット）のデータをワード、２バイト（８ビット）のデータをハーフワードと呼称する。
【０２４７】
データ（行列要素）ＧＲ０〜ＧＲ１１の値は、それぞれ３２ビット符号付き固定小数点フォーマットである。
【０２４８】
配列Ｄは、レジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｅｒｓｓ」が示す値をベースアドレスとして、メインＲＡＭ２５に格納される。配列Ｄの各要素Ｄ［０］〜Ｄ［１１］は、３２ビット符号付き固定小数点フォーマットである。
【０２４９】
このコマンドを実行する場合には、レジスタ「ＲｅａｐｅａｔＣｏｕｎｔ」を「０」に設定する。レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」に、配列Ｓのベースアドレスを、メインＲＡＭ２５の物理アドレスとして設定する。配列Ｓの各要素はワードアラインで配置されている必要があるので、下位２ビットには「００」を設定する。レジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｅｒｓｓ」には、配列Ｄのベースアドレスを、メインＲＡＭ２５の物理アドレスとして設定する。配列Ｄの各要素はワードアラインで格納されるので、下位２ビットには「００」を設定する。
【０２５０】
なお、レジスタＧＲ１２〜ＧＲ１５は、ワーク領域として使用される。
【０２５１】
［２］コマンド「Ａｆｆｉｎｅ」
【０２５２】
コマンド「Ａｆｆｉｎｅ」は、３次元ベクトルを４次正方行列によってアフィン変換するコマンドである。この変換では、拡大・縮小、回転、及び平行移動を一度に行うことが可能である。このコマンドは、主にローカル座標系の頂点座標配列および法線ベクトル配列を他の直交座標系に変換するために用いられる。このコマンドはＳＩＭＤ型コマンドであり、１つの変換行列に対し複数個のベクトルの変換を連続して行うことが可能である。このコマンドで実行される行列演算の式は、次の通りである。
【０２５３】
【数１７】
2007128180.tif 000019
【０２５４】
配列Ｄは、アフィン変換後のベクトルを格納するＶｅｃｔｏｒ３２構造体配列である。行列要素ＧＲ０Ｌ〜ＧＲ２Ｌ，ＧＲ４Ｌ〜ＧＲ６Ｌ，ＧＲ８Ｌ〜ＧＲ１０Ｌは、それぞれ、レジスタＧＲ０〜ＧＲ２，ＧＲ４〜ＧＲ６，ＧＲ８〜ＧＲ１０の下位１６ビットの値である。行列要素ＧＲ３，ＧＲ７，ＧＲ１１は、それぞれ、レジスタＧＲ３，ＧＲ７，ＧＲ１１の値である。配列Ｓは、アフィン変換前のベクトルを格納するＶｅｃｔｏｒ１０構造体配列である。なお、配列Ｄ及び配列Ｓのピリオド「．」の後の添え字は、構造体のメンバ名を示している（図１３及び図１５参照）。また、ｎ＝０〜Ｎ（配列の要素数）−１である。（数１７）を展開すると次のようになる。
【０２５５】
【数１８】
2007128180.tif 000020
【０２５６】
（数１７）及び（数１８）において、配列Ｓは、レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」が示す値をベースアドレスとして、メインＲＡＭ２５上に配置される。配列Ｓの各要素は、ワードアラインで配置されている必要がある。データ（行列要素）ＧＲ０Ｌ〜ＧＲ２Ｌ，ＧＲ４Ｌ〜ＧＲ６Ｌ，およびＧＲ８Ｌ〜ＧＲ１０Ｌは、レジスタＧＲ０〜ＧＲ２，ＧＲ４〜ＧＲ６，およびＧＲ８〜ＧＲ１０の下位１６ビットに設定された値である。それぞれの値は、１６ビット符号付き固定小数点フォーマットである。但し、後述の型変換ユニット１０８ａ及び１０８ｂによって、（数１７）及び（数１８）が行われる前に、１６ビット符号付き固定小数点フォーマットの値は、３２ビット符号付き固定小数点フォーマットへと変換される。データ（行列要素）ＧＲ３，ＧＲ７，及びＧＲ１１は、レジスタＧＲ３，ＧＲ７，及びＧＲ１１に設定された値である。それぞれの値は、３２ビット符号付き固定小数点フォーマットである。配列Ｄは、レジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｒｅｓｓ」の示す値をベースアドレスとして、メインＲＡＭ２５に格納される。
【０２５７】
このコマンドを実行する場合は、レジスタ「ＲｅｐｅａｔＣｏｕｎｔ」に、配列Ｓの要素数−１（＝Ｎ−１）を設定する。また、レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓｓ」に、配列Ｓのベースアドレスを、メインＲＡＭ２５の物理アドレスとして設定する。配列Ｓの各要素はワードアラインで配置されている必要があるので、下位２ビットには「００」を設定する。また、レジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｒｅｓｓ」には、配列Ｄのベースアドレスを、メインＲＡＭ２５の物理アドレスとして設定する。配列Ｄの各要素はワードアラインで格納されるので、下位２ビットには「００」を設定する。
【０２５８】
なお、レジスタ「ＲｅｐｅａｔＣｏｕｎｔ」、レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」及びレジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｒｅｓｓ」は、コマンドの実行に伴って、その値が変化するレジスタである。
【０２５９】
［３］コマンド「Ｐｐｒｏｊ」
【０２６０】
コマンド「Ｐｐｒｏｊ」は、３次元ベクトルを２次元空間に透視投影するとともに、ビューボリュームクリッピングにおけるニアクリップ及びファークリップの処理を行うコマンドである。このコマンドは、ビュー座標系で与えられた３次元座標を透視座標系に投影するために用いられる。また、このコマンドは、入力ベクトルのＺ成分の値が所定範囲外である場合に、出力するＶｅｃｔｏｒ１６構造体インスタンスのメンバ「Ｃｌｉｐｐｉｎｇ」に「１」をセットする（図１４参照）。このコマンドはＳＩＭＤ型コマンドであり、複数個のベクトルの変換を連続して行うことが可能である。このコマンドにより、以下の演算が実行される。
【０２６１】
【数１９】
2007128180.tif 000021
【０２６２】
（数１９）において、配列Ｄは、変換後のベクトルを格納するＶｅｃｔｏｒ１６構造体配列であり、データｄは、レジスタ「Ｄｉｓｔａｎｃｅ」の値（視点から投影面までの距離）であり、データＺＮは、レジスタ「ＺＮｅａｒ」の値（ニアクリップ値）であり、データＺＦは、レジスタ「ＺＦａｒ」の値（ファークリップ値）であり、配列Ｓは、変換前のベクトルを格納するＶｅｃｔｏｒ３２構造体配列である。なお、配列Ｄ及び配列Ｓのピリオド「．」の後の添え字は、構造体のメンバ名を示している（図１４及び図１５参照）。
【０２６３】
配列Ｓは、レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」が示す値をベースアドレスとして、メインＲＡＭ２５上に配置される。各要素は、ワードアラインで配置されている必要がある。レジスタ「Ｄｉｓｔａｎｃｅ」には、視点から投影面までの距離を設定する。設定値は、１６ビット符号無し整数である。レジスタ「ＲｅｐｅａｔＣｏｕｎｔ」には、配列Ｓの要素数−１（＝Ｎ−１）を設定する。
【０２６４】
配列Ｄは、レジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｒｅｓｓ」が示す値をベースアドレスとして、メインＲＡＭ２５に格納される。入力ベクトルのＺ成分の値がニアクリップ値ＺＮ以下、またはファークリップ値ＺＦ以上の場合、Ｖｅｃｔｏｒ１６構造体インスタンスのメンバ「Ｃｌｉｐｐｉｎｇ」に「１」がセットされる（図１４参照）。
【０２６５】
レジスタ「ＧＥＳｏｕｅｃｅＡｄｄｒｅｓｓ」には、配列Ｓのベースアドレスを、メインＲＡＭの物理アドレスとして設定する。配列Ｓの各要素はワードアラインで配置されている必要があるので、下位２ビットには「００」を設定する。レジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｒｅｓｓ」は、配列Ｄのベースアドレスを、メインＲＡＭ２５の物理アドレスにて設定する。配列Ｄの各要素はワードアラインで格納されるので、下位２ビットには「００」を設定する。
【０２６６】
なお、レジスタＧＲ１５はワーク領域として使用される。レジスタ「ＲｅｐｅａｔＣｏｕｎｔ」、レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」及びレジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｒｅｓｓ」は、コマンドの実行に伴って、その値が変化するレジスタである。
【０２６７】
［４］コマンド「Ｖｉｅｗ」
【０２６８】
コマンド「Ｖｉｅｗ」は、２次元直交座標系のベクトルにオフセットを加える変換を行うとともに、ビューボリュームクリッピングにおけるスクリーン領域のクリッピング処理を行うコマンドである。このコマンドは、透視座標系のＸＹ座標をスクリーン座標系のＸＹ座標に変換するために用いられる。また、このコマンドは、変換結果のＸ成分が０〜２０４７の範囲を超えてしまった場合、あるいはＹ成分が０〜１０２３の範囲を超えてしまった場合に、出力されるＶｅｃｔｏｒ１６構造体インスタンスのメンバ「Ｃｌｉｐｐｉｎｇ」に「１」をセットする（図１４参照）。このコマンドはＳＩＭＤ型コマンドであり、複数個のベクトルの変換を連続して行うことが可能である。このコマンドにより実行される演算は以下の通りである。
【０２６９】
【数２０】
2007128180.tif 000022
【０２７０】
（数２０）において、配列Ｄは、変換後のベクトルを格納するＶｅｃｔｏｒ１６構造体配列であり、配列Ｓは、変換前のベクトルを格納するＶｅｃｔｏｒ１６構造体配列であり、データｏｆｆｘは、レジスタ「ＶｉｅｗｐｏｒｔＯｆｆｓｅｔＸ」の値（Ｘ成分のオフセット）であり、データｏｆｆｙは、レジスタ「ＶｉｅｗｐｏｒｔＯｆｆｓｅｔＹ」の値（Ｙ成分のオフセット）である。なお、配列Ｄ及び配列Ｓのピリオド「．」の後の添え字は、構造体のメンバ名を示している（図１４参照）。
【０２７１】
配列Ｓは、レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」が示す値をベースアドレスとして、メインＲＡＭ２５上に配置される。各要素は、ワードアラインで配置されている必要がある。
【０２７２】
レジスタ「ＶｉｅｗｐｏｒｔＯｆｆｓｅｔＸ」は、Ｘ成分に加算されるオフセット値を設定する。設定値は、１２ビット符号無し固定小数点フォーマットである。レジスタ「ＶｉｅｗｐｏｒｔＯｆｆｓｅｔＹ」は、Ｙ成分に加算されるオフセット値を設定する。設定値は、１２ビット符号無し固定小数点フォーマットである。
【０２７３】
配列Ｄは、レジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｒｅｓｓ」が示す値をベースアドレスとして、メインＲＡＭ２５に格納される。演算の結果、Ｘ成分が０〜２０４７の範囲を超えている場合、またはＹ成分が０〜１０２３の範囲を超えている場合、Ｖｅｃｔｏｒ１６構造体インスタンスのメンバ「Ｃｌｉｐｐｉｎｇ」に「１」がセットされる。
【０２７４】
レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」は、配列Ｓのベースアドレスを、メインＲＡＭ２５の物理アドレスとして設定する。配列Ｓの各要素はワードアラインで配置されている必要があるので、下位２ビットには「００」を設定する。レジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｒｅｓｓ」は、配列Ｄのベースアドレスを、メインＲＡＭ２５の物理アドレスとして設定する。配列の各要素はワードアラインで格納されるので、下位２ビットには「００」が設定される。
【０２７５】
なお、レジスタＧＲ１３〜ＧＲ１５はワーク領域として使用される。レジスタ「ＲｅｐｅａｔＣｏｕｎｔ」、レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」及びレジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｒｅｓｓ」は、コマンドの実行に伴って、その値が変化するレジスタである。
【０２７６】
［５］コマンド「Ｔｒａｎｓ」
【０２７７】
コマンド「Ｔｒａｎｓ」は、３次元ベクトルを３次正方行列で直交変換するコマンドである。この変換では、拡大・縮小および回転を行うことが可能である。このコマンドは、主に頂点法線ベクトル／ポリゴン法線ベクトルをローカル座標系から他の直交座標系に変換するために用いられる。また、ワールド座標系で定義されている光源ベクトルをビュー座標系に変換する際にも用いられる。このコマンドはＳＩＭＤ型コマンドであり、１つの変換行列に対し複数個のベクトルの変換を連続して行うことが可能である。このコマンドにより実行される行列演算は次の通りである。
【０２７８】
【数２１】
2007128180.tif 000023
【０２７９】
（数２１）において、配列Ｄは、変換後のベクトルを格納するＶｅｃｔｏｒ１６構造体配列であり、行列要素ＧＲ０Ｌ〜ＧＲ８Ｌは、レジスタＧＲ０〜ＧＲ８の下位１６ビットである。配列Ｓは、変換前のベクトルを格納するＶｅｃｔｏｒ１０構造体配列である。入力ベクトルのＶｅｃｔｏｒ１０構造体に含まれるメンバ「Ｓｃａｌｅ」は、このコマンドの演算では無視される（図１３参照）。つまり、メンバ「Ｓｃａｌｅ」の値に関わらず、倍率は常に１倍であるとみなされる。なお、配列Ｄ及び配列Ｓのピリオド「．」の後の添え字は、構造体のメンバ名を示している（図１３及び図１４参照）。（数２１）の行列演算を展開すると以下の式で表される。
【０２８０】
【数２２】
2007128180.tif 000024
【０２８１】
（数２１）及び（数２２）において、配列Ｓは、レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」が示す値をベースアドレスとして、メインＲＡＭ２５上に配置される。データ（行列要素）ＧＲ０Ｌ〜ＧＲ８Ｌは、レジスタＧＲ０〜ＧＲ８の下位１６ビットに設定された値である。設定値は、１６ビット符号付き固定小数点数である。レジスタ「ＲｅａｐｅａＣｏｕｎｔ」は、配列Ｓの要素数−１（＝Ｎ−１）を設定する。配列Ｄは、レジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｒｅｓｓ」が示す値をベースアドレスとして、メインＲＡＭ２５に格納される。
【０２８２】
レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」は、配列Ｓのベースアドレスを、メインＲＡＭ２５の物理アドレスにて設定する。配列Ｓの各要素はワードアラインで配置されている必要があるので、下位２ビットには「００」を設定する。レジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｒｅｓｓ」は、配列Ｄのベースアドレスを、メインＲＡＭ２５の物理アドレスにて設定する。配列Ｄの各要素はワードアラインで格納されるので、下位２ビットには「００」を設定する。
【０２８３】
なお、レジスタ「ＲｅｐｅａｔＣｏｕｎｔ」、レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」及びレジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｒｅｓｓ」は、コマンドの実行に伴って、その値が変化するレジスタである。
【０２８４】
［６］コマンド「Ｄｏｔ」
【０２８５】
コマンド「Ｄｏｔ」は、３次元ベクトル同士の内積を求めるコマンドである。このコマンドは、頂点／ポリゴンの拡散光明度を求めるために、法線ベクトルＮと光源ベクトルＬとの内積を求めるために用いられる。また、このコマンドは、ポリゴン（面）の拡散光明度算出のために、ベクトルＮと視線ベクトルＶ（０，０，−１）との内積も同時に算出する。このコマンドはＳＩＭＤ型コマンドであり、１つのベクトルＬ（光源ベクトル）に対し、数個のベクトルＮ（頂点／ポリゴンの法線ベクトル）との内積演算を連続して行うことが可能である。このコマンドにより、以下の演算が行われる。
【０２８６】
【数２３】
2007128180.tif 000025
【０２８７】
（数２３）において、配列Ｄは、ベクトルの内積を格納するＤｏｔ構造体配列であり、データＶｘは、レジスタ「ＬｉｇｈｔＶＸ」の値（ベクトルＬのＸ成分）であり、データＶｙは、レジスタ「ＬｉｇｈｔＶＹ」の値（ベクトルＬのＹ成分）であり、データＶｚは、レジスタ「ＬｉｇｈｔＶＺ」の値（ベクトルＬのＺ成分）であり、配列Ｓは、ベクトルＮを格納するＶｅｃｔｏｒ１６構造体配列である。なお、配列Ｄ及び配列Ｓのピリオド「．」の後の添え字は、構造体のメンバ名を示している（図１４及び図１６参照）。
【０２８８】
配列Ｓは、レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」が示す値をベースアドレスとして、メインＲＡＭ２５上に配置される。各要素は、ハーフワードアラインで配置されている必要がある。レジスタ「ＬｉｇｈｔＶＸ」は、ベクトルＬのＸ成分を設定する。設定値は、１６ビット符号付き固定小数点数である。レジスタ「ＬｉｇｈｔＶＹ」は、ベクトルＬのＹ成分を設定する。設定値は、１６ビット符号付き固定小数点数である。レジスタ「ＬｉｇｈｔＶＺ」は、ベクトルＬのＺ成分を設定する。設定値は、１６ビット符号付き固定小数点数である。配列Ｄは、レジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｒｅｓｓ」が示す値をベースアドレスとして、メインＲＡＭ２５に格納される。
【０２８９】
レジスタ「ＲｅｐｅａｔＣｏｕｎｔ」は、配列Ｓの要素数−１（＝Ｎ−１）を設定する。レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」は、配列Ｓのベースアドレスを、メインＲＡＭ２５の物理アドレスとして設定する。配列Ｓの各要素はハーフワードアラインで配置されている必要があるので、下位１ビットには「０」を設定する。レジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｒｅｓｓ」は、配列Ｄのベースアドレスを、メインＲＡＭ２５の物理アドレスにて設定する。
【０２９０】
なお、レジスタ「ＲｅｐｅａｔＣｏｕｎｔ」、レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」及びレジスタ「ＧＥＤｅｓｔｉｎａｔｉｏｎＡｄｄｒｅｓｓ」は、コマンドの実行に伴って、その値が変化するレジスタである。
【０２９１】
［７］コマンド「Ｂｒｉｇｈｔ−Ｐ」
【０２９２】
コマンド「Ｂｒｉｇｈｔ−Ｐ」は、ポリゴン（面）の拡散光明度と環境光明度とを加算し、ポリゴン（面）明度を算出するコマンドである。ポリゴンが片面ポリゴンの場合、光源ベクトルＬとポリゴン（面）の法線ベクトルＮとの内積が０以上であれば、内積の絶対値をポリゴン（面）の拡散光明度とし、内積が０未満であれば拡散光明度を「０」とする。ポリゴンが両面ポリゴンの場合、光源ベクトルＬと法線ベクトルＮとの内積の符号と、視線ベクトルＶと法線ベクトルＮとの内積の符号と、が一致していれば、内積の絶対値をポリゴン（面）の拡散光明度とし、符号が一致していなければ、拡散光明度を「０」とする。拡散光明度と環境光明度の加算において加算結果が最大値を超えている場合には、結果を最大値に飽和させる。このコマンドはＳＩＭＤ型コマンドであり、複数個のポリゴン（面）の処理を連続して行うことが可能である。このコマンドにより以下の演算が行われる。
【０２９３】
【数２４】
2007128180.tif 000026
【０２９４】
【数２５】
2007128180.tif 000027
【０２９５】
（数２４）及び（数２５）において、配列Ｐは、ポリゴン構造体配列であり（図１７参照）、配列Ｓは、ポリゴン法線ベクトルと光源ベクトルとの内積、およびポリゴン法線ベクトルと視線ベクトルとの内積を格納するＤｏｔ構造体配列である（図１６参照）。データ「ａｍｂｉｅｎｔ」は、レジスタ「Ａｍｂｉｅｎｔ」の値（環境光明度）である。データ「ｄｉｆｆｕｓｅ」は、拡散光明度である。なお、配列Ｓのピリオド「．」の後の添え字は、構造体のメンバ名を示している。
【０２９６】
配列Ｓは、レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」が示す値をベースアドレスとして、メインＲＡＭ２５上に配置される。各要素は、バイトアラインで配置されている必要がある。配列Ｐは、レジスタ「ＧＥＢａｓｅａｄｄｒｅｓｓ」が示す値をベースアドレスとして、メインＲＡＭ２５上に配置される必要がある。配列の各要素は、１６バイトアラインで配置されている必要がある。
【０２９７】
レジスタ「Ａｍｂｉｅｎｔ」は、環境光明度を設定する。設定値は、５ビット符号無し固定小数点フォーマットである。レジスタ「ＲｅｐｅａｔＣｏｕｎｔ」は、配列Ｐの要素数−１（＝Ｎ−１）を設定する。レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」は、配列Ｓのベースアドレスを、メインＲＡＭ２５の物理アドレスにて設定する。配列の各要素はハーフワードアラインで配置されている必要があるので、下位１ビットには「０」が設定される。レジスタ「ＧＥＢａｓｅａｄｄｒｅｓｓ」は、配列Ｐのベースアドレスを、メインＲＡＭ２５の物理アドレスにて設定する。配列Ｐの各要素は、１６バイトアラインで配置されている必要があるので、下位４ビットにはレジスタの実体はない。
【０２９８】
Ｎ個のインスタンスを持つポリゴン構造体配列Ｐのメンバ「Ｌｉｇｈｔ」（Ｐ［ｎ］．Ｌｉｇｈｔ（ｎ＝０〜Ｎ−１））の値が、このコマンドを実行することにより書き換えられる。
【０２９９】
［８］コマンド「Ｃｃａｌｃ」
【０３００】
コマンド「Ｃｃａｌｃ」は、頂点の拡散光明度と環境光明度とを加算することにより頂点明度を算出し、算出された頂点明度と本来の頂点色とにより、ライティング後の頂点色を算出するコマンドである。このコマンドは、グーローシェーディングモードのポリゴンに対してのみ用いられ、ポリゴン構造体インスタンスのメンバ「Ａｃ」、「Ｂｃ」および「Ｃｃ」にライティング後の頂点色が設定される（図１９参照）。このコマンドにより次の演算が行われる。
【０３０１】
【数２６】
2007128180.tif 000028
【０３０２】
【数２７】
2007128180.tif 000029
【０３０３】
（数２６）及び（数２７）において、配列Ｐは、ポリゴン構造体配列であり（図１９参照）、配列Ｓは、頂点法線ベクトルと光源ベクトルとの内積、および、頂点法線ベクトルと視線ベクトルとの内積を格納するＤｏｔ構造体配列である（図１６参照）。データ「ａｍｂｉｅｎｔ」は、レジスタ「Ａｍｂｉｅｎｔ」の値（環境光明度）である。
【０３０４】
配列Ｓ［ｍ］（ｍ＝０〜Ｍ−１）は、Ｍ組の、頂点法線ベクトルと光源ベクトルとの内積および頂点法線ベクトルと視線ベクトルとの内積を格納するＤｏｔ構造体配列である。この配列Ｓは、レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」が示す値をベースアドレスとして、メインＲＡＭ２５上に配置される。配列Ｐ［ｎ］（ｎ＝０〜Ｎ−１）は、Ｎ個のインスタンスを持つポリゴン構造体配列である。この配列Ｐは、レジスタ「ＧＥＢａｓｅａｄｄｒｅｓｓ」が示す値をベースアドレスとして、メインＲＡＭ２５上に配置される。配列Ｐの各要素は、１６バイトアラインで配置されている必要がある。
【０３０５】
レジスタ「Ａｍｂｉｅｎｔ」は、環境光明度を設定する。設定値は、５ビット符号無し固定小数点フォーマットである。レジスタ「ＲｅｐｅａｔＣｏｕｎｔ」は、配列Ｐの要素数−１（＝Ｎ−１）を設定する。レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」は、配列Ｓのベースアドレスを、メインＲＡＭ２５の物理アドレスにて設定する。配列の各要素はハーフワードアラインで配置されている必要があるので、下位１ビットには「０」を設定する。レジスタ「ＧＥＢａｓｅａｄｄｒｅｓｓ」は、配列Ｐのベースアドレスを、メインＲＡＭ２５の物理アドレスにて設定する。配列の各要素は、１６バイトアラインで配置されている必要があるので、下位４ビットにはレジスタの実体がない。
【０３０６】
なお、配列Ｐ及び配列Ｓのピリオド「．」の後の添え字は、構造体のメンバ名を示している（図１６及び図１９参照）。また、配列Ｐ［ｎ］．Ａｃ，Ｐ［ｎ］．ＢｃおよびＰ［ｎ］．Ｃｃに付された添え字Ｒ，Ｇ及びＢは、それぞれ、Ｒ値（色の赤成分）、Ｇ値（色の緑成分）及びＢ値（色の青成分）を示す。
【０３０７】
［９］コマンド「Ｃｕｌｌ」
【０３０８】
コマンド「Ｃｕｌｌ」は、ポリゴンの頂点座標の設定と、裏面カリングおよびビューボリュームクリッピングの処理を行うコマンドである。このコマンドは、先ず、スクリーン座標系の頂点座標を格納するＶｅｃｔｏｒ１６構造体配列を参照して、ポリゴン構造体インスタンスに格納する各頂点座標を求める。求められた頂点座標を用いてポリゴンの表裏判定を行い、ポリゴンが片面ポリゴンでかつ裏面表示の場合、ポリゴンの全頂点座標に最大値を設定して画面に表示されないようにするか、あるいは当該ポリゴン構造体インスタンスをポリゴン構造体配列から取り除く（裏面カリング）。
【０３０９】
また、各頂点座標を示すＶｅｃｔｏｒ１６構造体インスタンスの内のいずれか１つでもメンバ「Ｃｌｉｐｐｉｎｇ」の値が「１」である場合、上記の場合と同様にポリゴンの全頂点座標に最大値を設定して画面に表示されないようにするか、あるいは当該ポリゴン構造体インスタンスをポリゴン構造体配列から取り除く（ビューボリュームクリッピング）。このコマンドは次の演算を実行する。
【０３１０】
【数２８】
2007128180.tif 000030
【０３１１】
【数２９】
2007128180.tif 000031
【０３１２】
【数３０】
2007128180.tif 000032
【０３１３】
【数３１】
2007128180.tif 000033
【０３１４】
（数２８）〜（数３１）において、配列Ｐは、ポリゴン構造体配列、配列Ｓは、スクリーン座標系の頂点座標を格納するＶｅｃｔｏｒ１６構造体配列である。
【０３１５】
配列Ｓ［ｍ］（ｍ＝０〜Ｍ−１）は、Ｍ組のスクリーン座標系の頂点座標を格納するＶｅｃｔｏｒ１６構造体配列である。この配列Ｓは、レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」が示す値をベースアドレスとして、メインＲＡＭ２５上に配置される。配列Ｓの各要素は、ワードアラインで配置されている必要がある。配列Ｐ［ｎ］（ｎ＝０〜Ｎ−１）は、Ｎ個のインスタンスを持つポリゴン構造体配列である。この配列Ｐは、レジスタ「ＧＥＢａｓｅａｄｄｒｅｓｓ」が示す値をベースアドレスとして、メインＲＡＭ２５上に配置される。配列Ｐの各要素は、１６バイトアラインで配置されている必要がある。なお、配列Ｐ及び配列Ｓのピリオド「．」の後の添え字は、構造体のメンバ名を示している（図１４、図１７、及び図１９参照）。
【０３１６】
レジスタ「ＲｅｐｅａｔＣｏｕｎｔ」は、配列Ｐの要素数−１（＝Ｎ−１）を設定する。レジスタ「ＧＥＳｏｕｒｃｅＡｄｄｒｅｓｓ」は、配列Ｓのベースアドレスを、メインＲＡＭ２５の物理アドレスにて設定する。配列Ｐの各要素はハーフワードアラインで配置されている必要があるので、下位１ビットには「０」を設定する。レジスタ「ＧＥＢａｓｅａｄｄｒｅｓｓ」は、配列Ｐのベースアドレスを、メインＲＡＭ２５の物理アドレスにて設定する。配列Ｓの各要素は、１６バイトアラインで配置されている必要があるので、下位４ビットにはレジスタの実体がない。
【０３１７】
各ポリゴン構造体インスタンスのメンバ「Ｖｉａ」、「Ｖｉｂ」、「Ｖｉｃ」及び「Ｆａｃｅ」が、このコマンドを実行することにより、メンバ「Ａｘ」、「Ａｙ」、「Ｂｘ」、「Ｂｙ」、「Ｃｘ」及び「Ｃｙ」へと書き換えられる。コマンド発行時のレジスタ「ＧＥＣｏｍｍａｎｄ」の「ＩｎｖａｌｉｄＳｔｒｕｃｔｕｒｅＲｅｍｏｖｅ」の値が「１」の場合、裏面カリング／ビューボリュームクリッピングで非表示と判定されたポリゴン構造体インスタンスを配列から削除し、以降のポリゴン構造体インスタンスを前詰めで再配置する。レジスタ「ＰｏｌｙｇｏｎＣｏｕｎｔ」は、裏面カリング／ビューボリュームクリッピングの結果、ポリゴン構造体配列から削除されたポリゴン構造体インスタンスを除いた総インスタンス数、すなわち有効なポリゴン数を示す。
【０３１８】
［１０］コマンド「Ｓｑｒｔ」
【０３１９】
コマンド「Ｓｑｒｔ」は、平方根を算出するコマンドである。このコマンドは、単位ベクトルを求める際にベクトルの大きさ（スカラー量）を算出する等の用途に用いられる。このコマンドにより次の演算が行われる。
【０３２０】
【数３２】
2007128180.tif 000034
【０３２１】
（数３２）において、データＧＲ０は、レジスタＧＲ０の値である。レジスタＧＲ０は、入力値を設定する。値は３２ビット符号無し固定小数点数で表される。レジスタＧＲ０［３１：１６］は整数フィールド、レジスタＧＲ０［１５：０］は小数フィールドとして扱われる。３２ビット符号付き固定小数点数も、値が負でない限りそのまま入力データとして用いることできる。
【０３２２】
データ（算出された平方根の値）ＧＲ１Ｌは、レジスタＧＲ１の下位１６ビットに格納される。値は１６ビット符号無し固定小数点数で表される。レジスタＧＲ０［１５：８］は整数フィールド、レジスタＧＲ０［７：０］は小数フィールドを格納する。
【０３２３】
［１１］コマンド「ＡＰＶ」
【０３２４】
コマンド「ＡＰＶ」は、コマンド「Ａｆｆｉｎｅ」（アフィン変換）、コマンド「ＰＰｐｒｏｊ」（透視投影変換）およびコマンド「Ｖｉｅｗ」（ビューポート変換）を１コマンドで実行するコマンドである。但し、演算途中のデータ、すなわちコマンド「Ａｆｆｉｎｅ」およびコマンド「ＰＰｐｒｏｊ」の出力データは、メインＲＡＭ２５に出力されない。
【０３２５】
コマンド「ＡＰＶ」による演算は、コマンド「Ａｆｆｉｎｅ」、コマンド「ＰＰｐｒｏｊ」およびコマンド「Ｖｉｅｗ」と同様なので説明を省略する。また、入力データについては、コマンド「Ａｆｆｉｎｅ」の場合と同様であり、出力データについては、コマンド「Ｖｉｅｗ」の場合と同様であるので、説明を省略する。
【０３２６】
［１２］コマンド「ＣＷＤ」
【０３２７】
コマンド「ＣＷＤ」は、コマンド「Ｃｕｌｌ」（頂点座標設定およびカリング）の処理に引き続き、パースペクティブコレクト用パラメータの算出、およびデプス算出の処理を行うコマンドである。このコマンドにより、コマンド「Ｃｕｌｌ」の処理に続いて、次の演算が行われる。
【０３２８】
【数３３】
2007128180.tif 000035
【０３２９】
【数３４】
2007128180.tif 000036
【０３３０】
（数３４）において、データＭは、１２ビット浮動小数点数「ｄｅｐｔｈ」の仮数フィールド（８ビット）であり、データＥは、１２ビット浮動小数点数「ｄｅｐｔｈ」の指数フィールド（４ビット）であり、データＤＥＢは、レジスタ「ＤｅｐｔｈＢｉａｓ」の値（０〜７）である。仮数フィールドの丸めモードは、切り捨てである。ここで得られた１２ビット値「ｄｅｐｔｈ」を配列Ｐ［ｎ］．Ｄｅｐｔｈに格納されているデプス初期値と加算し、配列Ｐ［ｎ］．Ｄｅｐｔｈに書き戻す。つまり、以下のようになる。
【０３３１】
【数３５】
2007128180.tif 000037
【０３３２】
（数３５）において、配列Ｐ［ｎ］．Ｄｅｐｔｈは、デプス初期値、配列Ｐ［ｎ］．Ｄｅｐｔｈ´は、演算後のデプス値である。
【０３３３】
このコマンドにおける入力データは、コマンド「Ｃｕｌｌ」の入力データに加え、レジスタ「ＤｅｐｔｈＢｉａｓ」の値となる。レジスタ「ＤｅｐｔｈＢｉａｓ」の値は、デプス算出の浮動小数点形式変換における、指数フィールドのバイアス値（ゲタ）である。
【０３３４】
このコマンドは、ポリゴン構造体配列のメンバ「Ｐ［ｎ］．Ｗｂ」及び「Ｐ［ｎ］．Ｗｃ」（ｎ＝０〜Ｎ−１）の値も書き換える。これらは、Ｎ個のポリゴン構造体インスタンスを持つポリゴン構造体配列Ｐのパースペクティブコレクト用パラメータである。テクスチャマッピングモードのポリゴン構造体インスタンスに対してのみ、これらの値が書き込まれる。
【０３３５】
なお、配列Ｐ及び配列Ｓのピリオド「．」の後の添え字は、構造体のメンバ名を示している。
【０３３６】
［１３］コマンド「ＴＤＢＰ」
【０３３７】
コマンド「ＴＤＢＰ」は、テクスチャマッピングモードのポリゴンに対するライティング処理を一括して行うためのコマンドである。コマンド「Ｔｒａｎｓ」（ベクトル直交変換）、コマンド「Ｄｏｔ」（ベクトル内積）およびコマンド「Ｂｒｉｇｈｔ−Ｐ」（ポリゴン明度算出）を１コマンドで実行する。但し、演算途中のデータ、すなわちコマンド「Ｔｒａｎｓ」および「Ｄｏｔ」の出力データは、メインＲＡＭ２５に出力されない。
【０３３８】
コマンド「ＴＤＢＰ」による演算は、コマンド「Ｔｒａｎｓ」、コマンド「Ｄｏｔ」およびコマンド「Ｂｒｉｇｈｔ−Ｐ」と同様なので説明を省略する。また、入力データについては、コマンド「Ｔｒａｎｓ」の場合と同様であり、出力データについては、コマンド「Ｂｒｉｇｈｔ−Ｐ」の場合と同様であるので、説明を省略する。
【０３３９】
［１４］コマンド「ＴＤ」
【０３４０】
コマンド「ＴＤ」は、グーローシェーディングモードのポリゴンに対するライティングの前処理を一括して行うためのコマンドである。コマンド「Ｔｒａｎｓ」（ベクトル直交変換）およびコマンド「Ｄｏｔ」（ベクトル内積）を１コマンドで実行する。ただし、演算途中のデータ、すなわちコマンド「Ｔｒａｎｓ」の出力データは、メインＲＡＭ２５に出力されない。このコマンドの実行後、コマンド「Ｃｃａｌｃ」を実行することにより、ライティング処理後のポリゴン頂点色が算出される。
【０３４１】
コマンド「ＴＤ」による演算は、コマンド「Ｔｒａｎｓ」およびコマンド「Ｄｏｔ」と同様なので説明を省略する。また、入力データについては、コマンド「Ｔｒａｎｓ」の場合と同様であり、出力データについては、コマンド「Ｄｏｔ」の場合と同様であるので、説明を省略する。
【０３４２】
図２１は、図１０の実行ユニット１００の内部構成を示すブロック図である。なお、図中の各構成の名称の後に付した（）内の数字は、その構成のビット数を示す。
【０３４３】
図２１を参照して、実行ユニット１００は、除算ユニット１０２（３２ビット／３２ビット）、積和演算ユニット１０４（１６ビット×１６ビット＋６５ビット）、追加演算ユニット１０６、型変換ユニット１０８ａ，１０８ｂ、マルチプレクサ（ＭＵＸ）１１０ａ，１１０ｂ、マルチプレクサ（ＭＵＸ）１１２ａ，１１２ｂ、Ｖｅｃｔｏｒ１０形式変換ユニット１１４、およびバス１５０ａ，１５０ｂ，１５０ｃを含む。
【０３４４】
除算ユニット１０２は、被除数レジスタ１１６、除数レジスタ１１８、３２ビット除算器１２０、及び商レジスタ１２２を含む。積和演算ユニット１０４は、被乗数調整ユニット１２４、被乗数レジスタ１２６、乗数調整ユニット１２８、乗数レジスタ１３０、１６ビット乗算器１３２、積調整ユニット１３４、積レジスタ１３６、ビット拡張付シフタ１３８、レジスタ１４０、ビット拡張ユニット１４２、マルチプレクサ（ＭＵＸ）１４４、６５ビット加算器１４６、及びＳＵＭレジスタ１４８を含む。
【０３４５】
各演算ユニット１０２，１０４及び１０６と入出力データ間は、バス１５０ａ、バス１５０ｂ、及びバス１５０ｃで接続される。バス１５０ａ、バス１５０ｂ、及びバス１５０ｃの各々は、３２ビットのデータを転送する。ここで、入出力データとは、Ｉ／Ｏレジスタセット３００からの入力データＲＧＩ、Ｉ／Ｏレジスタセット３００への出力データＲＧＯ、メインＲＡＭ２５からのリードデータＭＲＥ、及びメインＲＡＭ２５へのライトデータＭＷＲを指す。
【０３４６】
バス１５０ａおよびバス１５０ｂに送出されるデータとしては、Ｉ／Ｏレジスタセット３００に格納されているデータＲＧＩ、メインＲＡＭ２５からのリードデータＭＲＥ、メインＲＡＭ２５からのリードデータＭＲＥがＶｅｃｔｏｒ１０形式変換ユニット１１４で変換されたデータＶＣＴ、およびバス１５０ｃから出力されたデータＢＵＣの４通りがある。この点を詳しく説明する。
【０３４７】
ＭＵＸ１１２ａは、Ｉ／Ｏレジスタセット３００からのデータＲＥＩ、メインＲＡＭ２５からのデータＭＲＥ、及びＶｅｃｔｏｒ１０形式変換ユニット１１４からのデータＶＣＴを受け取り、制御ユニット２００からの制御信号に従って、そのうちの１つを選択してＭＵＸ１１０ａに出力する。
【０３４８】
ＭＵＸ１１０ａは、ＭＵＸ１１２ａからの選択データ及びバス１５０ｃからのデータＢＵＣを受け取り、制御ユニット２００からの制御信号に従って、そのうちの１つを選択して型変換ユニット１０８ａに出力する。型変換ユニット１０８ａは、制御ユニット２００からの制御信号に従って、ＭＵＸ１１０ａから受け取った選択データに対して、後で詳細に説明する型変換を施し、結果データをバス１５０ａに送出する。
【０３４９】
一方、ＭＵＸ１１２ｂは、Ｉ／Ｏレジスタセット３００からのデータＲＥＩ、メインＲＡＭ２５からのデータＭＲＥ、及びＶｅｃｔｏｒ１０形式変換ユニット１１４からのデータＶＣＴを受け取り、制御ユニット２００からの制御信号に従って、そのうちの１つを選択してＭＵＸ１１０ｂに出力する。
【０３５０】
ＭＵＸ１１０ｂは、ＭＵＸ１１２ｂからの選択データ及びバス１５０ｃからのデータＢＵＣを受け取り、制御ユニット２００からの制御信号に従って、そのうちの１つを選択して型変換ユニット１０８ｂに出力する。型変換ユニット１０８ｂは、制御ユニット２００からの制御信号に従って、ＭＵＸ１１０ｂから受け取った選択データに対して、後で詳細に説明する型変換を施し、結果データをバス１５０ｂに送出する。
【０３５１】
Ｖｅｃｔｏｒ１０形式変換ユニット１１４の詳細を説明する。Ｖｅｃｔｏｒ１０形式変換ユニット１１４は、メインＲＡＭ２５からのリードデータＭＲＥとして入力される３２ビットのＶｅｃｔｏｒ１０形式のデータ（図１３参照）からメンバＸ、Ｙ、及びＺを抽出し、制御ユニット２００からの制御信号に従って、Ｘ、Ｙ、及びＺのメンバ単位で、データＶＣＴとして、ＭＵＸ１１２ａ及び１１２ｂに出力する。ただし、Ｖｅｃｔｏｒ１０形式変換ユニット１１４は、各メンバＸ，Ｙ及びＺを出力する前に、メンバＳｃａｌｅの値に応じて、各メンバＸ，Ｙ及びＺに対して１倍から８倍までの拡大変換を施す。従って、出力データＶＣＴは、拡大変換後のデータである。
【０３５２】
型変換ユニット１０８ａの詳細を説明する。なお、型変換ユニット１０８ｂは、型変換ユニット１０８ａと同一の型変換を実行するので説明を省略する。
【０３５３】
型変換ユニット１０８ａは、制御ユニット２００からの制御信号に応じて、次に示す型変換［１］〜［１３］のうちのいずれかを行う。型変換［１］〜［１３］の説明において、“ＩＮ”は入力値、“ＯＵＴ”は出力値、記号“＝”は代入、“ｎ（）”はｎビット分の（）、記号“｛，｝”はビットの連接を表す。例えば、「４（０ｂ０）」は、４ビット分の「０」、つまり、「０ｂ００００」のことである。
【０３５４】
型変換［１］は、下位８ビットから３２ビットへのゼロ拡張であり、次式で示される。
ＯＵＴ［３１：０］＝｛２４（０ｂ０），ＩＮ［７：０］｝
【０３５５】
型変換［２］は、下位８ビットから３２ビットへの符号拡張であり、次式で示される。
ＯＵＴ［３１：０］＝｛２４（ＩＮ［７］），ＩＮ［７：０］｝
【０３５６】
型変換［３］は、下位１６ビットから３２ビットへのゼロ拡張であり、次式で示される。
ＯＵＴ［３１：０］＝｛１６（０ｂ０），ＩＮ［１５：０］｝
【０３５７】
型変換［４］は、下位１６ビットから３２ビットへの符号拡張であり、次式で示される。
ＯＵＴ［３１：０］＝｛１６（ＩＮ［１５］），ＩＮ［１５：０］｝
【０３５８】
型変換［５］は、下位１６ビットのＬＳＢ側に１ビットの「０」を連接し、３２ビットへゼロ拡張するものであり、次式で示される。
ＯＵＴ［３１：０］＝｛１５（０ｂ０），ＩＮ［１５：０］，０ｂ０｝
【０３５９】
型変換［６］は、下位１６ビットのＬＳＢ側に１ビットの「０」を連接し、３２ビットへ符号拡張するものであり、次式で示される。
ＯＵＴ［３１：０］＝｛１５（ＩＮ［１５］），ＩＮ［１５：０］，０ｂ０｝
【０３６０】
型変換［７］は、下位１６ビットに３２ビット中のＭＳＢ（符号ビット）を１６ビット分追加するものであり、次式で示される。
ＯＵＴ［３１：０］＝｛１６（ＩＮ［３１］），ＩＮ［１５：０］｝
【０３６１】
型変換［８］は、上位１６ビットのＬＳＢ側に１ビットの「０」を連接し、３２ビットへゼロ拡張するものであり、次式で示される。
ＯＵＴ［３１：０］＝｛１５（０ｂ０），ＩＮ［３１：１６］，０ｂ０｝
【０３６２】
型変換［９］は、上位１６ビットのＬＳＢ側に１ビットの「０」を連接し、３２ビットへ符号拡張するものであり、次式で示される。
ＯＵＴ［３１：０］＝｛１５（ＩＮ［３１］），ＩＮ［３１：１６］，０ｂ０｝
【０３６３】
型変換［１０］は、上位１６ビットから３２ビットへのゼロ拡張であり、次式で示される。
ＯＵＴ［３１：０］＝｛１６（０ｂ０），ＩＮ［３１：１６］｝
【０３６４】
型変換［１１］は、上位１６ビットから３２ビットへの符号拡張であり、次式で示される。
ＯＵＴ［３１：０］＝｛１６（ＩＮ［３１］），ＩＮ［３１：１６］｝
【０３６５】
型変換［１２］は、上位１６ビットのＬＳＢ側に１６ビットの「０」を連接するものであり、次式で示される。
ＯＵＴ［３１：０］＝｛ＩＮ［３１：１６］），１６（０ｂ０）｝
【０３６６】
型変換［１３］は、型変換を行わないものであり（３２ビットのまま）、次式で示される。
ＯＵＴ［３１：０］＝ＩＮ［３１：０］
【０３６７】
さて、除算ユニット１０２は、３２ビットの被除数を３２ビットの除数で除し、３２ビットの商を出力する。具体的な構成は次の通りである。
【０３６８】
被除数レジスタ１１６は、バス１５０ａに送出されている３２ビットのデータを取り込み、除算の入力値である被除数として保持する。除数レジスタ１１８は、バス１５０ｂに送出されている３２ビットのデータを取り込み、除算の入力値である除数として保持する。３２ビット除算器１２０は、被除数レジスタ１１６に保持されている被除数を、除数レジスタ１１８に保持されている除数で除し、３２ビットの商を出力する。ただし、剰余は出力されない。本実施の形態では、除算器１２０は、常に符号無し除算を行うものであるが、符号付き除算を行うようにすることもできる。商レジスタ１２２は、３２ビット除算器１２０が出力する商を取り込み、追加演算ユニット１０６に出力する。被除数レジスタ１１６が保持する値もまた、追加演算ユニット１０６に出力される。
【０３６９】
積和演算ユニット１０４の具体的な構成は次の通りである。被乗数調整ユニット１２４は、制御ユニット２００からの制御信号及びバス１５０ａから受け取った被乗数の符号に応じて、被乗数の論理反転（ビット反転）、算術反転、及び／又はルックアヘッドキャリーの加算といった処理を行う。被乗数レジスタ１２６は、被乗数調整ユニット１２４から出力された被乗数（１６ビット）を保持する。
【０３７０】
ここで、算術反転とは、２の補数を求めることにより、入力値の符号を反転した値を算出することを指す。
【０３７１】
乗数調整ユニット１２８は、制御ユニット２００からの制御信号及びバス１５０ｂから受け取った乗数の符号に応じて、乗数の論理反転（ビット反転）、算術反転、及び／又はルックアヘッドキャリーの加算といった処理を行う。乗数レジスタ１３０は、乗数調整ユニット１２８から出力された乗数（１６ビット）を保持する。
【０３７２】
１６ビット乗算器１３２は、被乗数レジスタ１２６に保持されている１６ビットの被乗数と、乗数レジスタ１３０に保持されている１６ビットの乗数とを掛け合わせ、３２ビットの積を出力する。乗算器１３２は、原則として、符合無し乗算のみを行う。ただし、乗算器１３２は、被乗数調整ユニット１２４、乗数調整ユニット１２８、及び積調整ユニット１３４による処理を介することで、乗数及び被乗数の一方または双方が符号付きの値であっても、乗算を行うことができる。
【０３７３】
積調整ユニット１３４は、乗数及び被乗数の符号に応じて、乗算器１３２が出力した積の算術反転を行う。積レジスタ１３６は、積調整ユニット１３４から出力された３３ビットの積を保持する。
【０３７４】
ビット拡張付シフタ１３８は、制御ユニット２００からの制御信号に応じて、次の変換［１］〜［５］のうちのいずれかを行う。変換［１］〜［５］において、“ＩＮ”は入力値、“ＯＵＴ”は出力値、記号“＝”は代入、“ｎ（）”はｎビット分の（）、記号“｛，｝”はビットの連接を表す。
【０３７５】
変換［１］は、ＬＳＢ側に１６ビットの「０」を連接し、６５ビットへ符号拡張するものであり、次式により表される。
ＯＵＴ［６４：０］＝｛１６（ＩＮ［３２］），ＩＮ［３２：０］，１６（０ｂ０）｝
【０３７６】
変換［２］は、ＬＳＢ側に３２ビットの「０」を連接するものであり、次式により表される。
ＯＵＴ［６４：０］＝｛ＩＮ［３２：０］，３２（０ｂ０）｝
【０３７７】
変換［３］は、３２ビット中の上位３１ビットを取り出し、６５ビットへ符号拡張するものであり、次式により表される。
ＯＵＴ［６４：０］＝｛３３（ＩＮ［３２］），ＩＮ［３２：１］）｝
【０３７８】
変換［４］は、３２ビット中の下位３１ビットを取り出し、６５ビットへゼロ拡張するものであり、次式により表される。
ＯＵＴ［６４：０］＝｛３４（０ｂ０），ＩＮ［３０：０］｝
【０３７９】
変換［５］は、６５ビットへ符号拡張するものであり、次式により表される。
ＯＵＴ［６４：０］＝｛３２（ＩＮ［３２］），ＩＮ［３２：０］｝
【０３８０】
さて、一方、レジスタ１４０は、バス１５０ｂに送出されている３２ビットのデータを保持する。ビット拡張ユニット１４２は、制御ユニット２００からの制御信号に応じて、次の変換［１］〜［３］のうちのいずれかを行う。変換［１］〜［３］において、“ＩＮ”は入力値、“ＯＵＴ”は出力値、記号“＝”は代入、“ｎ（）”はｎビット分の（）、記号“｛，｝”はビットの連接を表す。
【０３８１】
変換［１］は、６５ビットへ符号拡張するものであり、次式により表される。
ＯＵＴ［６４：０］＝｛３３（ＩＮ［３１］），ＩＮ［３１：０］｝
【０３８２】
変換［２］は、３２ビット中の下位３１ビットを取り出し、６５ビットへ符号拡張するものであり、次式により表される。
ＯＵＴ［６４：０］＝｛３４（０ｂ０），ＩＮ［３０：０］｝
【０３８３】
変換［３］は、６５ビットへゼロ拡張するものであり、次式により表される。
ＯＵＴ［６４：０］＝｛３３（０ｂ０），ＩＮ［３１：０］｝
【０３８４】
ＭＵＸ１４４は、制御ユニット２００からの制御信号に応じて、ビット拡張ユニット１４２から出力される６５ビットのデータ、あるいは、ＳＵＭレジスタ１４８に保持されている６５ビットのデータのいずれかを選択し、加算器１４６に出力する。
【０３８５】
６５ビット加算器１４６は、ビット拡張付シフタ１３８から出力される６５ビットのデータと、ＭＵＸ１４４から出力される６５ビットのデータとを加算し、６５ビットの和を出力する。ＳＵＭレジスタ１４８は、６５ビット加算器１４６から出力される６５ビットの和を保持する。
【０３８６】
以上のように、積和演算ユニット１０４は、大きく分けて、１６ビットの被乗数と１６ビットの乗数との乗算から３２ビットの積を得る乗算器１３２と、６５ビットのデータ同士の和を得る加算器１４６とから成る。この構成を用い、３２ビット×３２ビットの乗算を、４回の１６ビット×１６ビットの乗算に分解して実行することが可能である。
【０３８７】
追加演算ユニット１０６は、各コマンドに応じて、商レジスタ１２２に保持されているデータ、ＳＵＭレジスタ１４８に保持されているデータ、Ｉ／Ｏレジスタセット３００に格納されているデータＲＧＩ、メインＲＡＭ２５からのリードデータＭＲＥ、及び被除数レジスタ１１６からのデータを入力値として、以下の追加演算を行う。下記において、“ＳＵＭ”はＳＵＭレジスタ１４８の値を示し、記号“｛，｝”はビットの連接、記号“＝”は代入、記号“＝＝”は等号、記号“＾”は排他的論理和を表す。
【０３８８】
追加演算ユニット１０６は、コマンド「ＭａｔｒｉｘＭｕｌｔｉ」に対しては、出力値＝ＳＵＭ［４７：１６］とする。但し、“ＳＵＭ”のビット４８以上にビット４７（符号ビット）の値と異なる値が含まれている場合は符号付き飽和演算を行う。
【０３８９】
追加演算ユニット１０６は、コマンド「Ａｆｆｉｎｅ」及びコマンド「Ｔｒａｎｓ」に対しては、出力値＝ＳＵＭ［３１：０］とする。但し、“ＳＵＭ”のビット３２以上にビット３１（符号ビット）の値と異なる値が含まれている場合は符号付き飽和演算を行う。
【０３９０】
追加演算ユニット１０６は、コマンド「Ｐｐｒｏｊ」に対しては、出力値＝ＳＵＭ［４６：３１］とする。但し、“ＳＵＭ”のビット４７以上にビット４６（符号ビット）の値と異なる値が含まれている場合は符号付き飽和演算を行う。また、出力値がＩ／Ｏレジスタセット３００のレジスタ「ＺＮｅａｒ」の値より小さい、あるいはレジスタ「ＺＦａｒ」の値より大きい場合には、クリッピングフラグをセットする。
【０３９１】
追加演算ユニット１０６は、コマンド「Ｖｉｅｗ」に対しては、出力値＝ＳＵＭ［１５：０］＋（レジスタ「ＶｉｅｗｐｏｒｔＯｆｆｓｅｔＸ」の値又はレジスタ「ＶｉｅｗｐｏｒｔＯｆｆｓｅｔＹ」の値）とする。但し、出力値が既定の最大値（Ｘ成分は「２０４７」、Ｙ成分は「１０２３」）を超えている場合には最大値に飽和させるとともに、クリッピングフラグをセットする。
【０３９２】
追加演算ユニット１０６は、コマンド「Ｄｏｔ」に対しては、出力値＝｛ＳＵＭ［３３］（メンバＳ１），Ｉ／Ｏレジスタセット３００のレジスタＧＲ１２（法線ベクトルのＺ成分を格納）のビット１５（メンバＳ２Ｂ），１ビットの「０」，ＳＵＭレジスタ１４８の絶対値のビット［２９：２５］（メンバＤｖａｌｕｅ）｝（＝計８ビットのＤｏｔ構造体）とする。
【０３９３】
追加演算ユニット１０６は、コマンド「Ｂｒｉｇｈｔ−Ｐ」に対しては、次の処理を行う。ここで、（条件１）を（両面ポリゴン（Ｆａｃｅ＝＝１）かつ（Ｓ１＾Ｓ２Ｂ＝＝１））または（片面ポリゴン（Ｆａｃｅ＝＝０）かつ（Ｓ１＝＝０））とする。（条件１）が偽の場合は、拡散光成分＝ＳＵＭ［４：０］とし、（条件１）が真の場合は、拡散光成分＝０として、次に従う。つまり、追加演算ユニット１０６は、出力値（明度）＝拡散光成分＋環境光成分（レジスタ「Ａｍｂｉｅｎｔ」）＋１とする。但し、上記の加算結果が最大値「０ｂ１１１１１」を超える場合は最大値に飽和させる。
【０３９４】
追加演算ユニット１０６は、コマンド「Ｃｃａｌｃ」に対しては、コマンド「Ｂｒｉｇｈｔ−Ｐ」と同じ処理で明度を算出する。つまり、出力値＝｛「Ｂ」×明度，「Ｇ」×明度，「Ｒ」×明度｝とする。「Ｒ」，「Ｇ」及び「Ｂ」はそれぞれリードデータのビット［４：０］，［９：５］及び［１４：１０］である。
【０３９５】
追加演算ユニット１０６は、コマンド「Ｃｕｌｌ」に対しては、いずれかのクリッピングフラグがセットされていれば、出力値を最大値に設定する。
【０３９６】
追加演算ユニット１０６は、コマンド「Ｓｑｒｔ」に対しては、出力値＝√（被除数レジスタ１１６に保持されている３２ビット）とする。
【０３９７】
追加演算ユニット１０６は、コマンド「Ｗｃａｌｃ（ＣＷＤコマンドの一部）」に対しては、商のビット［３１：８］＝＝０の場合は、出力値＝商のビット［７：０］とし、商のビット［３１：８］＝＝０でない場合は、出力値＝０ｘＦＦとする。
【０３９８】
追加演算ユニット１０６は、コマンド「Ｄｃａｌｃ（ＣＷＤコマンドの一部）」に対しては、ＳＵＭ［３２：１］を、レジスタ「ＤｅｐｔｈＢｉａｓ」の値に応じて論理右シフト（ゼロ・シフトイン）してＤＥＰ［３１：０］を生成する。この場合、ＤＥＰ［３２：９］中の最も重み付けの大きい「１」位置に応じて、「０ｘ０」〜「０ｘＦ」の値を指数部とする。また、ＤＥＰ［３２：９］中の最も重み付けの大きい「１」位置に応じて、ＳＵＭ［２３：１］から「１」に続く連続した８ビットを抽出し仮数部とする。そして、出力値＝｛指数部（４ビット），仮数部（８ビット）｝とする。
【０３９９】
追加演算ユニット１０６は、コマンド「ＡＰＶ」に対しては、コマンド「Ａｆｆｉｎｅ」、コマンド「Ｐｐｒｏｊ」、及びコマンド「Ｖｉｅｗ」の組み合わせの処理を行う。
【０４００】
追加演算ユニット１０６は、コマンド「ＣＷＤ」に対しては、コマンド「Ｃｕｌｌ」、コマンド「Ｗｃａｌｃ」、及びコマンド「Ｄｃａｌｃ」の組み合わせの処理を行う。
【０４０１】
追加演算ユニット１０６は、コマンド「ＴＤＢＰ」に対しては、コマンド「Ｔｒａｎｓ」、コマンド「Ｄｏｔ」、及びコマンド「Ｂｒｉｇｈｔ−Ｐ」の組み合わせの処理を行う。
【０４０２】
追加演算ユニット１０６は、コマンド「ＴＤ」に対しては、コマンド「Ｔｒａｎｓ」及びコマンド「Ｄｏｔ」の組み合わせの処理を行う。
【０４０３】
上記のような各コマンドに応じた処理の他、追加演算ユニット１０６は、各演算の結果フラグ（キャリーフラグ、オーバーフローフラグ、サインフラグ、及びゼロ除算フラグ）の状態をＩ／Ｏレジスタセット３００に出力する。
【０４０４】
追加演算ユニット１０６から出力されたデータは、バス１５０ｃに送出される。バス１５０ｃに送出されたデータは、バス１５０ａ又はバス１５０ｂに送出されて、次の演算の入力値として用いられるか、あるいは、メインＲＡＭ２５へのライトデータＭＷＲとしてロード／ストアユニット４００へ出力される。
【０４０５】
さて、以上のように、本実施の形態では、複数の単独のコマンド（以下、「単独コマンド」と呼ぶ。）による処理を１つのコマンド（以下、「複合コマンド」と呼ぶ。）で実行できる。つまり、複合コマンド「ＡＰＶ」，「ＣＷＤ」，「ＴＤＢＰ」，及び「ＴＤ」を用意している。このため、コマンドの発行回数を減らすことができ、コマンドを発行するＣＰＵ５の処理負荷およびシステムのオーバーヘッドが軽くなる。また、複合コマンドの処理過程で生成される中間値（つまり、単独コマンドの出力値）は、メインＲＡＭ２５に書き出されず、ＧＥ１７内部のレジスタＧＲ０〜ＧＲ１５に保持されるため、コマンドの実行に必要なメモリ領域を小さくできるとともに、メモリアクセスに必要なバス帯域を小さくできる。
【０４０６】
また、本実施の形態では、メインＲＡＭ２５やレジスタＧＲ０〜ＧＲ１５に、演算対象データとしての各行列の要素のビット数を最適化して格納しておき、演算前に、型変換ユニット１０８ａ及び１０８ｂが、最適化された演算対象データを、ゼロ拡張又は符号拡張することによって、最大サイズに揃える。従って、演算対象データを格納するメモリ領域及びレジスタ領域を節約することができる。なお、演算対象データとしての各行列の要素の精度および表現可能範囲は必ずしも均一ではないが、型変換ユニット１０８ａ及び１０８ｂによる変換後のデータ型は、演算回路の都合などで均一に揃えられている。
【０４０７】
制御ユニット２００は、入力されたコマンドが所定の行列演算の実行を命令するものである場合、例えば、コマンド「Ａｆｆｉｎｅ」の場合、入力行列中の所定の要素に対しては、型変換ユニット１０８ａ及び１０８ｂが入力されたデータを型変換するように制御し、入力行列中の所定の要素以外の要素に対しては、型変換ユニット１０８ａ及び１０８ｂが入力されたデータを型変換せずにそのまま出力するように制御する。
【０４０８】
さらに、本実施の形態では、Ｖｅｃｔｏｒ１０形式変換ユニット１１４は、Ｖｅｃｔｏｒ１０形式のデータ（図１３参照）からメンバＸ、Ｙ、及びＺを抽出し、Ｘ、Ｙ、及びＺのメンバ単位で、データＶＣＴとして、ＭＵＸ１１２ａ及び１１２ｂに出力する。ただし、Ｖｅｃｔｏｒ１０形式変換ユニット１１４は、各メンバＸ，Ｙ及びＺを出力する前に、メンバＳｃａｌｅの値に応じて、各メンバＸ，Ｙ及びＺに対して１倍から８倍までの拡大変換を施す。このように、拡大変換されたデータを実行ユニット１００は処理するので、実際に演算が施されるデータのサイズを一定に保ちながら、倍率Ｓｃａｌｅの設定変更によって、複数の、表現可能な範囲（図１０（ｂ）参照）をサポートすることができる。これにより、演算対象データを格納するメモリ領域及びレジスタ領域を節約することができる。
【０４０９】
さらに、本実施の形態では、ポリゴンが１つのデプス値で定義されるが（つまり、頂点ごとのデプス値を持っていないが）、コマンド「ＣＷＤ」及び（数３４）によって、３頂点のＺ軸成分の加算結果からポリゴンのデプス値を算出することができる。この場合、ＧＥ１７は、その加算結果を１２ビットの浮動小数点数形式に変換し、変換結果の値とポリゴン構造体インスタンスのメンバ「Ｄｅｐｔｈ」に格納されているデプス初期値とを加算し、その加算結果をメンバ「Ｄｅｐｔｈ」に書き戻す（（数３５）参照）。デプス初期値は、デプス値のバイアスとして機能し、これにより意図的にポリゴンの描画優先順位を上げたり下げたりする表現が可能になる。また、デプス値を浮動小数点数形式で表現することにより、少ないビット数で広範な座標空間の範囲をカバーできる。また、視点に近い領域では高い精度で、遠い領域では粗い精度でデプス値を表現でき、少ないビット数のデプス値で３次元グラフィックスの描画に求められる精度に応じた表現が可能となる。
【０４１０】
また、レジスタ「ＤｅｐｔｈＢｉａｓ」は、ポリゴンのデプス値の指数部のバイアスを設定する（（数３４）参照）。このレジスタには、ＣＰＵ５が自由にアクセスできるため、三次元空間中の複数のポリゴンの分散の程度に応じ、デプス値を最適化できる。すなわち、限定的な精度のデプス値であっても、ポリゴンの奥行き方向の並び順を正しく表現できるため、メモリ使用量を節約できる。
【０４１１】
さらに、本実施の形態では、コマンド「Ｐｐｒｏｊ」（あるいは「Ｐｐｒｏｊ」を含む「ＡＰＶ」）およびコマンド「Ｃｕｌｌ」は、ポリゴンの３頂点のＺ座標の少なくとも１つが、ビューボリュームＶＶの範囲内にないポリゴンについては、レジスタ「ＧＥＣｏｍｍａｎｄ」のフィールド「ＩｎｖａｌｉｄＳｔｒｕｃｔｕｒｅＲｅｍｏｖｅ」に「０」が設定されていた場合、３頂点の座標に描画範囲外の値を設定して、描画されないようにする（第１カリングと呼ぶ。）。これにより、描画処理の負荷を軽減できる。
【０４１２】
一方、コマンド「Ｐｐｒｏｊ」（あるいは「Ｐｐｒｏｊ」を含む「ＡＰＶ」）およびコマンド「Ｃｕｌｌ」は、ポリゴンの３頂点のＺ座標の少なくとも１つが、ビューボリュームＶＶの範囲内にないポリゴンについては、レジスタ「ＧＥＣｏｍｍａｎｄ」のフィールド「ＩｎｖａｌｉｄＳｔｒｕｃｔｕｒｅＲｅｍｏｖｅ」に「１」が設定されていた場合、当該ポリゴン構造体インスタンスをポリゴン構造体配列から取り除く（第２カリングと呼ぶ。）。これにより、メモリ使用量の節約および描画処理の負荷を軽減できる。
【０４１３】
ポリゴンの３頂点のＺ座標の少なくとも１つが、ビューボリュームＶＶの範囲内にないポリゴンに対する処理として、レジスタ「ＧＥＣｏｍｍａｎｄ」のフィールド「ＩｎｖａｌｉｄＳｔｒｕｃｔｕｒｅＲｅｍｏｖｅ」への値の設定により、第１カリング及び第２カリングのいずれかを選択可能である。このため、ＣＰＵ５が出力結果を参照・調製する必要がある場合には、第１カリングを選択し、そうでなければメモリを節約するために第２カリングを選択することが可能となる。
【０４１４】
ＣＰＵ５は、レジスタ「ＺＮｅａｒ」及び「ＺＦａｒ」へアクセスすることにより、ビューボリュームＶＶの大きさを自由に設定できる。従って、ＣＰＵ５は、描画対象となる三次元空間の範囲を自由に制御できる。
【０４１５】
さらに、本実施の形態では、コマンド「Ｃｕｌｌ」は、裏面カリングのためのベクトル外積演算によるポリゴンの表裏判定を、三次元直交座標系でなく、二次元直交座標系へ投影後の頂点座標を用いて行うことにより、演算量を大幅に削減している。
【０４１６】
さらに、本実施の形態では、コマンド「Ｃｕｌｌ」は、ポリゴンの表裏判定において裏の面が現れると判定されたポリゴンについては、レジスタ「ＧＥＣｏｍｍａｎｄ」のフィールド「ＩｎｖａｌｉｄＳｔｒｕｃｔｕｒｅＲｅｍｏｖｅ」に「０」が設定されていた場合、３頂点の座標に描画範囲外の値を設定して、描画されないようにする（第１カリング）。これにより、描画処理の負荷を軽減できる。
【０４１７】
一方、コマンド「Ｃｕｌｌ」は、ポリゴンの表裏判定において裏の面が現れると判定されたポリゴンについては、レジスタ「ＧＥＣｏｍｍａｎｄ」のフィールド「ＩｎｖａｌｉｄＳｔｒｕｃｔｕｒｅＲｅｍｏｖｅ」に「１」が設定されていた場合、当該ポリゴン構造体インスタンスをポリゴン構造体配列から取り除く（第２カリング）。これにより、メモリ使用量の節約および描画処理の負荷を軽減できる。
【０４１８】
裏の面が現れると判定されたポリゴンに対する処理として、レジスタ「ＧＥＣｏｍｍａｎｄ」のフィールド「ＩｎｖａｌｉｄＳｔｒｕｃｔｕｒｅＲｅｍｏｖｅ」への値の設定により、第１カリング及び第２カリングのいずれかを選択可能である。このため、ＣＰＵ５が出力結果を参照・調製する必要がある場合には、第１カリングを選択し、そうでなければメモリを節約するために第２カリングを選択することが可能となる。
【０４１９】
さらに、本実施の形態によれば、コマンド「Ｖｉｅｗ」は、透視投影変換後のポリゴンの各頂点座標のＸ成分及びＹ成分に、それぞれオフセット「ｏｆｆｘ」及び「ｏｆｆｙ」を加算し、加算結果のＸ成分及びＹ成分からなる頂点座標が所定の範囲内にあるか否かを判定する。このように、オフセット加算後のポリゴンが所定の範囲内にあるか否かの判定を、三次元直交座標系でなく、二次元直交座標系へ投影後の頂点座標を用いて行うことにより、演算量を大幅に削減している。
【０４２０】
そして、コマンド「Ｃｕｌｌ」は、オフセット加算後のポリゴンが所定の範囲外であると判定したときは、レジスタ「ＧＥＣｏｍｍａｎｄ」のフィールド「ＩｎｖａｌｉｄＳｔｒｕｃｔｕｒｅＲｅｍｏｖｅ」に「０」が設定されていた場合、当該ポリゴンの３頂点の座標に描画範囲外の値を設定して、描画されないようにする（第１カリング）。これにより、描画処理の負荷を軽減できる。
【０４２１】
一方、コマンド「Ｃｕｌｌ」は、オフセット加算後のポリゴンが所定の範囲外であると判定したときは、レジスタ「ＧＥＣｏｍｍａｎｄ」のフィールド「ＩｎｖａｌｉｄＳｔｒｕｃｔｕｒｅＲｅｍｏｖｅ」に「１」が設定されていた場合、当該ポリゴン構造体インスタンスをポリゴン構造体配列から取り除く（第２カリング）。これにより、メモリ使用量の節約および描画処理の負荷を軽減できる。
【０４２２】
オフセット加算後のポリゴンが所定の範囲外にある場合の処理として、レジスタ「ＧＥＣｏｍｍａｎｄ」のフィールド「ＩｎｖａｌｉｄＳｔｒｕｃｔｕｒｅＲｅｍｏｖｅ」への値の設定により、第１カリング及び第２カリングのいずれかを選択可能である。このため、ＣＰＵ５が出力結果を参照・調製する必要がある場合には、第１カリングを選択し、そうでなければメモリを節約するために第２カリングを選択することが可能となる。
【０４２３】
オフセット「ｏｆｆｘ」及び「ｏｆｆｙ」は、それぞれ、レジスタ「ＶｉｅｗｐｏｒｔＯｆｆｓｅｔＸ」及びレジスタ「ＶｉｅｗｐｏｒｔＯｆｆｓｅｔＹ」に、ＣＰＵ５がアクセスすることにより、任意の値に設定できる。このように、二次元座標系に投影後の座標に加算するオフセットをＣＰＵ５が変更できるようにすることで、表示画面中の任意の位置にビューポートを設定できる。
【０４２４】
なお、本発明は、上記の実施の形態に限られるものではなく、その要旨を逸脱しない範囲で種々の態様において実施することが可能である。
【図面の簡単な説明】
【０４２５】
【図１】本発明の実施の形態によるマルチメディアプロセッサ１の内部構成を示すブロック図である。
【図２】図１のマルチメディアプロセッサ１によるグラフィックス処理の流れの概要を示すフローチャートである。
【図３】本実施の形態における座標変換フローの一例を示す図である。
【図４】図１のＧＥ１７によるポリゴンの頂点座標変換処理の流れを示すフローチャートである。
【図５】テクスチャマッピングモードでのポリゴンに対するライティング処理の流れを示すフローチャートである。
【図６】グーローシェーディングモードでのポリゴンに対するライティング処理の流れを示すフローチャートである。
【図７】（ａ）ポリゴンの表の面の例示図である。（ｂ）ポリゴンの裏の面の例示図である。
【図８】ビューボリュームクリッピングの説明図である。
【図９】（ａ）パースペクティブコレクトを施したテクスチャマッピングの例示図である。（ｂ）パースペクティブコレクトを施していないテクスチャマッピングの例示図である。
【図１０】図１のＧＥ１７の内部構成を示すブロック図である。
【図１１】図１０のＩ／Ｏレジスタセット３００に含まれる各種レジスタの説明図である。
【図１２】（ａ）Ｍａｔｒｉｘ３２配列の構成を示す図である。（ｂ）図１２（ａ）のＭａｔｒｉｘ３２配列の要素の構成を示す図である。
【図１３】（ａ）Ｖｅｃｔｏｒ１０構造体の構成を示す図である。（ｂ）Ｖｅｃｔｏｒ１０構造体のメンバの説明図である。（ｃ）Ｖｅｃｔｏｒ１０構造体のメンバ「Ｘ」〜「Ｚ」の構成を示す図である。
【図１４】（ａ）Ｖｅｃｔｏｒ１６構造体の構成を示す図である。（ｂ）Ｖｅｃｔｏｒ１６構造体のメンバの説明図である。（ｃ）Ｖｅｃｔｏｒ１６構造体のメンバ「Ｚ」の構成を示す図である。（ｄ）Ｖｅｃｔｏｒ１６構造体のメンバ「Ｘ」及び「Ｙ」の構成を示す図である。
【図１５】（ａ）Ｖｅｃｔｏｒ３２構造体の構成を示す図である。（ｂ）Ｖｅｃｔｏｒ３２構造体のメンバの説明図である。
【図１６】（ａ）Ｄｏｔ構造体の構成を示す図である。（ｂ）Ｄｏｔ構造体のメンバの説明図である。
【図１７】テクスチャマッピングモードのポリゴン構造体（ＧＥ入力形式）の構成を示す図である。
【図１８】テクスチャマッピングモードのポリゴン構造体（ＧＥ入力形式）のメンバの説明図である。
【図１９】グーローシェーディングモードのポリゴン構造体（ＧＥ入力形式）の構成を示す図である。
【図２０】グーローシェーディングモードのポリゴン構造体（ＧＥ入力形式）のメンバの説明図である。
【図２１】図１０の実行ユニット１００の内部構成を示すブロック図である。
【符号の説明】
【０４２６】
１…マルチメディアプロセッサ、３…外部メモリインタフェース、４…ＤＭＡＣ、５…ＣＰＵ、７…ＣＰＵローカルＲＡＭ、９…ＲＰＵ、１１…カラーパレットＲＡＭ、１３…ＳＰＵ、１５…ＳＰＵローカルＲＡＭ、１７…ＧＥ、１９…ＹＳＵ、２１…外部インタフェースブロック、２３…メインＲＡＭアクセスアービタ、２５…メインＲＡＭ、２７…Ｉ／Ｏバス、２９…ビデオＤＡＣ、３１…オーディオＤＡＣブロック、５１…外部バス、５０…外部メモリ、１００…実行ユニット、１０２…除算ユニット、１０４…積和演算ユニット、１０６…追加演算ユニット、１０８ａ，１０８ｂ…型変換ユニット、１１４…Ｖｅｃｔｏｒ１０形式変換ユニット、２００…制御ユニット、３００…Ｉ／Ｏレジスタセット、４００…ロード／ストアユニット。
【図１】
2007128180.tif 000038
【図２】
2007128180.tif 000039
【図３】
2007128180.tif 000040
【図４】
2007128180.tif 000041
【図５】
2007128180.tif 000042
【図６】
2007128180.tif 000043
【図７】
2007128180.tif 000044
【図８】
2007128180.tif 000045
【図９】
2007128180.tif 000046
【図１０】
2007128180.tif 000047
【図１１】
2007128180.tif 000048
【図１２】
2007128180.tif 000049
【図１３】
2007128180.tif 000050
【図１４】
2007128180.tif 000051
【図１５】
2007128180.tif 000052
【図１６】
2007128180.tif 000053
【図１７】
2007128180.tif 000054
【図１８】
2007128180.tif 000055
【図１９】
2007128180.tif 000056
【図２０】
2007128180.tif 000057
【図２１】
2007128180.tif 000058