上記の複数の画面にオブジェクトを表示する技術、たとえば、シザリング技術では、親画面の内部において2点の座標を指示することにより、子画面が設定できるようになっていた。しかしながら、このシザリング技術では、子画面の形状が矩形状に限定されてしまい、矩形以外の形状の画面(子画面)を設定することができないという問題があった。
このため、矩形以外の形状の画面(子画面)を設定する場合、フレームバッファとは別の領域に特別にレンダリングバッファを確保し、レンダリングバッファの親画面のテクスチャデータと子画面のテクスチャデータとを合成した画像データをフレームバッファに格納することにより、子画面を有する親画面を生成する技術が用いられることがある。
しかしながら、この技術を用いた場合、レンダリングバッファの親画面のテクスチャデータと子画面のテクスチャデータとレンダリングバッファに格納する必要があるので、メモリ容量を大量に使用してしまうという問題がある。また、レンダリング時と画像の合成時とにおいて、深度データを作成する処理を行う必要があるので、計算負荷が大きくなって計算速度が遅くなってしまうという問題がある。
本発明は、このような問題に鑑みてなされたものであり、本発明の目的は、メモリを圧迫することなく、複数の画面を任意の形状で自由に形成することができるようにすることにある。
請求項1に係る画像処理プログラムは、3次元仮想空間に配置されたオブジェクトの深度情報を格納するための深度情報用の記憶領域と、オブジェクトの画像情報を格納するための画像情報用の記憶領域とを用いて、オブジェクトを画像表示部に描画するためのものである。この画像処理プログラムでは、以下の機能が実現される。
(1)深度情報用の記憶領域を初期化する深度データ初期化機能。
(2)画像表示部の所定の範囲をマスクするためのマスク用の深度データを、深度情報用の記憶領域に格納する第1深度データ格納機能。
(3)画像表示部の所定の範囲を除く範囲にオブジェクトを表示するためのオブジェクト用の深度データを、深度情報用の記憶領域に格納する第2深度データ格納機能。
(4)深度情報用の記憶領域に格納されたオブジェクト用の深度データに基づいて、オブジェクト用の画像データを、画像情報用の記憶領域に格納するオブジェクト画像格納機能。
(5)画像情報用の記憶領域に格納された、オブジェクト用の画像データを用いて、オブジェクトを描画するオブジェクト描画機能。
この画像処理プログラムでは、深度データ初期化機能において、深度情報用の記憶領域が初期化される。第1深度データ格納機能においては、画像表示部の所定の範囲をマスクするためのマスク用の深度データが、深度情報用の記憶領域に格納される。第2深度データ格納機能においては、画像表示部の所定の範囲を除く範囲にオブジェクトを表示するためのオブジェクト用の深度データが、深度情報用の記憶領域に格納される。オブジェクト画像格納機能においては、深度情報用の記憶領域に格納されたオブジェクト用の深度データに基づいて、オブジェクト用の画像データが、画像情報用の記憶領域に格納される。オブジェクト描画機能においては、画像情報用の記憶領域に格納された、オブジェクト用の画像データを用いて、オブジェクトが描画される。
この場合、まず、深度情報用の記憶領域たとえばZバッファが、初期化される。そして、画像表示部の所定の範囲をマスクするためのマスク用の深度データが、初期化されたZバッファに書き込まれる。この状態では、画像表示部の所定の範囲に対応するZバッファの領域には、マスク用の深度データが書き込まれている。なお、画像表示部の所定の範囲以外の範囲に対応するZバッファの領域には、深度データの初期値たとえば「0(ゼロ)」が書き込まれている。
次に、画像表示部の所定の範囲を除く範囲にオブジェクトを表示するためのオブジェクト用の深度データが、Zバッファに書き込まれる。そして、Zバッファに書き込まれたオブジェクト用の深度データに基づいて、オブジェクト用の画像データが、フレームバッファに格納される。
この状態では、マスク用の深度データが書き込まれたZバッファの領域(画像表示部の所定の範囲に対応するZバッファの領域)以外のZバッファの領域には、オブジェクト用の深度データが書き込まれている。また、マスク用の深度データが書き込まれたZバッファの領域(画像表示部の所定の範囲に対応するZバッファの領域)以外のZバッファの領域に対応する、フレームバッファの領域には、オブジェクト用の画像データが書き込まれている。なお、マスク用の深度データが書き込まれたZバッファの領域に対しては、オブジェクト用の深度データの書き込みが禁止される。
最後に、フレームバッファに格納された、オブジェクト用の画像データを用いて、オブジェクトが描画される。詳細には、フレームバッファにおいてマスク用の無色の画像データが存在しない領域の、オブジェクト用の画像データを用いて、オブジェクトが描画される。
これにより、マスクされた所定の範囲以外の範囲(マスクされていない範囲)において、オブジェクトを画像表示部に表示することができる。すなわち、新規の画面(マスクされていない範囲)を設定し、この新規の画面にオブジェクトを表示することができる。また、レンダリングバッファを用意しなくても、Zバッファからフレームバッファに直接的に画像データを格納することができるので、メモリ容量を圧迫することなく、オブジェクトを新規の画面に表示することができる。以上のことから、請求項1に係る発明では、メモリを圧迫することなく、複数の画面を任意の形状で自由に形成することができる。
請求項2に係る画像処理プログラムは、請求項1に記載の画像処理プログラムにおいて、以下の機能をさらに実現させるためのプログラムである。
(6)深度情報用の記憶領域に格納されたマスク用の深度データに基づいて、マスク用の無色の画像データを、画像情報用の記憶領域に格納するマスク画像格納機能。
この画像処理プログラムでは、マスク画像格納機能において、深度情報用の記憶領域に格納されたマスク用の深度データに基づいて、マスク用の無色の画像データが、画像情報用の記憶領域に格納される。
この場合、まず、マスク用の深度データが書き込まれたZバッファが参照される。そして、このZバッファにおいてマスク用の深度データが書き込まれた領域に対応する、画像情報用の記憶領域たとえばフレームバッファの領域に、マスク用の無色の画像データが書き込まれる。ここで、フレームバッファにマスク用の無色の画像データが書き込まれる場合、色データとして、透明度を定義することができるRBGAデータが用いられる。このRGBAデータの「A」の値を「0(ゼロ)」にすることにより、フレームバッファにおける画像データの色情報を「透明」にすることができる。このため、マスク用の画像データによりZバッファがマスクされていたとしても、フレームバッファの色情報に影響が及ばないようにすることができる。
請求項3に係る画像処理プログラムは、請求項1に記載の画像処理プログラムにおいて、以下の機能をさらに実現させるためのプログラムである。
(7)3次元仮想空間における仮想カメラ位置を示す座標データを制御部に認識させることにより、仮想カメラを3次元仮想空間に設定する仮想カメラ設定機能。
(8)3次元仮想空間において、仮想カメラの撮影対象となる撮影空間を規定するためのデータを制御部に認識させることにより、撮影空間を3次元仮想空間に規定する撮影空間規定機能。
この画像処理プログラムでは、仮想カメラ設定機能において、3次元仮想空間における仮想カメラ位置を示す座標データを制御部に認識させることにより、仮想カメラが3次元仮想空間に設定される。撮影空間規定機能においては、3次元仮想空間において、仮想カメラの撮影対象となる撮影空間を規定するためのデータを制御部に認識させることにより、撮影空間が3次元仮想空間に規定される。
ここでは、深度データ初期化機能において、深度情報用の記憶領域が初期化される。そして、第1深度データ格納機能において、第1仮想カメラと第1撮影空間の内部のオブジェクトとの間における第1撮影空間の第1位置に、第1マスク用の無色のオブジェクトを配置することにより、第1マスク用の無色のオブジェクトに対応する第1マスク用の深度データが、深度情報用の記憶領域に格納される。
そして、第2深度データ格納機能において、第1仮想カメラから見た第1撮影空間のオブジェクト用の深度データが、深度情報用の記憶領域に格納される。そして、オブジェクト画像格納機能において、深度情報用の記憶領域に格納された第1撮影空間のオブジェクト用の深度データに基づいて、第1仮想カメラから見た第1撮影空間のオブジェクトに対応する、オブジェクト用の画像データが、画像情報用の記憶領域に格納される。そして、オブジェクト描画機能において、画像情報用の記憶領域に格納された、オブジェクト用の画像データを用いて、オブジェクトが描画される。
この場合、まず、Zバッファが初期化される。そして、第1仮想カメラと第1撮影空間の内部のオブジェクトとの間における第1撮影空間の第1位置に、第1マスク用の無色のオブジェクトが配置される。すると、第1マスク用の無色のオブジェクトに対応する第1マスク用の深度データが、初期化されたZバッファに書き込まれる。
この状態では、第1マスク用の無色のオブジェクトの深度を示すZバッファの領域には、第1マスク用の深度データが書き込まれている。なお、第1マスク用の深度データが書き込まれた領域以外のZバッファの領域には、深度データの初期値たとえば「0(ゼロ)」が書き込まれている。
次に、第1仮想カメラから見た第1撮影空間のオブジェクト用の深度データが、Zバッファに書き込まれる。そして、Zバッファに書き込まれた第1撮影空間のオブジェクト用の深度データに基づいて、第1仮想カメラから見た第1撮影空間のオブジェクトに対応する、オブジェクト用の画像データが、画像情報用の記憶領域に格納される。
この状態では、第1マスク用の深度データが書き込まれたZバッファの領域以外のZバッファの領域には、第1撮影空間のオブジェクト用の深度データが書き込まれている。また、第1マスク用の深度データが書き込まれたZバッファの領域以外のZバッファの領域に対応する、フレームバッファの領域には、第1撮影空間のオブジェクト用の画像データが書き込まれている。
なお、第1マスク用の深度データが書き込まれたZバッファの領域に対しては、オブジェクト用の深度データの書き込みが禁止される。
最後に、フレームバッファに格納された、第1撮影空間のオブジェクト用の画像データを用いて、第1撮影空間のオブジェクトが描画される。詳細には、フレームバッファにおいて第1マスク用の無色の画像データが存在しない領域の、オブジェクト用の画像データを用いて、オブジェクトが描画される。
これにより、第1撮影空間用の描画範囲(マスクされた所定の範囲以外の範囲、マスクされていない範囲)において、第1撮影空間のオブジェクトを画像表示部に表示することができる。すなわち、第1撮影空間描画用の画面を設定し、この画面に第1撮影空間のオブジェクトを表示することができる。また、レンダリングバッファを用意しなくても、Zバッファからフレームバッファに直接的に画像データを格納することができるので、メモリ容量を圧迫することなく、第1撮影空間のオブジェクトを上記の画面に表示することができる。以上のことから、請求項2に係る発明では、メモリを圧迫することなく、複数の画面を任意の形状で自由に形成することができる。
請求項4に係る画像処理プログラムでは、請求項3に記載の画像処理プログラムにおいて、各機能において、以下の処理がさらに実行される。
この画像処理プログラムでは、深度データ初期化機能において、深度情報用の記憶領域が再び初期化される。そして、第1深度データ格納機能において、第2仮想カメラと第2撮影空間の内部のオブジェクトとの間における上記の第1位置とは異なる第2位置に、第2マスク用の無色のオブジェクトを配置することにより、第2マスク用の無色のオブジェクトに対応する第2マスク用の深度データが、深度情報用の記憶領域に格納される。
そして、第2深度データ格納機能において、第2仮想カメラから見た第2撮影空間のオブジェクト用の深度データが、深度情報用の記憶領域に格納される。そして、オブジェクト画像格納機能において、深度情報用の記憶領域に格納された第2撮影空間のオブジェクト用の深度データに基づいて、第2仮想カメラから見た第2撮影空間のオブジェクトに対応する、オブジェクト用の画像データが、画像情報用の記憶領域に格納される。そして、オブジェクト描画機能において、画像情報用の記憶領域に格納された、オブジェクト用の画像データを用いて、オブジェクトが描画される。
この場合、Zバッファが再び初期化される。そして、第2仮想カメラと第2撮影空間の内部のオブジェクトとの間における上記の第1位置とは異なる第2位置に、第2マスク用の無色のオブジェクトが配置される。すると、第2マスク用の無色のオブジェクトに対応する第2マスク用の深度データが、初期化されたZバッファに書き込まれる。
この状態では、第2マスク用の無色のオブジェクトの深度を示すZバッファの領域には、第2マスク用の深度データが書き込まれている。なお、第2マスク用の深度データが書き込まれた領域以外のZバッファの領域には、深度データの初期値たとえば「0(ゼロ)」が書き込まれている。
次に、第2仮想カメラから見た第2撮影空間のオブジェクト用の深度データが、Zバッファに書き込まれる。そして、Zバッファに書き込まれた第2撮影空間のオブジェクト用の深度データに基づいて、第2仮想カメラから見た第2撮影空間のオブジェクトに対応する、オブジェクト用の画像データが、画像情報用の記憶領域に格納される。
この状態では、第2マスク用の深度データが書き込まれたZバッファの領域以外のZバッファの領域には、第2撮影空間のオブジェクト用の深度データが書き込まれている。また、第2マスク用の深度データが書き込まれたZバッファの領域以外のZバッファの領域に対応する、フレームバッファの領域には、第2撮影空間のオブジェクト用の画像データが書き込まれている。
なお、第2マスク用の深度データが書き込まれたZバッファの領域に対しては、オブジェクト用の深度データの書き込みが禁止される。
最後に、フレームバッファに格納された、第2撮影空間のオブジェクト用の画像データを用いて、第2撮影空間のオブジェクトが描画される。詳細には、フレームバッファにおいて第2マスク用の無色の画像データが存在しない領域の、オブジェクト用の画像データを用いて、オブジェクトが描画される。
これにより、第1撮影空間の描画範囲とは異なる、第2撮影空間の描画範囲において、第2撮影空間のオブジェクトを画像表示部に表示することができる。すなわち、第2撮影空間描画用の画面をさらに設定し、この画面に第2撮影空間のオブジェクトを表示することができる。また、レンダリングバッファを用意しなくても、Zバッファからフレームバッファに直接的に画像データを格納することができるので、メモリ容量を圧迫することなく、第2撮影空間のオブジェクトを上記の画面に表示することができる。以上のことから、請求項3に係る発明では、メモリを圧迫することなく、複数の画面を任意の形状で自由に形成することができる。
請求項5に係る画像処理プログラムでは、請求項4に記載の画像処理プログラムにおいて、第1撮影空間の第1マスク用の無色のオブジェクトに重ならないような、上記の第1位置とは異なる第2位置に、第2マスク用の無色のオブジェクトが配置される。これにより、第2マスク用の無色のオブジェクトに対応するマスク用の深度データが、深度情報用の記憶領域に格納される。この機能は、第1深度データ格納機能において実現される。
この場合、第2マスク用の無色のオブジェクトを、第1マスク用の無色のオブジェクトに重ならないように配置することにより、第1撮影空間用の画面を、第2撮影空間用の画面に重ならないように、画像表示部に設定することができる。
請求項6に係る画像処理装置は、3次元仮想空間に配置されたオブジェクトの深度情報を格納するための深度情報用の記憶領域と、オブジェクトの画像情報を格納するための画像情報用の記憶領域とを用いて、オブジェクトを画像表示部に描画する画像処理装置である。この画像処理装置は、深度情報用の記憶領域を初期化する深度データ初期化手段と、画像表示部の所定の範囲をマスクするためのマスク用の深度データを、深度情報用の記憶領域に格納する第1深度データ格納手段と、画像表示部の所定の範囲を除く範囲にオブジェクトを表示するためのオブジェクト用の深度データを、深度情報用の記憶領域に格納する第2深度データ格納手段と、深度情報用の記憶領域に格納されたオブジェクト用の深度データに基づいて、オブジェクト用の画像データを、画像情報用の記憶領域に格納するオブジェクト画像格納手段と、画像情報用の記憶領域に格納された、オブジェクト用の画像データを用いて、オブジェクトを描画するオブジェクト描画手段と、を備えている。
請求項7に係る画像処理方法は、3次元仮想空間に配置されたオブジェクトの深度情報を格納するための深度情報用の記憶領域と、オブジェクトの画像情報を格納するための画像情報用の記憶領域とを用いて、オブジェクトを画像表示部に描画する画像処理方法である。この画像処理方法は、深度情報用の記憶領域を初期化する深度データ初期化ステップと、画像表示部の所定の範囲をマスクするためのマスク用の深度データを、深度情報用の記憶領域に格納する第1深度データ格納ステップと、画像表示部の所定の範囲を除く範囲にオブジェクトを表示するためのオブジェクト用の深度データを、深度情報用の記憶領域に格納する第2深度データ格納ステップと、深度情報用の記憶領域に格納されたオブジェクト用の深度データに基づいて、オブジェクト用の画像データを、画像情報用の記憶領域に格納するオブジェクト画像格納ステップと、画像情報用の記憶領域に格納された、オブジェクト用の画像データを用いて、オブジェクトを描画するオブジェクト描画ステップと、を備えている。
本発明では、新規の画面を設定し、この新規の画面にオブジェクトを表示することができる。また、レンダリングバッファを用意しなくても、Zバッファからフレームバッファに直接的に画像データを格納することができるので、メモリ容量を圧迫することなく、オブジェクトを新規の画面に表示することができる。すなわち、メモリを圧迫することなく、複数の画面を任意の形状で自由に形成することができる。
〔データ処理装置の構成と動作〕
図1は、データを処理するためのデータ処理装置の基本構成を示している。以下には、データ処理装置の一例として、家庭用コンピュータの構成が示されている。家庭用コンピュータは、家庭用コンピュータ本体およびモニタを備える。家庭用コンピュータ本体には、記録媒体10が装填可能となっており、記録媒体10からデータ処理用のプログラムが適宜読み出されて、データ処理用のプログラムが実行される。このようにデータ処理用のプログラムが実行されると、データ処理に関する内容を示す画像が、モニタに表示される。
家庭用コンピュータは、制御部1と、記憶部2と、画像表示部3と、音声出力部4と、操作入力部5、通信部23とからなっており、それぞれがバス6を介して接続される。このバス6は、アドレスバス、データバス、およびコントロールバスなどを含んでいる。ここで、制御部1、記憶部2、音声出力部4および操作入力部5は、家庭用コンピュータ本体に含まれており、画像表示部3はモニタに含まれている。
制御部1は、主に、データ処理用のプログラムに基づいてデータ処理の進行を制御する。制御部1は、たとえば、CPU(Central Processing Unit)7と、信号処理プロセッサ8と、画像処理プロセッサ9とから構成されている。CPU7と信号処理プロセッサ8と画像処理プロセッサ9とは、それぞれがバス6を介して互いに接続されている。CPU7は、データ処理用のプログラムからの命令を解釈し、各種のデータ処理や制御を行う。たとえば、CPU7は、信号処理プロセッサ8に対して、画像用のデータを画像処理プロセッサに供給するように命令する。信号処理プロセッサ8は、主に、3次元空間上における計算と、3次元空間上から擬似3次元空間上への位置変換計算と、光源計算処理と、3次元空間上又は擬似3次元空間上で実行された計算結果に基づいた画像および音声データの生成加工処理とを行っている。画像処理プロセッサ9は、主に、信号処理プロセッサ8の計算結果および処理結果に基づいて、描画すべき画像用のデータをRAM12bに書き込む処理を行っている。また、CPU7は、信号処理プロセッサ8に対して、各種データを処理するように命令する。信号処理プロセッサ8は、主に、3次元空間上における各種データに対する計算と、3次元空間上から擬似3次元空間上への位置変換計算とを行っている。
記憶部2は、主に、プログラムデータや、プログラムデータで使用される各種データなどを格納する。記憶部2は、たとえば、記録媒体10と、インターフェース回路11と、ハードディスク12aと、RAM(Random Access Memory)12bとから構成されている。記録媒体10には、インターフェース回路11が接続されている。そして、インターフェース回路11とハードディスク12aおよびRAM12bとはバス6を介して接続されている。記録媒体10は、オペレーションシステムのプログラムデータや、画像用のデータ、音声データ並びに各種プログラムデータからなるデータなどを記録するためのものである。この記録媒体10は、たとえば、ROM(Read Only Memory)カセット、光ディスク、およびフレキシブルディスクなどであり、オペレーティングシステムのプログラムデータやプログラムで利用するデータなどが記憶される。なお、記録媒体10にはカード型メモリも含まれている。ハードディスク12aは、記録媒体10から読み出された各種データを格納したり、制御部1からの処理結果を記録したりする。RAM12bは、記録媒体10から読み出された各種データを一時的に格納したり、制御部1からの処理結果を一時的に記録したりするために用いられる。このRAM12bには、各種データとともに、各種データの記憶位置を示すアドレスデータが格納されており、任意のアドレスを指定して読み書きすることが可能になっている。
画像表示部3は、主に、画像処理プロセッサ9によってハードディスク12aやRAM12bに書き込まれた画像用のデータや、記録媒体10から読み出される画像用のデータなどを画像として出力するために設けられている。この画像表示部3は、たとえば、モニタ20と、インターフェース回路21と、D/Aコンバータ(Digital-To-Analogコンバータ)22とから構成されている。モニタ20にはD/Aコンバータ22が接続されており、D/Aコンバータ22にはインターフェース回路21が接続されている。そして、インターフェース回路21にバス6が接続されている。ここでは、画像用のデータが、インターフェース回路21を介してD/Aコンバータ22に供給され、ここでアナログ画像信号に変換される。そして、アナログ画像信号がモニタ20に画像として出力される。
ここで、画像用のデータには、たとえば、ポリゴンデータやテクスチャデータなどがある。ポリゴンデータはポリゴンを構成する頂点の座標データのことである。テクスチャデータは、ポリゴンにテクスチャを設定するためのものであり、テクスチャ指示データとテクスチャカラーデータとからなっている。テクスチャ指示データはポリゴンとテクスチャとを対応づけるためのデータであり、テクスチャカラーデータはテクスチャの色を指定するためのデータである。ここで、ポリゴンデータとテクスチャデータとには、各データの記憶位置を示すポリゴンアドレスデータとテクスチャアドレスデータとが対応づけられている。このような画像用のデータでは、信号処理プロセッサ8により、ポリゴンアドレスデータの示す3次元空間上のポリゴンデータ(3次元ポリゴンデータ)が、画面自体(視点)の移動量データおよび回転量データに基づいて座標変換および透視投影変換されて、2次元空間上のポリゴンデータ(2次元ポリゴンデータ)に置換される。そして、複数の2次元ポリゴンデータでポリゴン外形を構成して、ポリゴンの内部領域にテクスチャアドレスデータが示すテクスチャデータを書き込む。このようにして、各ポリゴンにテクスチャが貼り付けられた物体つまり各種キャラクタを表現することができる。
音声出力部4は、主に、記録媒体10から読み出される音声データを音声として出力するために設けられている。音声出力部4は、たとえば、スピーカ13と、増幅回路14と、D/Aコンバータ15と、インターフェース回路16とから構成されている。スピーカ13には増幅回路14が接続されており、増幅回路14にはD/Aコンバータ15が接続されており、D/Aコンバータ15にはインターフェース回路16が接続されている。そして、インターフェース回路16にバス6が接続されている。ここでは、音声データが、インターフェース回路16を介してD/Aコンバータ15に供給され、ここでアナログ音声信号に変換される。このアナログ音声信号が増幅回路14によって増幅され、スピーカ13から音声として出力される。音声データには、たとえば、ADPCM(Adaptive Differential Pulse Code Modulation)データやPCM(Pulse Code Modulation)データなどがある。ADPCMデータの場合、上述と同様の処理方法で音声をスピーカ13から出力することができる。PCMデータの場合、RAM12bにおいてPCMデータをADPCMデータに変換しておくことで、上述と同様の処理方法で音声をスピーカ13から出力することができる。
操作入力部5は、主に、キーボード17と、操作情報インターフェース回路18と、インターフェース回路19とから構成されている。キーボード17には、操作情報インターフェース回路18が接続されており、操作情報インターフェース回路18にはインターフェース回路19が接続されている。そして、インターフェース回路19にバス6が接続されている。キーボード17は、プレイヤが種々の操作命令を入力するために使用する操作装置であり、プレイヤの操作に応じた操作信号をCPU7に送出する。キーボード17には、アルファベット、数字、および記号等が記された複数のキーが設けられている。
通信部23は、通信制御回路24および通信インターフェース25を有している。通信制御回路24および通信インターフェース25は、家庭用コンピュータをサーバや他のコンピュータ等に接続するために用いられる。通信制御回路20および通信インターフェース21は、バス16を介してCPU7に接続されている。通信制御回路20および通信インターフェース21は、CPU7からの命令に応じて、家庭用コンピュータをインターネットに接続するための接続信号を制御し発信する。また、通信制御回路20および通信インターフェース21は、インターネットを介して家庭用コンピュータをサーバや他のコンピュータに接続するための接続信号を制御し発信する。
以上のような構成からなる家庭用コンピュータの概略動作を、以下に説明する。電源スイッチ(図示省略)がオンにされ電源が投入されると、CPU7が、ハードディスク12a又は記録媒体10に記憶されているオペレーティングシステムに基づいて、ハードディスク12a又は記録媒体10から画像用のデータ、音声データ、およびプログラムデータを読み出す。読み出された画像用のデータ、音声データ、およびプログラムデータの一部若しくは全部は、ハードディスク12aやRAM12bに格納される。そして、CPU7が、ハードディスク12aやRAM12bに格納されたプログラムデータに基づいて、画像用のデータや音声データを画像や音声としてモニタ20やスピーカ13に出力するためのコマンドを発行する。
画像用のデータの場合、CPU7からのコマンドに基づいて、まず、信号処理プロセッサ8が、3次元空間上におけるキャラクタの位置計算および光源計算などを行う。次に、画像処理プロセッサ9が、信号処理プロセッサ8の計算結果に基づいて、描画すべき画像用のデータのRAM12bへの書き込み処理などを行う。そして、RAM12bに書き込まれた画像用のデータが、インターフェース回路21を介してD/Aコンバータ22に供給される。ここで、画像用のデータがD/Aコンバータ22でアナログ映像信号に変換される。そして、画像用のデータはモニタ20に供給され画像として表示される。
音声データの場合、まず、信号処理プロセッサ8が、CPU7からのコマンドに基づいて音声データの生成および加工処理を行う。ここでは、音声データに対して、たとえば、ピッチの変換、ノイズの付加、エンベロープの設定、レベルの設定及びリバーブの付加などの処理が施される。次に、音声データは、信号処理プロセッサ8から出力されて、インターフェース回路16を介してD/Aコンバータ15に供給される。ここで、音声データがアナログ音声信号に変換される。そして、音声データは増幅回路14を介してスピーカ13から音声として出力される。
〔データ処理装置における各種処理概要〕
本データ処理装置において実行されるプログラムは、たとえば、画像処理プログラムである。この画像処理プログラムでは、3次元仮想空間に配置されたオブジェクトの深度情報を格納するためのZバッファと、オブジェクトの画像情報を格納するためのフレームバッファとを用いて、オブジェクトをモニタ20に描画する。ここで、Zバッファおよびフレームバッファは、RAM12bに形成される記憶領域である。
図2は、本発明で主要な役割を果たす機能を説明するための機能ブロック図である。なお、ここでは、データの記憶部をRAM12bとした場合の例を示すが、この例はデータの記憶部をRAM12bに限定するものではない。たとえば、データの記憶部をハードディスク12aにしたり、データの記憶部をRAM12bおよびハードディスク12aにしたりしても良い。
仮想カメラ設定手段50は、3次元仮想空間における仮想カメラ位置を示す座標データをCPU7に認識させることにより、仮想カメラを3次元仮想空間に設定する機能を備えている。この手段では、3次元仮想空間における仮想カメラ位置を示す座標データをCPU7に認識させることにより、仮想カメラが、3次元仮想空間に設定される。たとえば、この手段では、第1仮想カメラ用の座標データおよび第2仮想カメラ用の座標データをCPU7に認識させることにより、第1仮想カメラおよび第2仮想カメラが、3次元仮想空間に配置される。
ここでは、第1仮想カメラと第2仮想カメラとが異なる位置に配置される場合の例を示すが、第1仮想カメラと第2仮想カメラとが同じ位置に配置されるようにしても良い。また、ここでは、第1仮想カメラと第2仮想カメラとが配置される位置が固定されている場合の例を示すが、第1仮想カメラと第2仮想カメラとが配置される位置を、ユーザが任意に設定することができるようにしても良い。
撮影空間規定手段51は、3次元仮想空間において、仮想カメラの撮影対象となる撮影空間を規定するためのデータをCPU7に認識させることにより、撮影空間を3次元仮想空間に規定する機能を備えている。この手段では、3次元仮想空間において、仮想カメラの撮影対象となる撮影空間を規定するためのデータをCPU7に認識させることにより、撮影空間が3次元仮想空間に規定される。
たとえば、この手段では、仮想カメラの視界に入る全ての空間(視界空間)の内部の所定の領域が、モニタ20に表示される空間すなわち撮影空間(視錐領域)として規定される。具体的には、図3に示すように、この撮影空間(視界空間の内部の所定の領域)は、カメラ側の面(第1面)およびカメラから離反する側の面(第2面)を所定の位置に設定することにより規定される。ここで、第1面および第2面が設定されると、第1面と第2面との間の空間が、6面体形状の撮影空間として設定される。すると、撮影空間の8つの隅角部の位置を示す座標データがCPU7に認識される。これにより、3次元仮想空間における撮影空間を、CPU7に認識させることができる。
ここでは、撮影空間を規定するための第1面の位置および第2面の位置は、画像処理プログラムにおいて予め規定されている。しかしながら、第1面の位置および第2面の位置を、ユーザが任意に設定することができるようにしても良い。
なお、上記の撮影空間の設定は、第1仮想カメラおよび第2仮想カメラそれぞれに対して行われる。
深度データ初期化手段52は、Zバッファを初期化する機能を備えている。この手段では、Zバッファを初期化する処理が、CPU7により実行される。たとえば、Zバッファに格納された全ての深度データをゼロクリアする命令が、CPU7から発行される。すると、Zバッファに格納された全ての深度データに「0(ゼロ)」を代入する処理が、CPU7により実行される。たとえば、ここでは、撮影空間の内部において仮想カメラから最も遠い位置の深度データが、「0(ゼロ)」に設定される。たとえば、後述する撮影空間の第2面の深度データが、「0(ゼロ)」に設定される。
なお、Zバッファは、仮想カメラの位置を基準として撮影空間の内部の深度をまとめて保存しておくメモリ領域である。
第1深度データ格納手段53は、モニタ20の所定の範囲をマスクするためのマスク用の深度データを、Zバッファに格納する機能を備えている。この手段では、モニタ20の所定の範囲をマスクするためのマスク用の深度データが、Zバッファに格納される。たとえば、この手段では、モニタ20の所定の範囲をマスクするためのマスク用の深度データが、Zバッファに直接的に格納される。
また、たとえば、この手段では、モニタ20の所定の範囲をマスクするためのマスク用の深度データが、Zバッファに間接的に格納される。たとえば、マスク用の深度データをZバッファに間接的に格納される場合の一例として、マスク用のオブジェクトを撮影空間に配置することにより、モニタ20の所定の範囲をマスクするためのマスク用の深度データが、Zバッファに格納される。ここでは、マスク用の深度データをZバッファに間接的に格納される場合の例が示される。
この手段では、第1仮想カメラと第1撮影空間の内部のオブジェクトとの間における第1撮影空間の第1位置に、第1マスク用の無色のオブジェクトが配置される。すると、第1仮想カメラから第1マスク用の無色のオブジェクトまでの距離を算出する処理が、CPU7により実行される。具体的には、第1仮想カメラから第1マスク用の無色のオブジェクトの各ポリゴンの各頂点までの第1距離を算出する処理が、CPU7により実行される。そして、ここで算出された第1仮想カメラから各ポリゴンの各頂点までの第1距離を用いて、第1仮想カメラから、各ポリゴンの各頂点を除く位置までの第2距離を線形補間により算出する処理が、CPU7により実行される。このようにして算出された、第1仮想カメラから第1マスク用のオブジェクトの表面まで距離(第1距離および第2距離)に基づいて、第1マスク用の深度データが、Zバッファに格納される。
また、この手段では、第2仮想カメラと第2撮影空間SS2の内部のオブジェクトとの間における上記の第1位置とは異なる第2位置に、第2マスク用の無色のオブジェクトが配置される。すると、第2仮想カメラから第2マスク用の無色のオブジェクトまでの距離を算出する処理が、CPU7により実行される。具体的には、第2仮想カメラから第2マスク用の無色のオブジェクトの各ポリゴンの各頂点までの第3距離を算出する処理が、CPU7により実行される。そして、ここで算出された第2仮想カメラから各ポリゴンの各頂点までの第3距離を用いて、第2仮想カメラから、各ポリゴンの各頂点を除く位置までの第4距離を線形補間により算出する処理が、CPU7により実行される。このようにして算出された第2仮想カメラから第2マスク用のオブジェクトの表面まで距離(第3距離および第4距離)に基づいて、第2マスク用の深度データが、Zバッファに格納される。
なお、ここでは、第2マスク用の無色のオブジェクトは、第1マスク用の無色のオブジェクトに重ならないように、第1撮影空間に配置される。
マスク画像格納手段54は、Zバッファに格納されたマスク用の深度データに基づいて、マスク用の無色の画像データを、フレームバッファに格納する機能を備えている。この手段では、Zバッファに格納されたマスク用の深度データに基づいて、マスク用の無色の画像データが、フレームバッファに格納される。
たとえば、この手段では、Zバッファに格納された第1マスク用の深度データに基づいて、第1マスク用の無色のオブジェクトに対応する第1マスク用の無色の画像データが、フレームバッファに格納される。また、たとえば、この手段では、Zバッファに格納された第2マスク用の深度データに基づいて、第2マスク用の無色のオブジェクトに対応する第2マスク用の無色の画像データが、フレームバッファに格納される。
具体的には、第1マスク用の無色のオブジェクトは、第1撮影空間において、第1仮想カメラと第1撮影空間の内部のオブジェクトとの間に配置される。このため、第1マスク用の深度データの値は、後述する第1撮影空間の内部のオブジェクトの深度データの値より、常に大きな値になる。これにより、第1マスク用の無色のオブジェクトは、第1仮想カメラから見て常に手前に位置するオブジェクトとして、CPU7に認識される。このため、フレームバッファMFが更新されたときには、第1マスク用の無色のオブジェクトに対応する画像データは、無色情報を有する画像データとして、必ずフレームバッファに格納される。また、第2マスク用の無色のオブジェクトに対応する画像データも、第1マスク用の無色のオブジェクトに対応する画像データと同様に、無色情報を有する画像データとして、必ずフレームバッファに格納される。
第2深度データ格納手段55は、モニタ20の所定の範囲を除く範囲にオブジェクトを表示するためのオブジェクト用の深度データを、Zバッファに格納する機能を備えている。
この手段では、モニタ20の所定の範囲を除く範囲にオブジェクトを表示するためのオブジェクト用の深度データが、Zバッファに格納される。この手段では、第1仮想カメラから見た第1撮影空間のオブジェクト用の深度データが、Zバッファに格納される。また、この手段では、第2仮想カメラから見た第2撮影空間SS2のオブジェクト用の深度データが、Zバッファに格納される。
この手段では、第1撮影空間に第1マスク用の無色のオブジェクトが配置された後に、第1撮影空間の内部にオブジェクトを配置する命令がCPU7から発行されると、第1撮影空間の内部の所定の位置にオブジェクトが配置される。すると、第1仮想カメラから第1撮影空間の内部のオブジェクトまでの距離を算出する処理が、CPU7により実行される。具体的には、第1仮想カメラから第1撮影空間の内部のオブジェクトの各ポリゴンの各頂点までの第5距離を算出する処理が、CPU7により実行される。そして、ここで算出された第1仮想カメラから各ポリゴンの各頂点までの第5距離を用いて、第1仮想カメラから、各ポリゴンの各頂点を除く位置までの第6距離を線形補間により算出する処理が、CPU7により実行される。このようにして算出された、第1仮想カメラから第1撮影空間の内部のオブジェクトの表面まで距離(第5距離および第6距離)に基づいて、第1撮影空間の内部のオブジェクト用の深度データが、Zバッファに格納される。
また、この手段では、第2撮影空間SS2に第2マスク用の無色のオブジェクトが配置された後に、第2撮影空間SS2の内部にオブジェクトを配置する命令がCPU7から発行されると、第2撮影空間SS2の内部の所定の位置にオブジェクトが配置される。すると、第2仮想カメラから第2撮影空間SS2の内部のオブジェクトまでの距離を算出する処理が、CPU7により実行される。具体的には、第2仮想カメラから第2撮影空間SS2の内部のオブジェクトの各ポリゴンの各頂点までの第7距離を算出する処理が、CPU7により実行される。そして、ここで算出された第2仮想カメラから各ポリゴンの各頂点までの第7距離を用いて、第2仮想カメラから、各ポリゴンの各頂点を除く位置までの第8距離を線形補間により算出する処理が、CPU7により実行される。このようにして算出された、第2仮想カメラから第2撮影空間SS2の内部のオブジェクトの表面まで距離(第7距離および第8距離)に基づいて、第2撮影空間SS2の内部のオブジェクト用の深度データが、Zバッファに格納される。
オブジェクト画像格納手段56は、Zバッファに格納されたオブジェクト用の深度データに基づいて、オブジェクト用の画像データを、フレームバッファに格納する機能を備えている。この手段では、Zバッファに格納されたオブジェクト用の深度データに基づいて、オブジェクト用の画像データが、フレームバッファに格納される。
この手段では、Zバッファに格納された第1撮影空間のオブジェクト用の深度データに基づいて、第1仮想カメラから見た第1撮影空間のオブジェクトに対応する、オブジェクト用の画像データが、フレームバッファに格納される。また、この手段では、Zバッファに格納された第2撮影空間SS2のオブジェクト用の深度データに基づいて、第2仮想カメラから見た第2撮影空間SS2のオブジェクトに対応する、オブジェクト用の画像データが、フレームバッファに格納される。
具体的には、ZバッファをCPU7に参照させ、第1撮影空間のオブジェクト用の深度データに対応するように、オブジェクト用の画像データが、フレームバッファに格納される。ここでフレームバッファに格納されるオブジェクト用の画像データは、色情報を有している。また、ZバッファをCPU7に参照させ、第2撮影空間SS2のオブジェクト用の深度データに対応するように、オブジェクト用の画像データが、フレームバッファに格納される。ここでフレームバッファに格納されるオブジェクト用の画像データは、色情報を有している。
オブジェクト描画手段57は、フレームバッファに格納された、オブジェクト用の画像データを用いて、オブジェクトを描画する機能を備えている。この手段では、フレームバッファに格納されたオブジェクト用の画像データを用いて、オブジェクトが描画される。
たとえば、この手段では、フレームバッファに格納されたオブジェクト用の画像データが、CPU7からの描画命令に基づいて、モニタ20に供給され画像として描画される。これにより、第1撮影空間の画像と第2撮影空間SS2の画像とを、1つのモニタ20において同時に表示することができる。
〔画像処理システムの説明と処理フロー〕
次に、画像処理システムについて説明する。また、図8に示すフローについても同時に説明する。
まず、家庭用コンピュータの電源が投入され家庭用コンピュータが起動されると、画像処理プログラムが、記録媒体10からRAM12bにロードされ格納される。また、画像処理を実行する上で必要となる各種の基本データが、記録媒体10からRAM12bにロードされ格納される(S1)。そして、RAM12bに格納された基本データが、CPU7に認識される。
基本データには、たとえば、3次元仮想空間に配置されるモデル(オブジェクト)のモデルデータが、含まれている。このモデルデータには、以下に示すポリゴンデータおよび各モデルを3次元仮想空間に配置するための位置座標データが含まれている。ここでは、三角形状のポリゴンを用いることにより、モデルが形成される。すなわち、モデルの表面が、複数の微小な三角形状のポリゴンにより構成されている。このポリゴンの情報を規定するためのポリゴンデータは、モデルを構成する各ポリゴンの頂点Cを規定するための座標データPX、各ポリゴンの色を規定するための色データPI、および各ポリゴンのテクスチャを規定するためのテクスチャデータPTを有している。なお、後述するように各モデル(オブジェクト)を3次元仮想空間に配置されたときには、各モデル(オブジェクト)のポリゴンデータが、CPU7に認識される。
色データPI(RGBデータ又はRGBAデータ)は、ポリゴンの頂点に定義されている。たとえば、あるポリゴンの3つの頂点のRGBデータが同じ値である場合、このポリゴンには、3つの頂点のRGBデータに対応する色が設定される。また、あるポリゴンの3つの頂点のRGBデータが異なる値である場合、このポリゴンには、3つの頂点それぞれのRGBデータに対応する色を基準として、ポリゴンの内部の色が連続的に変化するようにグラデーション処理が、CPU7により実行される。このようにして、ポリゴンに色が設定される。
テクスチャデータPTは、ポリゴンの表面に貼り付けられる模様データである。このテクスチャデータPTをポリゴンの表面にマッピングすることにより、モデルの表面の模様や質感が表現される。たとえば、テクスチャ画像の4つの頂点それぞれを、隣接した2つの三角形のポリゴンの4つの頂点それぞれに対応づける処理をCPU7に実行させることにより、テクスチャデータをポリゴンの表面にマッピングすることができる。
なお、マスク用の無色のオブジェクトに対応するマスク用の無色の画像データが、フレームバッファMFに格納する場合の例が示される。このため、マスク用の無色のオブジェクト用の色データPIとしては、RGBAデータが用いられる。RGBAデータの「A」は、アルファチャンネル(Alpha)の略である。アルファチャンネルは、透明度を表現するものである。マスク用の無色の画像データに対しては、RGBAデータのアルファチャンネルAの値が「0(ゼロ)」に設定される。
以下では、後述する第1撮影空間SS1に第1モデルM1(第1オブジェクト)が配置され、後述する第2撮影空間SS2に第2モデルM2(第2オブジェクト)が配置される場合の例が示される。なお、第1モデルM1は、顔の形状を有するオブジェクトになっており、第2モデルM2は、太陽の形状を有するオブジェクトになっている(図3を参照)。
続いて、3次元仮想空間における仮想カメラ位置を示す座標データをCPU7に認識させることにより、図3に示すように、仮想カメラC1,C2が、3次元仮想空間に設定される(S2)。たとえば、第1仮想カメラ用の座標データおよび第2仮想カメラ用の座標データをCPU7に認識させることにより、第1仮想カメラC1および第2仮想カメラC2が、3次元仮想空間に配置される。
ここでは、3次元仮想空間に配置される第1仮想カメラC1および第2仮想カメラC2の視線方向および視野角は、画像処理プログラムにおいて予め規定されており、所定の方向および所定の角度に設定されている。なお、第1仮想カメラC1および第2仮想カメラC2の視線方向および視野角は、ユーザが任意に設定することができるようにしても良い。
すると、3次元仮想空間において、仮想カメラの撮影対象となる撮影空間SS1,SS2が、CPU7により規定される(S3)。たとえば、第1撮影空間SS1は、第1仮想カメラC1側の面VS1(第1面)およびカメラから離反する側の面VS2(第2面)を所定の位置に設定することにより規定される。ここで、第1面VS1および第2面VS2が設定されると、第1面VS1と第2面VS2との間の空間が、6面体形状の第1撮影空間SS1として設定される。すると、第1撮影空間SS1の8つの隅角部の位置を示す座標データがCPU7に認識される。このようにして、第1撮影空間SS1を3次元仮想空間に設定することができる。また、この第1撮影空間SS1の設定形態と同様に、第2撮影空間SS2も3次元仮想空間に設定される。
ここでは、第1撮影空間SS1および第2撮影空間SS2を規定するための第1面VS1の位置および第2面VS2の位置は、画像処理プログラムにおいて予め規定されている。たとえば、第1面VS1の位置および第2面VS2は、各仮想カメラの位置を基準として、各仮想カメラから所定の距離を隔てた位置に設定される。すなわち、各仮想カメラから第1面VS1までの距離データ、および各仮想カメラから第2面VS2までの距離データが、RAM12bに予め格納されており、この距離データをCPU7に認識させることにより、第1面VS1および第2面VS2を設定することができる。
上記のように、第1仮想カメラC1の位置および第1仮想カメラC1に対応する第1撮影空間SS1の範囲と、第2仮想カメラC2の位置および第2仮想カメラC2に対応する第2撮影空間SS2の範囲とが設定されると、ZバッファMZに格納された全ての深度データSDをゼロクリアする命令が、CPU7から発行され、ZバッファMZに格納された全ての深度データSDに「0(ゼロ)」を代入する処理が、CPU7により実行される。このようにして、ZバッファMZが初期化される(S4)。
そして、第1仮想カメラC1と第1撮影空間SS1の内部の第1モデルM1との間における第1撮影空間SS1の第1位置に、第1マスク用の無色のオブジェクトB1が配置される(S5)。たとえば、第1撮影空間SS1の第1仮想カメラC1側の面すなわち第1撮影空間SS1の第1面VS1に、第1マスク用の無色のオブジェクトB1が配置される。具体的には、図3に示すように、第1撮影空間SS1の矩形状の第1面VS1に、三角形状の第1マスク用の無色のオブジェクトB1が、配置される。この三角形状の第1マスク用の無色のオブジェクトB1の3つの頂点それぞれの座標データは、第1撮影空間SS1の矩形状の第1面VS1の3つの頂点それぞれ座標データに対応している。言い換えると、三角形状の第1マスク用の無色のオブジェクトB1の3つの頂点それぞれの座標データが、第1面VS1の境界である、下辺、第1仮想カメラC1から見た左辺、および対角線によって形成される直角三角形の3つの頂点それぞれ座標データに対応している。これにより、第1撮影空間SS1の矩形状の第1面VS1の3つの頂点を結ぶ領域(第1面VS1の直角三角形の領域)が、第1マスク用の無色のオブジェクトB1によりマスクされる。
すると、図4に示すように、第1仮想カメラC1から第1マスク用の無色のオブジェクトB1までの距離を算出する処理が、CPU7により実行される。図4は、ある点CからあるポリゴンPの表面までの距離を算出する方法を示した概念図である。たとえば、第1仮想カメラC1から第1マスク用の無色のオブジェクトB1の各ポリゴンの各頂点までの第1距離(図4ではL11,L12,L13)を算出する処理が、CPU7により実行される。また、ここで算出された第1仮想カメラC1から各ポリゴンの各頂点P1,P2,P3までの第1距離(図4ではL11,L12,L13)を用いて、第1仮想カメラC1から、各ポリゴンの各頂点P1,P2,P3を除く位置(図4ではX印、および図示しないポリゴンの内部の各点)までの第2距離を線形補間により算出する処理が、CPU7により実行される。すなわち、図4では、この第2距離は、第1仮想カメラC1から、頂点P1,P2,P3と頂点P2,P3,P1との間の点(X印)までの距離、および第1仮想カメラC1から、ポリゴンの内部の点(図示しない)までの距離に対応している。このようにして算出された、第1仮想カメラC1から第1マスク用のオブジェクトの表面まで距離(第1距離および第2距離)に基づいて、第1マスク用の深度データSD1が、ZバッファMZに格納される(S6、図5を参照)。
ここでは、たとえば、第1仮想カメラC1の位置から第1面VS1又は第2面VS2の重心に向かう直線、すなわち第1仮想カメラC1の視線方向の直線と、ここで算出された第1仮想カメラC1からオブジェクトの表面の各点に向かう直線とがなす角度ALが、CPU7により算出される。すると、この角度ALおよび第1距離L1(図4では「L11,L12,L13」、又は第2距離)を、「LT=L1・cos(AL)」に代入することにより、第1仮想カメラC1からオブジェクトの表面の各点までの垂直距離LTが算出される。そして、この垂直距離LTを、第1仮想カメラC1から第2面VS2までの垂直距離から減算することにより、第2面VS2からオブジェクトの表面の各点までの垂直距離、すなわち第1マスク用の深度データSD1が、算出される。そして、この第1マスク用の深度データSD1が、ZバッファMZに格納される。
図5は、ZバッファMZの内部の状態を示す概念図、およびZバッファMZを参照して形成されたフレームバッファMFの内部の状態を示す概念図である。この図5では、第1マスク用の深度データSD1が書き込まれた部分が、左下がりの斜線で示されている。図5におけるZバッファMZの斜線の部分には、上記の処理で算出された第1マスク用の深度データSD1すなわち深度データの数値が書き込まれている。また、図5の白抜きの部分には、「0(ゼロ)」が書き込まれている。
そして、フレームバッファMFを更新する命令がCPU7から発行されると、ZバッファMZに格納された第1マスク用の深度データSD1に基づいて、第1マスク用の無色のオブジェクトB1に対応する第1マスク用の無色の画像データGD1が、フレームバッファMFに格納される(S7)。
詳細には、ZバッファMZにおいて数値が更新されたドット位置、たとえばZバッファMZにおいて初期値(=「0(ゼロ)」)より大きな値に変更されたドット位置が、CPU7に認識される。たとえば、ドット位置を示すアドレスを(i,j)とすると、Zバッファに格納される数値は、「DZ(i,j)」と記載することができる。この数値DZ(i,j)の値が更新された位置、すなわち「DZ(i,j)>0」の値を有する位置DX(i,j)が、CPU7に認識される。すると、フレームバッファMFを更新する命令が発行される。すると、この位置DX(i,j)に対応するフレームバッファMFのドット位置に、第1マスク用の無色のオブジェクトB1に対応する第1マスク用の無色の画像データGD1が格納される。このような処理が、ZバッファMZにおいて数値が更新されるごとにCPU7により実行される。すると、第1マスク用の無色のオブジェクトが存在する部分に対応する第1マスク用の無色の画像データGD1が、フレームバッファMFに格納される。
なお、ここでは、第1マスク用の無色のオブジェクトB1が、第1撮影空間SS1の第1面VS1に配置されている。このため、第1マスク用の深度データSD1の値は、後述する第1撮影空間SS1の内部の第1モデルM1の深度データSDの値より、常に大きな値になる。これにより、第1マスク用の無色のオブジェクトB1は、第1仮想カメラC1から見て常に手前に位置するオブジェクトとして、CPU7に認識される。このため、フレームバッファMFが更新されたときには、第1マスク用の無色のオブジェクトB1に対応する画像データは、無色情報を有する画像データとして、必ずフレームバッファMFに格納されることになる。ここで、無色情報は、RGBAデータのアルファチャンネルAの値を「0(ゼロ)」に設定することにより定義される。
続いて、第1撮影空間SS1の内部に第1モデルM1を配置する命令がCPU7から発行される。すると、図3に示すように、第1撮影空間SS1の内部の所定の位置に第1モデルM1が配置される(S8)。すると、図4を用いて上記で説明したように、第1仮想カメラC1から第1撮影空間SS1の第1モデルM1までの距離を算出する処理が、CPU7により実行される。具体的には、第1仮想カメラC1から第1撮影空間SS1の第1モデルM1の各ポリゴンの各頂点までの第5距離を算出する処理が、CPU7により実行される。そして、ここで算出された第1仮想カメラC1から各ポリゴンの各頂点までの第5距離を用いて、第1仮想カメラC1から、各ポリゴンの各頂点を除く位置までの第6距離を線形補間により算出する処理が、CPU7により実行される。このようにして算出された、第1仮想カメラC1から第1撮影空間SS1の第1モデルM1の表面まで距離(第5距離および第6距離)に基づいて、第1撮影空間SS1の第1モデル用の深度データSDM1が、ZバッファMZに格納される(S9、図5を参照)。なお、第1撮影空間SS1の第1モデル用の深度データSDM1は、上述した第1マスク用の深度データSD1の算出形態と同様にして、CPU7により算出される。
図5は、ZバッファMZの内部の状態を示す概念図、およびZバッファMZを参照して形成されたフレームバッファMFの内部の状態を示す概念図である。この図5では、第1モデル用の深度データSDM1が書き込まれた部分が、右下がりの斜線で示されている。図5におけるZバッファMZの斜線の部分には、上記の処理で算出された第1モデル用の深度データSDM1すなわち深度データの数値が書き込まれている。また、図5の白抜きの部分には、「0(ゼロ)」が書き込まれている。
そして、フレームバッファMFを更新する命令がCPU7から発行されると、ZバッファMZに格納された第1モデル用の深度データSDM1に基づいて、第1モデル用の画像データGDM1が、フレームバッファMFに格納される(S10)。
詳細には、ZバッファMZにおいて数値が更新されたドット位置、たとえばZバッファMZにおいて初期値(=「0(ゼロ)」)より大きな値に変更されたドット位置が、CPU7に認識される。たとえば、ドット位置を示すアドレスを(i,j)とすると、Zバッファに格納される数値は、「DZ(i,j)」と記載することができる。この数値DZ(i,j)の値が更新された位置、すなわち「DZ(i,j)>0」の値を有する位置DX(i,j)が、CPU7に認識される。すると、フレームバッファMFを更新する命令が発行される。すると、この位置DX(i,j)に対応するフレームバッファMFのドット位置に、第1モデルM1に対応する第1モデル用の画像データGDM1が格納される。このような処理が、ZバッファMZにおいて数値が更新されるごとにCPU7により実行される。すると、第1モデルM1が存在する部分に対応する第1モデル用の画像データGDM1が、フレームバッファMFに格納される。
なお、ここでは、ZバッファMZに格納された第1撮影空間SS1の第1モデル用の深度データSDM1に基づいて、第1仮想カメラC1から見た第1撮影空間SS1の第1モデルM1に対応する第1モデル用の画像データGDM1が、フレームバッファMFに格納される。具体的には、ZバッファMZをCPU7に参照させ、ZバッファMZにおける、深度データSDが「0(ゼロ)」以外の値である位置、すなわち深度データSDが「0(ゼロ)」でない位置が、CPU7に認識される。そして、この深度データSDが「0(ゼロ)」でない位置に対応するフレームバッファMFの位置に、第1モデル用の画像データGDM1が格納される。ここでは、第1モデル用の画像データGDM1は、色情報を有する画像データとして、フレームバッファMFに格納される。たとえば、色情報は、RGBAデータにより定義される。
なお、ここでは、ZバッファMZに格納された第1モデル用の各深度データSDM1に対応する位置に、第1モデル用の各ドットデータが格納される。この第1モデル用の各ドットデータは、画像データGDM1に含まれている。
続いて、上記のステップ4(S4)で説明したように、ZバッファMZに格納された全ての深度データSDをゼロクリアする命令が、CPU7から再発行され、ZバッファMZに格納された全ての深度データSDに「0(ゼロ)」を代入する処理が、CPU7により再実行される。このようにして、ZバッファMZが再び初期化される(S11)。
そして、第2仮想カメラC2と第2撮影空間SS2の内部の第2モデルM2との間における第2撮影空間SS2の第2位置に、第2マスク用の無色のオブジェクトB2が配置される(S12)。たとえば、図3に示すように、第2撮影空間SS2の第2仮想カメラC2側の面すなわち第2撮影空間SS2の第1面VS1に、第2マスク用の無色のオブジェクトB2が配置される。具体的には、第2撮影空間SS2の矩形状の第1面VS1に、三角形状の第2マスク用の無色のオブジェクトB2が、配置される。この三角形状の第2マスク用の無色のオブジェクトB2の3つの頂点それぞれの座標データは、第2撮影空間SS2の矩形状の第1面VS1の3つの頂点それぞれ座標データに対応している。言い換えると、三角形状の第2マスク用の無色のオブジェクトB2の3つの頂点それぞれの座標データが、第1面VS1の境界である、下辺、第1仮想カメラC1から見た右辺、および対角線によって形成される直角三角形の3つの頂点それぞれ座標データに対応している。これにより、第2撮影空間SS2の矩形状の第1面VS1の3つの頂点を結ぶ領域(第1面VS1の直角三角形の領域)が、第2マスク用の無色のオブジェクトB2によりマスクされる。
すると、第2仮想カメラC2から第2マスク用の無色のオブジェクトB2までの距離を算出する処理が、CPU7により実行される。たとえば、図4を用いて上記で説明したように、第2仮想カメラC2から第2マスク用の無色のオブジェクトB2の各ポリゴンの各頂点までの第3距離を算出する処理が、CPU7により実行される。そして、ここで算出された第2仮想カメラC2から各ポリゴンの各頂点までの第3距離を用いて、第2仮想カメラC2から、各ポリゴンの各頂点を除く位置までの第4距離を線形補間により算出する処理が、CPU7により実行される。このようにして算出された、第2仮想カメラC2から第2マスク用のオブジェクトの表面まで距離(第3距離および第4距離)に基づいて、第2マスク用の深度データSD2が、ZバッファMZに格納される(S13、図6を参照)。なお、第2マスク用の深度データSD2は、上述した第1マスク用の深度データSD1の算出形態と同様にして、CPU7により算出される。
図6は、ZバッファMZの内部の状態を示す概念図、およびZバッファMZを参照して形成されたフレームバッファMFの内部の状態を示す概念図である。この図6では、第2マスク用の深度データSD2が書き込まれた部分が、左下がりの斜線で示されている。図6におけるZバッファMZの斜線の部分には、上記の処理で算出された第2マスク用の深度データSD2すなわち深度データの数値が書き込まれている。また、図6の白抜きの部分には、「0(ゼロ)」が書き込まれている。
そして、フレームバッファMFを更新する命令がCPU7から発行されると、ZバッファMZに格納された第2マスク用の深度データSD2に基づいて、第2マスク用の無色のオブジェクトB2に対応する第2マスク用の無色の画像データGD2が、フレームバッファMFに格納される(S14)。
詳細には、ZバッファMZにおいて数値が更新されたドット位置、たとえばZバッファMZにおいて初期値(=「0(ゼロ)」)より大きな値に変更されたドット位置が、CPU7に認識される。たとえば、ドット位置を示すアドレスを(i,j)とすると、Zバッファに格納される数値は、「DZ(i,j)」と記載することができる。この数値DZ(i,j)の値が更新された位置、すなわち「DZ(i,j)>0」の値を有する位置DX(i,j)が、CPU7に認識される。すると、フレームバッファMFを更新する命令が発行される。すると、この位置DX(i,j)に対応するフレームバッファMFのドット位置に、第2マスク用の無色のオブジェクトB2に対応する第2マスク用の無色の画像データGD2が格納される。このような処理が、ZバッファMZにおいて数値が更新されるごとにCPU7により実行される。すると、第2マスク用の無色のオブジェクトが存在する部分に対応する第2マスク用の無色の画像データGD2が、フレームバッファMFに格納される。
なお、ここでは、第2マスク用の無色のオブジェクトB2は、第2撮影空間SS2の第1面VS1に配置されている。このため、第2マスク用の深度データSD2の値は、後述する第2撮影空間SS2の内部の第2モデルM2の深度データSDの値より、常に大きな値になる。これにより、第2マスク用の無色のオブジェクトB2は、第2仮想カメラC2から見て常に手前に位置するオブジェクトとして、CPU7に認識される。このため、フレームバッファMFが更新されたときには、第2マスク用の無色のオブジェクトB2に対応する画像データGD2は、無色情報を有する画像データとして、必ずフレームバッファMFに格納されることになる。ここで、無色情報は、RGBAデータのアルファチャンネルAの値を「0(ゼロ)」に設定することにより定義される。
続いて、第2撮影空間SS2の内部に第2モデルM2を配置する命令がCPU7から発行される。すると、第2撮影空間SS2の内部の所定の位置に第2モデルM2が配置される(S15)。すると、図4を用いて上記で説明したように、第2仮想カメラC2から第2撮影空間SS2の第2モデルM2までの距離を算出する処理が、CPU7により実行される。具体的には、第2仮想カメラC2から第2撮影空間SS2の第2モデルM2の各ポリゴンの各頂点までの第7距離を算出する処理が、CPU7により実行される。そして、ここで算出された第2仮想カメラC2から各ポリゴンの各頂点までの第7距離を用いて、第1仮想カメラC1から、各ポリゴンの各頂点を除く位置までの第8距離を線形補間により算出する処理が、CPU7により実行される。このようにして算出された、第2仮想カメラC2から第2撮影空間SS2の第2モデルM2の表面まで距離(第7距離および第8距離)に基づいて、第2撮影空間SS2の第2モデル用の深度データSDM2が、ZバッファMZに格納される(S16、図6を参照)。なお、第2撮影空間SS2の第2モデル用の深度データSDM2は、上述した第1マスク用の深度データSD1の算出形態と同様にして、CPU7により算出される。
図6は、ZバッファMZの内部の状態を示す概念図、およびZバッファMZを参照して形成されたフレームバッファMFの内部の状態を示す概念図である。この図6では、第2モデル用の深度データSDM2が書き込まれた部分が、右下がりの斜線で示されている。図6におけるZバッファMZの斜線の部分には、上記の処理で算出された第2モデル用の深度データSDM2すなわち深度データの数値が書き込まれている。また、図6の白抜きの部分には、「0(ゼロ)」が書き込まれている。
そして、フレームバッファMFを更新する命令がCPU7から発行されると、ZバッファMZに格納された第2モデル用の深度データSDに基づいて、第2モデル用の画像データGDM2が、フレームバッファMFに格納される(S17)。
詳細には、ZバッファMZにおいて数値が更新されたドット位置、たとえばZバッファMZにおいて初期値(=「0(ゼロ)」)より大きな値に変更されたドット位置が、CPU7に認識される。たとえば、ドット位置を示すアドレスを(i,j)とすると、Zバッファに格納される数値は、「DZ(i,j)」と記載することができる。この数値DZ(i,j)の値が更新された位置、すなわち「DZ(i,j)>0」の値を有する位置DX(i,j)が、CPU7に認識される。すると、フレームバッファMFを更新する命令が発行される。すると、この位置DX(i,j)に対応するフレームバッファMFのドット位置に、第2モデルM2に対応する第2モデル用の画像データGDM2が格納される。このような処理が、ZバッファMZにおいて数値が更新されるごとにCPU7により実行される。すると、第2モデルM2が存在する部分に対応する第2モデル用の画像データGDM2が、フレームバッファMFに格納される。
ここでは、ZバッファMZに格納された第2撮影空間SS2の第2モデル用の深度データSDM2に基づいて、第2仮想カメラC2から見た第2撮影空間SS2の第2モデルM2に対応する第2モデル用の画像データGDM2が、フレームバッファMFに格納される。具体的には、ZバッファMZをCPU7に参照させ、ZバッファMZにおける、深度データSDが「0(ゼロ)」以外の値である位置、すなわち深度データSDが「0(ゼロ)」でない位置が、CPU7に認識される。そして、この深度データSDが「0(ゼロ)」でない位置に対応するフレームバッファMFの位置に、第2モデル用の画像データGDM2が格納される。ここでは、第2モデル用の画像データGDM2は、色情報を有する画像データとして、フレームバッファMFに格納される。たとえば、色情報は、RGBAデータにより定義される。
なお、ここでは、ZバッファMZに格納された第2モデル用の各深度データSDM2に対応する位置に、第2モデル用の各ドットデータが格納される。この第2モデル用の各ドットデータは、画像データGDM2に含まれている。
すると、フレームバッファMFに格納された第1モデル用の画像データGDM1および第2モデル用の画像データGDM2が、CPU7からの描画命令に基づいて、モニタ20に供給され画像として描画される。たとえば、図7に示すように、モニタ20の上部の直角三角形の領域に第1モデル用の第1画面D1が表示され、モニタ20の下部の直角三角形の領域に、第2モデル用の第2画面D2が表示される(S18)。
上記のような処理を1フレームごとに繰り返し実行することにより、モニタ20に第1画面D1および第2画面D2を設定することができる。また、上記のような処理を1フレームごとに繰り返し実行することにより、撮影空間SS1,SS2においてモデルが移動したり、撮影空間SS1,SS2においてあるモデルが他のモデルに置き換えられたりしたとしても、モニタ20の各画面D1,D2にモデルを表示することができる。
上記のように、本実施形態では、Zバッファを利用することにより、第1画面および第2画面を設定することができ、これら画面にオブジェクトを表示することができる。また、レンダリングバッファを用意しなくても、Zバッファからフレームバッファに直接的に画像データを格納することができるので、メモリ容量を圧迫することなく、オブジェクトを新規の画面に表示することができる。このように、本願発明が適用された実施形態では、メモリを圧迫することなく、複数の画面を任意の形状で自由に形成することができる。
〔他の実施形態〕
(a)前記実施形態では、画像処理プログラムを適用しうるコンピュータの一例としての家庭用コンピュータを用いた場合の例を示したが、コンピュータは、前記実施形態に限定されず、モニタが別体に構成された画像処理装置、モニタが一体に構成された画像処理装置、画像処理プログラムを実行することによって画像処理装置として機能するパーソナルコンピュータやワークステーションなどにも同様に適用することができる。
(b)本発明には、前述したような画像処理プログラムおよびこのプログラムを記録したコンピュータ読み取り可能な記録媒体も含まれる。この記録媒体としては、カートリッジ以外に、たとえば、コンピュータ読み取り可能なフレキシブルディスク、半導体メモリ、CD−ROM、DVD、MO、ROMカセット、その他のものが挙げられる。
(c)前記実施形態では、マスク用の深度データSD(第1マスク用の深度データSD1および第2マスク用の深度データSD2)がZバッファMZに格納された後に、フレームバッファMFを更新する命令がCPU7から発行される場合の例を示したが、マスク用の深度データSDがZバッファMZに格納された後に、フレームバッファMFを更新する命令を発行する処理を必ずしも実行する必要はない。この場合、マスク用の深度データSDに対応する、マスク用の画像データがフレームバッファMFに格納されないことになるが、マスク用の画像データがフレームバッファMFに格納されなかったとしても、本発明は実現することができる。また、この場合、色データPIとしては、RGBAデータだけでなく、RGBデータも用いることができる。
(d)前記実施形態では、2つの仮想カメラ(第1仮想カメラC1、第2仮想カメラC2)が用いられる場合の例を示したが、仮想カメラの数は、前記実施形態に限定されず、どのようにしても良い。たとえば、3次元仮想空間に複数の仮想カメラを設置した場合、複数の仮想カメラそれぞれに撮影された複数の画面が、モニタ20に表示される。