(57)【要約】【課題】処理コストの増大を抑えつつ、Ｚバッファの誤差によるちらつきを防止することができる画像処理装置を提供すること。【解決手段】透視投影変換およびＺバッファによる深度比較を用いて３次元仮想空間の描画を行う画像処理において、まず、一度の描画処理における描画対象のポリゴンを第１種ポリゴンと第２種ポリゴンに分類する。次に、第１種ポリゴンを対象として描画処理を行う。次に、クリップ空間のニア値およびファー値の少なくともいずれかを、第１種ポリゴンを描画処理したときの値とは異なる値に設定する。そして、当該設定後のファー値、ニア値によるクリップ空間を用いて第２種ポリゴンの描画処理を実行する。【選択図】図１９
2010191916.tif 000002
【特許請求の範囲】
【請求項１】
透視投影変換およびＺバッファによる深度比較を用いて３次元仮想空間の描画を行う画像処理装置であって、
一度の描画処理における描画対象のポリゴンのうち、第１の種別に分類される第１種ポリゴンの描画処理を実行する第１描画手段と、
前記Ｚバッファによる深度比較において用いられる奥行き値が前記第１描画処理で算出される値よりも仮想カメラ側に近づいた値となるように、前記透視斜影変換における当該奥行き値の算出に用いるパラメタを変更する算出パラメタ変更手段と、
前記算出パラメタ変更手段によって変更されたパラメタを用いて、前記一度の描画処理における描画対象のポリゴンのうち、第２の種別に分類される第２種ポリゴンの描画処理を実行する第２描画手段とを備える、画像処理装置。
【請求項２】
前記算出パラメタ変更手段は、前記第１描画手段において用いられたニアクリップ面およびファークリップ面の少なくとも一方の位置を変更する、請求項１に記載の画像処理装置。
【請求項３】
前記算出パラメタ変更手段は、前記ニアクリップ面およびファークリップ面の少なくとも一方の位置を仮想カメラから遠ざかる方向へ変更する、請求項２に記載の画像処理装置。
【請求項４】
前記算出パラメタ変更手段は、透視投影変換において算出される奥行き値に加えるための所定のオフセット値を設定することで前記算出パラメタの変更を実行する、請求項１に記載の画像処理装置。
【請求項５】
前記算出パラメタ変更手段は、透視投影変換のために割り当てわれるＺバッファの範囲を示すパラメタを変更することによって前記オフセット値の設定を行う、請求項４記載の画像処理装置。
【請求項６】
前記第２描画手段は、前記第２種ポリゴンを半透明で表示されるように描画する、請求項１に記載の画像処理装置。
【請求項７】
前記第２種ポリゴンは、前記仮想空間内において、所定の第１種ポリゴンと近接する位置であって、かつ、より仮想カメラ側となる位置に配置される、請求項１に記載の画像処理装置。
【請求項８】
前記第１描画手段および第２描画手段における描画処理には、
ワールド空間内におけるポリゴンの座標をカメラ座標系の座標に変換する第１の変換処理と、
前記第１の変換処理によって変換されたカメラ座標系における座標を透視変換する第２の変換処理と、
前記透視変換後の座標をビューポート座標系の座標に変換する第３の変換処理と、
前記Ｚバッファを用いた深度比較に基づいてピクセルの描画を行うＺ比較処理とが含まれる、請求項１に記載の画像処理装置。
【請求項９】
透視投影変換およびＺバッファによる深度比較を用いて３次元仮想空間の描画を行う画像処理装置のコンピュータにおいて実行される画像処理プログラムであって、
前記コンピュータを、
一度の描画処理における描画対象のポリゴンのうち、第１の種別に分類される第１種ポリゴンの描画処理を実行する第１描画手段と、
前記Ｚバッファによる深度比較において用いられる奥行き値が前記第１描画処理で算出される値よりも仮想カメラ側に近づいた値となるように、前記透視斜影変換における当該奥行き値の算出に用いるパラメタを変更する算出パラメタ変更手段と、
前記算出パラメタ変更手段によって変更されたパラメタを用いて、前記一度の描画処理における描画対象のポリゴンのうち、第２の種別に分類される第２種ポリゴンの描画処理を実行する第２描画手段として機能させる、画像処理プログラム。
【請求項１０】
前記算出パラメタ変更手段は、前記第１描画手段において用いられたニアクリップ面およびファークリップ面の少なくとも一方の位置を変更する、請求項９に記載の画像処理プログラム。
【請求項１１】
前記算出パラメタ変更手段は、前記ニアクリップ面およびファークリップ面の少なくとも一方の位置を仮想カメラから遠ざかる方向へ変更する、請求項１０に記載の画像処理プログラム。
【請求項１２】
前記算出パラメタ変更手段は、透視投影変換において算出される奥行き値に加えるための所定のオフセット値を設定することで前記算出パラメタの変更を実行する、請求項９に記載の画像処理プログラム。
【請求項１３】
前記算出パラメタ変更手段は、透視投影変換のために割り当てわれるＺバッファの範囲を示すパラメタを変更することによって前記オフセット値の設定を行う、請求項１２記載の画像処理プログラム。
【請求項１４】
前記第２描画手段は、前記第２種ポリゴンを半透明で表示されるように描画する、請求項９に記載の画像処理プログラム。
【請求項１５】
前記第２種ポリゴンは、前記仮想空間内において、所定の第１種ポリゴンと近接する位置であって、かつ、より仮想カメラ側となる位置に配置される、請求項９に記載の画像処理プログラム。
【請求項１６】
前記第１描画手段および第２描画手段における描画処理には、
ワールド空間内におけるポリゴンの座標をカメラ座標系の座標に変換する第１の変換処理と、
前記第１の変換処理によって変換されたカメラ座標系における座標を透視変換する第２の変換処理と、
前記透視変換後の座標をビューポート座標系の座標に変換する第３の変換処理と、
前記Ｚバッファを用いた深度比較に基づいてピクセルの描画を行うＺ比較処理とが含まれる、請求項９に記載の画像処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、３次元画像の画像処理に関し、より特定的には、透視投影変換およびＺバッファによる深度比較を用いて３次元仮想空間の描画を行う画像処理に関する。
【背景技術】
【０００２】
従来から、いわゆるＺバッファ法を用いて３次元画像を描画する手法が知られている。また、３次元画像における影や境界部分の表現技法の１つとして、影や境界部分に相当するポリゴンを用意し、少し浮かせた状態で描画するという手法がある。
【０００３】
例えば、３次元仮想空間内で風車のオブジェクトと、その影を表現する場合は、図２４に示すように、地面の上に風車オブジェクト９０１を配置する。また、別途影のポリゴン９０２を生成し、地面から少しだけ浮かせた位置に配置して（影の配置位置は、光源を考慮した演算で別途算出されている）、描画処理（レンダリング）を行う。これにより、風車オブジェクトと、その影とが描画されて、リアルな３次元画像ができあがる。
【０００４】
また、例えば、道路と芝生との境界部分を目立たなくする目的で、この境界部分に境界をぼかすためのポリゴンをかぶせるように配置して描画処理を行うことも行われている。
【０００５】
ここで、一般的には、３次元画像を描画する過程（いわゆるレンダリングパイプライン）は、頂点シェーダ、ラスタライザ、ピクセルシェーダの３工程に分けられる。そして、頂点シェーダでは、各種座標変換処理が実行されるが、この中の透視斜影変換と呼ばれる（あるいはプロジェクション変換とも呼ばれる）処理において、スクリーンからの奥行き値を示すＺ値が算出される。このとき、次のような式を用いてＺ値を算出することが一般的である。
Ｚ値＝１＋Ｎ×（１＋Ｆ／Ｃｚ）／（Ｆ−Ｎ）  ・・・式１
なお、変数Ｃｚはカメラ空間座標におけるＺ成分（画面奥行き方向を負の値とする）である。また、変数Ｎは透視射影変換におけるクリップ面のニア値を示し、変数Ｆは透視射影変換におけるクリップ面のファー値を示す。
【０００６】
また、上記式１で算出されるＺ値と仮想カメラからの距離との関係は、例えば、図２５のようなグラフで表される。図２５において、縦軸はＺバッファ値、横軸は仮想カメラからの距離を示す。なお、図２５において縦軸は、０．９９９から１．０の範囲で示しているが、これは、０から１．０までの範囲を表記するとグラフがつぶれてしまい、解りづらくなるために、０．９９９から１．０までのグラフで示している）。また、横軸では、ニア値を１．０、ファー値を１２００００としている。そして、当該グラフでは、仮想カメラからの距離が離れるにつれて、Ｚ値の精度が低下していることが示されている（例えば、図２５の楕円９０３で囲まれた部分）。すなわち、グラフの傾きが非常に小さくなり、１個のＺ値に割り当てられるカメラからの距離の範囲が非常に大きなものになっている。
【０００７】
上述した影のポリゴンのような、少し浮かせたポリゴンの場合、地面と影のポリゴンとの距離は、極めて近い位置関係となっている。換言すれば、上記Ｚ値としては、近似した値が算出され得る。そのため、仮想カメラからの距離によっては（特に、仮想カメラから遠い場合）、上記のような精度の低さとＺバッファの分解能の限界によるＺバッファの誤差（Ｚバッファのビット数が有限である以上、丸め誤差などによる演算誤差が発生する）によって、図２４の例で言うと、影ポリゴンと地面（ポリゴン）と重なっている部分が同じＺ値となって交互に描画される、あるいは、これらの前後関係（奥行き関係）が逆転したりして、結果的に生成される３次元画像においては、図２６に示すように当該影等のポリゴンの部分にちらつきが生じてしまうという問題があった。
【０００８】
上記のようなＺバッファの誤差によるちらつきを解決する手法としては、例えば、特許文献１に開示されているような手法がある。当該特許文献１で示される３次元画像表示装置は、トゥーンレンダリングによる描画処理を行うものである。そして、当該装置では、オブジェクトの輪郭を抽出し、輪郭と判定された辺に対して輪郭線（正確には輪郭線ポリゴン。上記の少し浮かせたポリゴンに相当する）を描画している。そして、この輪郭線を描画する際に、輪郭線とオブジェクトとのちらつきを抑えるために、当該輪郭線について、外側方向に太さをもたせてから描画を行うという処理を実行している。つまり、輪郭線に太さをもたせることで、オブジェクトと重なる部分がないようにして輪郭線を描画している。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００５−１７３８６６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、上述したような３次元画像表示装置においては、以下に示す問題点があった。すなわち、上記装置では輪郭線に太さをもたせて描画を行っているが、換言すれば、上記装置では、輪郭線（ポリゴン）が太くなるように変形させる処理を行っている。そのため、当該輪郭線の変形のための処理コストが余分に必要となっていた。また、上記のようにちらつきを抑えるためにポリゴンの変形を行うと、その結果できあがった３次元画像が、開発者が当所意図していた画像や図柄とは異なった画像となってしまうという問題もある。
【００１１】
それ故に、本発明の目的は、処理コストの増大を抑えつつ、Ｚバッファの誤差によるちらつきを防止することができる画像処理装置を提供することである。
【課題を解決するための手段】
【００１２】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係の一例を示したものであって、本発明を何ら限定するものではない。
【００１３】
第１の発明は、透視投影変換およびＺバッファによる深度比較を用いて３次元仮想空間の描画を行う画像処理装置であって、第１描画手段（１０）と、算出パラメタ変更手段（１０）と、第２描画手段（１０）とを備える。第１描画手段は、一度の描画処理における描画対象のポリゴンのうち、第１の種別に分類される第１種ポリゴンの描画処理を実行する。算出パラメタ変更手段は、前記Ｚバッファによる深度比較において用いられる奥行き値が前記第１描画処理で算出される値よりも仮想カメラ側に近づいた値となるように、前記透視斜影変換における当該奥行き値の算出に用いるパラメタを変更する。第２描画手段は、前記算出パラメタ変更手段によって変更されたパラメタを用いて、前記一度の描画処理における描画対象のポリゴンのうち、第２の種別に分類される第２種ポリゴンの描画処理を実行する。
【００１４】
第１の発明によれば、Ｚバッファの誤差によるちらつきを防止して３次元画像を表示することができる。
【００１５】
第２の発明は、第１の発明において、算出パラメタ変更手段は、第１描画手段において用いられたニアクリップ面およびファークリップ面の少なくとも一方の位置を変更する。
【００１６】
第３の発明は、第２の発明において、算出パラメタ変更手段は、ニアクリップ面およびファークリップ面の少なくとも一方の位置を仮想カメラから遠ざかる方向へ変更する。
【００１７】
第２乃至３の発明によれば、ワールド空間におけるポリゴンモデルに変更を加えることなく、第２の描画処理における透視投影変換で算出される奥行き値について第１の描画処理で算出される奥行き値よりも、より仮想カメラ側に存在することを示す値を算出することが可能となる。
【００１８】
第４の発明は、第１の発明において、算出パラメタ変更手段は、透視投影変換において算出される奥行き値に加えるための所定のオフセット値を設定することで算出パラメタの変更を実行する。
【００１９】
第５の発明は、第４の発明において、算出パラメタ変更手段は、透視投影変換のために割り当てわれるＺバッファの範囲を示すパラメタを変更することによってオフセット値の設定を行う。
【００２０】
第４乃至第５の発明によれば、処理コストを高めることなく、Ｚバッファの誤差によるちらつきを防止することができる。
【００２１】
第６の発明は、第１の発明において、第２描画手段は、第２種ポリゴンを半透明で表示されるように描画する。
【００２２】
第６の発明によれば、より現実感のある３次元画像を描画することができる。
【００２３】
第７の発明は、第１の発明において、第２種ポリゴンは、仮想空間内において、所定の第１種ポリゴンと近接する位置であって、かつ、より仮想カメラ側となる位置に配置される。
【００２４】
第７の発明によれば、Ｚバッファによる深度比較において、所定の第２種ポリゴンが所定の第１種ポリゴンよりも仮想カメラ側にあるという判定をより確実に行わせることができる。
【００２５】
第８の発明は、第１の発明において、第１描画手段および第２描画手段における描画処理には、ワールド空間内におけるポリゴンの座標をカメラ座標系の座標に変換する第１の変換処理と、第１の変換処理によって変換されたカメラ座標系における座標を透視変換する第２の変換処理と、透視変換後の座標をビューポート座標系の座標に変換する第３の変換処理と、Ｚバッファを用いた深度比較に基づいてピクセルの描画を行うＺ比較処理とが含まれる。
【００２６】
第８の発明によれば、一般的に用いられている３次元画像描画処理を利用し、処理コストを高めることなく、Ｚバッファの誤差によるちらつきを防止して３次元画像を表示することができる。
【００２７】
第９の発明は、透視投影変換およびＺバッファによる深度比較を用いて３次元仮想空間の描画を行う画像処理装置のコンピュータにおいて実行される画像処理プログラムであって、コンピュータを、第１描画手段（Ｓ１１、Ｓ１２、Ｓ１３）と、算出パラメタ変更手段（Ｓ１４）と、第２描画手段（Ｓ１５、Ｓ１６）として機能させる。第１描画手段は、一度の描画処理における描画対象のポリゴンのうち、第１の種別に分類される第１種ポリゴンの描画処理を実行する。算出パラメタ変更手段は、Ｚバッファによる深度比較において用いられる奥行き値が第１描画処理で算出される値よりも仮想カメラ側に近づいた値となるように、透視斜影変換における当該奥行き値の算出に用いるパラメタを変更する。第２描画手段は、算出パラメタ変更手段によって変更されたパラメタを用いて、一度の描画処理における描画対象のポリゴンのうち、第２の種別に分類される第２種ポリゴンの描画処理を実行する。
【００２８】
第１０の発明は、第９の発明において、算出パラメタ変更手段は、第１描画手段において用いられたニアクリップ面およびファークリップ面の少なくとも一方の位置を変更する。
【００２９】
第１１の発明は、第１０の発明において、算出パラメタ変更手段は、ニアクリップ面およびファークリップ面の少なくとも一方の位置を仮想カメラから遠ざかる方向へ変更する。
【００３０】
第１２の発明は、第９の発明において、算出パラメタ変更手段は、透視投影変換において算出される奥行き値に加えるための所定のオフセット値を設定することで算出パラメタの変更を実行する。
【００３１】
第１３の発明は、第１２の発明において、算出パラメタ変更手段は、透視投影変換のために割り当てわれるＺバッファの範囲を示すパラメタを変更することによってオフセット値の設定を行う。
【００３２】
第１４の発明は、第９の発明において、第２描画手段は、第２種ポリゴンを半透明で表示されるように描画する。
【００３３】
第１５の発明は、第９の発明において、第２種ポリゴンは、仮想空間内において、所定の第１種ポリゴンと近接する位置であって、かつ、より仮想カメラ側となる位置に配置される。
【００３４】
第１６の発明は、第９の発明において、第１描画手段および第２描画手段における描画処理には、ワールド空間内におけるポリゴンの座標をカメラ座標系の座標に変換する第１の変換処理（Ｓ３４）と、第１の変換処理によって変換されたカメラ座標系における座標を透視変換する第２の変換処理（Ｓ３６）と、透視変換後の座標をビューポート座標系の座標に変換する第３の変換処理（Ｓ３７）と、Ｚバッファを用いた深度比較に基づいてピクセルの描画を行うＺ比較処理（Ｓ４０，Ｓ４１，Ｓ４２）とが含まれる。
【００３５】
本発明の画像処理プログラムによれば、上述した本発明の描画処理装置と同様の効果を得ることができる。
【発明の効果】
【００３６】
本発明によれば、コンピュータの処理コストの増大を抑えつつ、Ｚバッファの誤差によるちらつきを防止することができる。
【図面の簡単な説明】
【００３７】
【図１】本発明の一実施形態に係るゲームシステム１を説明するための外観図
【図２】図１のゲーム装置本体５の機能ブロック図
【図３】図１のコントローラ７の上面後方から見た斜視図
【図４】図３のコントローラ７を下面前方から見た斜視図
【図５】図３のコントローラ７の上ハウジングを外した状態を示す斜視図
【図６】図３のコントローラ７の下ハウジングを外した状態を示す斜視図
【図７】図３のコントローラ７の構成を示すブロック図
【図８】本実施形態にかかるゲーム画像の一例
【図９】通常ポリゴンと浮かせポリゴンとの描画処理におけるニア値、ファー値の違いを示す図
【図１０】ファー値、ニア値の変更設定について説明するための図
【図１１】ファー値、ニア値の変更設定について説明するための図
【図１２】ファー値、ニア値の変更設定について説明するための図
【図１３】ファー値、ニア値の変更設定について説明するための図
【図１４】ファー値、ニア値の変更設定について説明するための図
【図１５】ファー値、ニア値の変更設定について説明するための図
【図１６】ゲーム装置３の外部メインメモリ１２のメモリマップを示す図
【図１７】クリッピング設定テーブル１２６のデータ構成の一例を示す図
【図１８】本実施形態にかかるゲーム処理の詳細を示すフローチャート
【図１９】図１８のステップＳ２で示した描画処理の詳細を示したフローチャート
【図２０】図１９のステップＳ１３で示したポリゴン描画処理の詳細を示したフローチャート
【図２１】第２の実施形態の概要を説明するための図
【図２２】第２の実施形態の概要を説明するための図
【図２３】第２の実施形態における描画処理の詳細を示したフローチャート
【図２４】３次元画像の一例
【図２５】Ｚ値と仮想カメラからの距離との関係を示すグラフ
【図２６】ちらつきが発生している３次元画像の一例
【発明を実施するための形態】
【００３８】
（第１の実施形態）
（ゲームシステムの全体構成）
図１を参照して、本発明の実施形態に係るゲーム装置を含むゲームシステム１について説明する。図１は、ゲームシステム１の外観図である。以下、据置型のゲーム装置を一例にして、本実施形態のゲーム装置およびゲームプログラムについて説明する。図１において、ゲームシステム１は、テレビジョン受像器（以下、単に「テレビ」と記載する）２、ゲーム装置３、光ディスク４、コントローラ７、およびマーカ部８を含む。本システムは、コントローラ７を用いたゲーム操作に基づいてゲーム装置３でゲーム処理を実行するものである。
【００３９】
ゲーム装置３には、当該ゲーム装置３に対して交換可能に用いられる情報記憶媒体の一例である光ディスク４が脱着可能に挿入される。光ディスク４には、ゲーム装置３において実行されるためのゲームプログラムが記憶されている。ゲーム装置３の前面には光ディスク４の挿入口が設けられている。ゲーム装置３は、挿入口に挿入された光ディスク４に記憶されたゲームプログラムを読み出して実行することによってゲーム処理を実行する。
【００４０】
ゲーム装置３には、表示装置の一例であるテレビ２が接続コードを介して接続される。テレビ２には、ゲーム装置３において実行されるゲーム処理の結果得られるゲーム画像が表示される。また、テレビ２の画面の周辺（図１では画面の上側）には、マーカ部８が設置される。マーカ部８は、その両端に２つのマーカ８Ｒおよび８Ｌを備えている。マーカ８Ｒ（マーカ８Ｌも同様）は、具体的には１以上の赤外ＬＥＤであり、テレビ２の前方に向かって赤外光を出力する。マーカ部８はゲーム装置３に接続されており、ゲーム装置３はマーカ部８が備える各赤外ＬＥＤの点灯を制御することが可能である。
【００４１】
コントローラ７は、当該コントローラ７自身に対して行われた操作の内容を示す操作データをゲーム装置３に与える入力装置である。コントローラ７とゲーム装置３とは無線通信によって接続される。本実施形態では、コントローラ７とゲーム装置３との間の無線通信には例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術が用いられる。なお、他の実施形態においてはコントローラ７とゲーム装置３とは有線で接続されてもよい。
【００４２】
（ゲーム装置３の内部構成）
次に、図２を参照して、ゲーム装置３の内部構成について説明する。図２は、ゲーム装置３の構成を示すブロック図である。ゲーム装置３は、ＣＰＵ１０、システムＬＳＩ１１、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４、およびＡＶ−ＩＣ１５等を有する。
【００４３】
ＣＰＵ１０は、光ディスク４に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。ＣＰＵ１０は、システムＬＳＩ１１に接続される。システムＬＳＩ１１には、ＣＰＵ１０の他、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４およびＡＶ−ＩＣ１５が接続される。システムＬＳＩ１１は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。システムＬＳＩ１１の内部構成については後述する。揮発性の外部メインメモリ１２は、光ディスク４から読み出されたゲームプログラムや、フラッシュメモリ１７から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、ＣＰＵ１０のワーク領域やバッファ領域として用いられる。ＲＯＭ／ＲＴＣ１３は、ゲーム装置３の起動用のプログラムが組み込まれるＲＯＭ（いわゆるブートＲＯＭ）と、時間をカウントするクロック回路（ＲＴＣ：Ｒｅａｌ  Ｔｉｍｅ  Ｃｌｏｃｋ）とを有する。ディスクドライブ１４は、光ディスク４からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ１１ｅまたは外部メインメモリ１２に読み出したデータを書き込む。
【００４４】
また、システムＬＳＩ１１には、入出力プロセッサ１１ａ、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ）１１ｂ、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）１１ｃ、ＶＲＡＭ１１ｄ、および内部メインメモリ１１ｅが設けられる。図示は省略するが、これらの構成要素１１ａ〜１１ｅは内部バスによって互いに接続される。
【００４５】
ＧＰＵ１１ｂは、描画手段の一部を形成し、ＣＰＵ１０からのグラフィクスコマンド（作画命令）に従って画像を生成する。より具体的には、ＧＰＵ１１ｂは、当該グラフィクスコマンドに従って３Ｄグラフィックスの表示に必要な計算処理、例えば、レンダリングの前処理にあたる３Ｄ座標から２Ｄ座標への座標変換などの処理や、テクスチャの張り込みなどの最終的なレンダリング処理を行うことで、ゲーム画像データを生成する。ここで、ＣＰＵ１０は、グラフィクスコマンドに加えて、ゲーム画像データの生成に必要な画像生成プログラムをＧＰＵ１１ｂに与える。ＶＲＡＭ１１ｄは、ＧＰＵ１１ｂがグラフィクスコマンドを実行するために必要なデータ（ポリゴンデータやテクスチャデータ等のデータ）を記憶する。画像が生成される際には、ＧＰＵ１１ｂは、ＶＲＡＭ１１ｄに記憶されたデータを用いて画像データを作成する。
【００４６】
ＤＳＰ１１ｃは、オーディオプロセッサとして機能し、内部メインメモリ１１ｅや外部メインメモリ１２に記憶されるサウンドデータや音波形（音色）データを用いて、音声データを生成する。また、内部メインメモリ１１ｅは、外部メインメモリ１２と同様に、プログラムや各種データを記憶するものであり、ＣＰＵ１０のワーク領域やバッファ領域として用いられる。
【００４７】
上述のように生成された画像データおよび音声データは、ＡＶ−ＩＣ１５によって読み出される。ＡＶ−ＩＣ１５は、読み出した画像データをＡＶコネクタ１６を介してテレビ２に出力するとともに、読み出した音声データを、テレビ２に内蔵されるスピーカ２ａに出力する。これによって、画像がテレビ２に表示されるとともに音がスピーカ２ａから出力される。
【００４８】
入出力プロセッサ（Ｉ／Ｏプロセッサ）１１ａは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ１１ａは、フラッシュメモリ１７、無線通信モジュール１８、無線コントローラモジュール１９、拡張コネクタ２０、およびメモリカード用コネクタ２１に接続される。無線通信モジュール１８にはアンテナ２２が接続され、無線コントローラモジュール１９にはアンテナ２３が接続される。
【００４９】
入出力プロセッサ１１ａは、無線通信モジュール１８およびアンテナ２２を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ１１ａは、定期的にフラッシュメモリ１７にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール１８およびアンテナ２２を介してネットワークに送信する。また、入出力プロセッサ１１ａは、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ２２および無線通信モジュール１８を介して受信し、受信したデータをフラッシュメモリ１７に記憶する。ＣＰＵ１０はゲームプログラムを実行することにより、フラッシュメモリ１７に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ１７には、ゲーム装置３と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置３を利用してプレイしたゲームのセーブデータ（ゲームの結果データまたは途中データ）が記憶されてもよい。
【００５０】
また、入出力プロセッサ１１ａは、コントローラ７から送信される操作データをアンテナ２３および無線コントローラモジュール１９を介して受信し、内部メインメモリ１１ｅまたは外部メインメモリ１２のバッファ領域に記憶（一時記憶）する。
【００５１】
さらに、入出力プロセッサ１１ａには、拡張コネクタ２０およびメモリカード用コネクタ２１が接続される。拡張コネクタ２０は、ＵＳＢやＳＣＳＩのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール１８に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ２１は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ１１ａは、拡張コネクタ２０やメモリカード用コネクタ２１を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
【００５２】
ゲーム装置３には、電源ボタン２４、リセットボタン２５、およびイジェクトボタン２６が設けられる。電源ボタン２４およびリセットボタン２５は、システムＬＳＩ１１に接続される。電源ボタン２４がオンにされると、ゲーム装置３の各構成要素に対して、図示しないＡＣアダプタを経て電源が供給される。また、一旦電源がオンにされた状態で、再度電源ボタン２４を押すと、低電力スタンバイモードへの移行が行われる。この状態でも、ゲーム装置３への通電は行われているため、インターネット等のネットワークに常時接続しておくことができる。なお、一旦電源がオンにされた状態で、電源をオフにしたいときは、電源ボタン２４を所定時間以上長押しすることで、電源をオフとすることが可能である。リセットボタン２５が押されると、システムＬＳＩ１１は、ゲーム装置３の起動プログラムを再起動する。イジェクトボタン２６は、ディスクドライブ１４に接続される。イジェクトボタン２６が押されると、ディスクドライブ１４から光ディスク４が排出される。
【００５３】
次に、図３および図４を参照して、コントローラ７について説明する。なお、図３は、コントローラ７の上面後方から見た斜視図である。図４は、コントローラ７を下面前方から見た斜視図である。
【００５４】
図３および図４において、コントローラ７は、ハウジング７１と、当該ハウジング７１の表面に設けられた複数個の操作ボタンで構成される操作部７２とを備える。本実施例のハウジング７１は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさであり、例えばプラスチック成型によって形成されている。
【００５５】
ハウジング７１上面の中央前面側に、十字キー７２ａが設けられる。この十字キー７２ａは、十字型の４方向プッシュスイッチであり、４つの方向（前後左右）に対応する操作部分が十字の突出片にそれぞれ９０°間隔で配置される。プレイヤが十字キー７２ａのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー７２ａを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、複数の選択肢から選択指示したりすることができる。
【００５６】
なお、十字キー７２ａは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、十字方向に４つのプッシュスイッチを配設し、プレイヤによって押下されたプッシュスイッチに応じて操作信号を出力する操作部を設けてもかまわない。さらに、上記４つのプッシュスイッチとは別に、上記十字方向が交わる位置にセンタスイッチを配設し、４つのプッシュスイッチとセンタスイッチとを複合した操作部を設けてもかまわない。また、ハウジング７１上面から突出した傾倒可能なスティック（いわゆる、ジョイスティック）を倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー７２ａの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー７２ａの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー７２ａの代わりに設けてもかまわない。
【００５７】
ハウジング７１上面の十字キー７２ａより後面側に、複数の操作ボタン７２ｂ〜７２ｇが設けられる。操作ボタン７２ｂ〜７２ｇは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン７２ｂ〜７２ｇに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン７２ｂ〜７２ｄには、１番ボタン、２番ボタン、およびＡボタン等としての機能が割り当てられる。また、操作ボタン７２ｅ〜７２ｇには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン７２ａ〜７２ｇは、ゲーム装置３が実行するゲームプログラムに応じてそれぞれの操作機能が割り当てられる。なお、図３に示した配置例では、操作ボタン７２ｂ〜７２ｄは、ハウジング７１上面の中央前後方向に沿って並設されている。また、操作ボタン７２ｅ〜７２ｇは、ハウジング７１上面の左右方向に沿って操作ボタン７２ｂおよび７２ｄの間に並設されている。そして、操作ボタン７２ｆは、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００５８】
また、ハウジング７１上面の十字キー７２ａより前面側に、操作ボタン７２ｈが設けられる。操作ボタン７２ｈは、遠隔からゲーム装置３本体の電源をオン／オフする電源スイッチである。この操作ボタン７２ｈも、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００５９】
また、ハウジング７１上面の操作ボタン７２ｃより後面側に、複数のＬＥＤ７０２が設けられる。ここで、コントローラ７は、他のコントローラ７と区別するためにコントローラ種別（番号）が設けられている。例えば、ＬＥＤ７０２は、コントローラ７に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ７からゲーム装置３へ送信データを送信する際、上記コントローラ種別に応じて複数のＬＥＤ７０２のうち、種別に対応するＬＥＤが点灯する。
【００６０】
また、ハウジング７１上面には、操作ボタン７２ｂおよび操作ボタン７２ｅ〜７２ｇの間に後述するスピーカ（図５のスピーカ７０６）からの音を外部に放出するための音抜き孔が形成されている。
【００６１】
一方、ハウジング７１下面には、凹部が形成されている。後述で明らかとなるが、ハウジング７１下面の凹部は、プレイヤがコントローラ７の前面をマーカ８Ｌおよび８Ｒに向けて片手で把持したときに、当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の傾斜面には、操作ボタン７２ｉが設けられる。操作ボタン７２ｉは、例えばＢボタンとして機能する操作部である。
【００６２】
また、ハウジング７１前面には、撮像情報演算部７４の一部を構成する撮像素子７４３が設けられる。ここで、撮像情報演算部７４は、コントローラ７が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大２００フレーム／秒程度のサンプリング周期であるため比較的高速なコントローラ７の動きでも追跡して解析することができる。この撮像情報演算部７４の詳細な構成については、後述する。また、ハウジング７１の後面には、コネクタ７３が設けられている。コネクタ７３は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
【００６３】
ここで、以下の説明を具体的にするために、コントローラ７に対して設定する座標系について定義する。図３および図４に示すように、互いに直交するｘｙｚ軸をコントローラ７に対して定義する。具体的には、コントローラ７の前後方向となるハウジング７１の長手方向をｚ軸とし、コントローラ７の前面（撮像情報演算部７４が設けられている面）方向をｚ軸正方向とする。また、コントローラ７の上下方向をｙ軸とし、ハウジング７１の上面（操作ボタン７２ａ等が設けられた面）方向をｙ軸正方向とする。さらに、コントローラ７の左右方向をｘ軸とし、ハウジング７１の左側面（図３では表されずに図４で表されている側面）方向をｘ軸正方向とする。
【００６４】
次に、図５および図６を参照して、コントローラ７の内部構造について説明する。なお、図５は、コントローラ７の上ハウジング（ハウジング７１の一部）を外した状態を後面側から見た斜視図である。図６は、コントローラ７の下ハウジング（ハウジング７１の一部）を外した状態を前面側から見た斜視図である。ここで、図６に示す基板７００は、図５に示す基板７００の裏面から見た斜視図となっている。
【００６５】
図５において、ハウジング７１の内部には基板７００が固設されており、当該基板７００の上主面上に操作ボタン７２ａ〜７２ｈ、加速度センサ７０１、ＬＥＤ７０２、およびアンテナ７５４等が設けられる。そして、これらは、基板７００等に形成された配線（図示せず）によってマイコン７５１等（図６、図７参照）に接続される。マイコン７５１は本願発明のボタンデータ発生手段の一例として、操作ボタン７２ａ等の種類に応じた操作ボタンデータを発生させるように機能する。この仕組みは公知技術であるが、例えばキートップ下側に配置されたタクトスイッチなどのスイッチ機構による配線の接触／切断をマイコン７５１が検出することによって実現されている。より具体的には、操作ボタンが例えば押されると配線が接触して通電するので、この通電がどの操作ボタンにつながっている配線で発生したかをマイコン７５１が検出し、操作ボタンの種類に応じた信号を発生させている。
【００６６】
また、コントローラ７は、無線モジュール７５３（図７参照）およびアンテナ７５４によって、ワイヤレスコントローラとして機能する。なお、ハウジング７１内部には図示しない水晶振動子が設けられており、後述するマイコン７５１の基本クロックを生成する。また、基板７００の上主面上に、スピーカ７０６およびアンプ７０８が設けられる。また、加速度センサ７０１は、操作ボタン７２ｄの左側の基板７００上（つまり、基板７００の中央部ではなく周辺部）に設けられる。したがって、加速度センサ７０１は、コントローラ７の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分の含まれる加速度を検出することができるので、所定の演算により、検出される加速度データからコントローラ７の回転を良好な感度でゲーム装置３等が判定することができる。
【００６７】
一方、図６において、基板７００の下主面上の前端縁に撮像情報演算部７４が設けられる。撮像情報演算部７４は、コントローラ７の前方から順に赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４によって構成されており、それぞれ基板７００の下主面に取り付けられる。また、基板７００の下主面上の後端縁にコネクタ７３が取り付けられる。さらに、基板７００の下主面上にサウンドＩＣ７０７およびマイコン７５１が設けられている。サウンドＩＣ７０７は、基板７００等に形成された配線によってマイコン７５１およびアンプ７０８と接続され、ゲーム装置３から送信されたサウンドデータに応じてアンプ７０８を介してスピーカ７０６に音声信号を出力する。
【００６８】
そして、基板７００の下主面上には、バイブレータ７０４が取り付けられる。バイブレータ７０４は、例えば振動モータやソレノイドである。バイブレータ７０４は、基板７００等に形成された配線によってマイコン７５１と接続され、ゲーム装置３から送信された振動データに応じてその作動をオン／オフする。バイブレータ７０４が作動することによってコントローラ７に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。ここで、バイブレータ７０４は、ハウジング７１のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング７１が大きく振動することになり、振動を感じやすくなる。
【００６９】
次に、図７を参照して、コントローラ７の内部構成について説明する。なお、図７は、コントローラ７の構成を示すブロック図である。
【００７０】
図７において、コントローラ７は、上述した操作部７２、撮像情報演算部７４、加速度センサ７０１、バイブレータ７０４、スピーカ７０６、サウンドＩＣ７０７、およびアンプ７０８の他に、その内部に通信部７５を備えている。
【００７１】
撮像情報演算部７４は、赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４を含んでいる。赤外線フィルタ７４１は、コントローラ７の前方から入射する光から赤外線のみを通過させる。レンズ７４２は、赤外線フィルタ７４１を透過した赤外線を集光して撮像素子７４３へ出射する。撮像素子７４３は、例えばＣＭＯＳセンサやあるいはＣＣＤのような固体撮像素子であり、レンズ７４２が集光した赤外線を撮像する。したがって、撮像素子７４３は、赤外線フィルタ７４１を通過した赤外線だけを撮像して画像データを生成する。撮像素子７４３で生成された画像データは、画像処理回路７４４で処理される。具体的には、画像処理回路７４４は、撮像素子７４３から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部７５へ出力する。なお、これらの撮像情報演算部７４は、コントローラ７のハウジング７１に固設されており、ハウジング７１自体の方向を変えることによってその撮像方向を変更することができる。この撮像情報演算部７４から出力される処理結果データに基づいて、コントローラ７の位置や動きに応じた信号を得ることができる。
【００７２】
コントローラ７は、３軸（ｘ、ｙ、ｚ軸）の加速度センサ７０１を備えていることが好ましい。この３軸の加速度センサ７０１は、３方向、すなわち、上下方向、左右方向、および前後方向で直線加速度を検知する。また、他の実施形態においては、ゲーム処理に用いる制御信号の種類によっては、上下および左右方向（または他の対になった方向）のそれぞれに沿った直線加速度のみを検知する２軸の加速度検出手段を使用してもよい。例えば、この３軸または２軸の加速度センサ７０１は、アナログ・デバイセズ株式会社（Ａｎａｌｏｇ  Ｄｅｖｉｃｅｓ，  Ｉｎｃ．）またはＳＴマイクロエレクトロニクス社（ＳＴＭｉｃｒｏｅｌｅｃｔｒｏｎｉｃｓ  Ｎ．Ｖ．）から入手可能であるタイプのものでもよい。加速度センサ７０１は、シリコン微細加工されたＭＥＭＳ（Ｍｉｃｒｏ  Ｅｌｅｃｔｒｏ  Ｍｅｃｈａｎｉｃａｌ  Ｓｙｓｔｅｍｓ：微小電子機械システム）の技術に基づいた静電容量式（静電容量結合式）であってもよい。しかしながら、既存の加速度検出手段の技術（例えば、圧電方式や圧電抵抗方式）あるいは将来開発される他の適切な技術を用いて３軸または２軸の加速度センサ７０１が提供されてもよい。
【００７３】
当業者には公知であるように、加速度センサ７０１に用いられるような加速度検出手段は、加速度センサの持つ各軸に対応する直線に沿った加速度（直線加速度）のみを検知することができる。つまり、加速度センサ７０１からの直接の出力は、その２軸または３軸のそれぞれに沿った直線加速度（静的または動的）を示す信号である。このため、加速度センサ７０１は、非直線状（例えば、円弧状）の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
【００７４】
しかしながら、加速度センサ７０１から出力される加速度の信号に基づいて、ゲーム装置のプロセッサ（例えばＣＰＵ１０）またはコントローラのプロセッサ（例えばマイコン７５１）などのコンピュータが処理を行うことによって、コントローラ７に関するさらなる情報を推測または算出（判定）することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、加速度センサを搭載するコントローラが静的な状態であることを前提としてコンピュータ側で処理する場合（すなわち、加速度センサによって検出される加速度が重力加速度のみであるとして処理する場合）、コントローラが現実に静的な状態であれば、検出された加速度に基づいてコントローラの姿勢が重力方向に対して傾いているか否か又はどの程度傾いているかを知ることができる。具体的には、加速度センサの検出軸が鉛直下方向を向いている状態を基準としたとき、１Ｇ（重力加速度）がかかっているか否かだけで傾いているか否かを知ることができるし、その大きさによってどの程度傾いているかも知ることができる。また、多軸の加速度センサの場合には、さらに各軸の加速度の信号に対して処理を施すことによって、各軸が重力方向に対してどの程度傾いているかをより詳細に知ることができる。この場合において、加速度センサ７０１からの出力に基づいて、プロセッサがコントローラ７の傾き角度のデータを算出する処理をおこなってもよいが、当該傾き角度のデータを算出する処理をおこなうことなく、加速度センサ７０１からの出力に基づいて、おおよその傾き具合を推定するような処理としてもよい。このように、加速度センサ７０１をプロセッサと組み合わせて用いることによって、コントローラ７の傾き、姿勢または位置を判定することができる。一方、加速度センサが動的な状態であることを前提とする場合には、重力加速度成分に加えて加速度センサの動きに応じた加速度を検出するので、重力加速度成分を所定の処理により除去すれば、動き方向などを知ることができる。具体的には、加速度センサ７０１を備えるコントローラ７がユーザの手で動的に加速されて動かされる場合に、加速度センサ７０１によって生成される加速度信号を処理することによって、コントローラ７のさまざまな動きおよび／または位置を算出することができる。なお、加速度センサが動的な状態であることを前提とする場合であっても、加速度センサの動きに応じた加速度を所定の処理により除去すれば、重力方向対する傾きを知ることが可能である。他の実施例では、加速度センサ７０１は、信号をマイコン７５１に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサが静的な加速度（例えば、重力加速度）を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角（あるいは、他の好ましいパラメータ）に変換するものであってもよい。
【００７５】
他の実施形態の例では、コントローラ７の動きを検出する動きセンサとして、回転素子または振動素子などを内蔵したジャイロセンサを用いてもよい。この実施形態で使用されるＭＥＭＳジャイロセンサの一例として、アナログ・デバイセズ株式会社から入手可能なものがある。加速度センサ７０１と異なり、ジャイロセンサは、それが内蔵する少なくとも一つのジャイロ素子の軸を中心とした回転（または角速度）を直接検知することができる。このように、ジャイロセンサと加速度センサとは基本的に異なるので、個々の用途のためにいずれの装置が選択されるかによって、これらの装置からの出力信号に対して行う処理を適宜変更する必要がある。
【００７６】
具体的には、加速度センサの代わりにジャイロセンサを用いて傾きや姿勢を算出する場合には、大幅な変更を行う。すなわち、ジャイロセンサを用いる場合、検出開始の状態において傾きの値を初期化する。そして、当該ジャイロセンサから出力される角速度データを積分する。次に、初期化された傾きの値からの傾きの変化量を算出する。この場合、算出される傾きは、角度に対応する値が算出されることになる。一方、加速度センサによって傾きを算出する場合には、重力加速度のそれぞれの軸に関する成分の値を、所定の基準と比較することによって傾きを算出するので、算出される傾きはベクトルで表すことが可能であり、初期化を行わずとも、加速度検出手段を用いて検出される絶対的な方向を検出することが可能である。また、傾きとして算出される値の性質は、ジャイロセンサが用いられる場合には角度であるのに対して、加速度センサが用いられる場合にはベクトルであるという違いがある。したがって、加速度センサに代えてジャイロセンサが用いられる場合、当該傾きのデータに対して、２つのデバイスの違いを考慮した所定の変換を行う必要がある。加速度検出手段とジャイロセンサとの基本的な差異と同様にジャイロセンサの特性は当業者に公知であるので、本明細書ではさらなる詳細を省略する。ジャイロセンサは、回転を直接検知できることによる利点を有する一方、一般的には、加速度センサは、本実施形態で用いるようなコントローラに適用される場合、ジャイロセンサに比べて費用効率が良いという利点を有する。
【００７７】
通信部７５は、マイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）７５１、メモリ７５２、無線モジュール７５３、およびアンテナ７５４を含んでいる。マイコン７５１は、処理の際にメモリ７５２を記憶領域として用いながら、送信データを無線送信する無線モジュール７５３を制御する。また、マイコン７５１は、アンテナ７５４を介して無線モジュール７５３が受信したゲーム装置３からのデータに応じて、サウンドＩＣ７０７およびバイブレータ７０４の動作を制御する。サウンドＩＣ７０７は、通信部７５を介してゲーム装置３から送信されたサウンドデータ等を処理する。また、マイコン７５１は、通信部７５を介してゲーム装置３から送信された振動データ（例えば、バイブレータ７０４をＯＮまたはＯＦＦする信号）等に応じて、バイブレータ７０４を作動させる。
【００７８】
コントローラ７に設けられた操作部７２からの操作信号（キーデータ）、加速度センサ７０１からの加速度信号（ｘ、ｙ、およびｚ軸方向加速度データ；以下、単に加速度データと記載する）、および撮像情報演算部７４からの処理結果データは、マイコン７５１に出力される。マイコン７５１は、入力した各データ（キーデータ、加速度データ、処理結果データ）を無線コントローラモジュール１９へ送信する送信データとして一時的にメモリ７５２に格納する。ここで、通信部７５から無線コントローラモジュール１９への無線送信は、所定の周期毎に行われるが、ゲームの処理は１／６０秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は１６．７ｍｓ（１／６０秒）であり、ブルートゥース（Ｂｌｕｅｔｏｏｔｈ；登録商標）で構成される通信部７５の送信間隔は例えば５ｍｓである。マイコン７５１は、無線コントローラモジュール１９への送信タイミングが到来すると、メモリ７５２に格納されている送信データを一連の操作情報として出力し、無線モジュール７５３へ出力する。そして、無線モジュール７５３は、例えばブルートゥース（登録商標）の技術に基づいて、所定周波数の搬送波を用いて操作情報で変調し、その電波信号をアンテナ７５４から放射する。つまり、コントローラ７に設けられた操作部７２からのキーデータ、加速度センサ７０１からの加速度データ、および撮像情報演算部７４からの処理結果データが無線モジュール７５３で電波信号に変調されてコントローラ７から送信される。そして、ゲーム装置３の無線コントローラモジュール１９でその電波信号を受信し、ゲーム装置３で当該電波信号を復調や復号することによって、一連の操作情報（キーデータ、加速度データ、および処理結果データ）を取得する。そして、ゲーム装置３のＣＰＵ１０は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、ブルートゥース（登録商標）の技術を用いて通信部７５を構成する場合、通信部７５は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【００７９】
次に、本実施形態における描画処理の概要について説明する。本実施形態では、３次元仮想空間を仮想カメラで撮影した画像を描画する。また、本実施形態では、いわゆるＺバッファ法を利用した描画処理を行っている。
【００８０】
また、本実施形態では、図８のような画像において、風車オブジェクト１０１の影等を表現するために、影用のポリゴン１０２を地面から少し浮かせた位置に配置する手法をとっている。なお、浮かせる距離については、仮想カメラが寄って描画が行われた際に、見る者にとって違和感を感じさせない程度（浮いていることが解らない程度）の浮かせ方が好ましい。そのため、地面からかなり近接した位置に配置されることになる。このような前提のもとで、本実施形態では、以下のような処理を行う。
【００８１】
本実施形態の処理では、まず、（１フレームでの描画における）描画対象となるポリゴンを２つの種類に分けている。ここでは、１つめを、通常ポリゴンと呼び、もう一つを浮かせポリゴンと呼ぶ。例えば、上記図８の例では、風車オブジェクト１０１や地面（地形）オブジェクトが通常ポリゴンで構成されており、影用のポリゴン１０２など、少し浮かせて配置するポリゴンが浮かせポリゴンになる。
【００８２】
そして、通常ポリゴンについての描画処理と浮かせポリゴンについての描画処理を分けて実行する。このとき、浮かせポリゴンの描画処理にかかる透視斜影変換処理において、クリップ空間（以下では、ビューボリュームと呼ぶこともある）のニア値、ファー値のいずれか、あるいは双方を、通常ポリゴンについての透視変換処理で用いる値よりも大きな値（つまり、仮想カメラから遠ざかるような値）に設定して処理を行うものである。
【００８３】
上記の処理について、より具体的に説明する。まず、本実施形態の描画処理（レンダリングパイプライン）は、以下のようなレンダリングの手法で行われる。すなわち、いわゆる頂点シェーダのプロセス、より具体的には、ローカル座標→ワールド座標系への変換（いわゆるワールド変換）、ワールド→カメラ座標系への変換（いわゆるビューイング変換）、クリッピング処理や透視射影変換（いわゆるプロジェクション変換）、スクリーン座標系への変換（いわゆるビューポート変換。スクリーン変換と呼ばれることもある）が行われ、その後、ラスタライザを経て、いわゆるピクセルシェーダのプロセス（テクスチャマッピングやいわゆる深度テスト、アルファテスト等）が実行される、というプロセスで行われるものとする。
【００８４】
本実施形態では、先に通常ポリゴンを上記のプロセスでレンダリング処理する。この際、上記プロジェクション変換の段階で行われるクリッピング処理においては、クリップ空間のファー値、ニア値には予め定められた所定の値が設定される。
【００８５】
次に、浮かせポリゴンについて上記と同様のプロセスでレンダリング処理するが、このとき、本実施形態では、上記クリップ空間のファー値、ニア値を、通常ポリゴンで使用した値とは異なった値に設定する。より具体的には、カメラから見て、ニア値（ニアクリップ面）またはファー値（ファークリップ面）、あるいはその双方が奥行き方向に移動されたような値にする（例えば、図９参照。図９は、双方を奥行き方向に移動した例である。）。これにより、以下に説明するように、ピクセルシェーダにおいて行われる深度テストにおいて、浮かせポリゴンについては、より確実に手前側にあると判定させることが可能となる。
【００８６】
このファー値、ニア値の変更設定に関して、図１０〜図１５のグラフを用いて説明する。図１０は、通常ポリゴンの処理と浮かせポリゴンの処理とで、ファー値のみを変更した場合のＺ値（奥行き値）の変化を示すグラフである。図１０において、縦軸はＺバッファ値を示し、横軸は仮想カメラからの距離を示す（なお、図１０において縦軸は、０．９９９から１．０の範囲で示しているが、これは、０から１．０の範囲で表記するとグラフがつぶれてしまい、解りづらくなるために、０．９９９から始めたグラフで示している）。まず、上記通常ポリゴンについて透視斜影変換処理を行うときは、クリップ空間のファー値を、図１０のファー値Ｆ１に設定しているとする。Ｚ値は上述の式１で示されるように算出されるので、この場合のＺ値は曲線１１１のように表される。また、浮かせポリゴンを処理するときは、ファー値を、より仮想カメラから遠ざかった値であるファー値Ｆ２に設定しているとする。そのため、この場合のＺ値は曲線２１１で表されている。つまり、ファー値Ｆ１（通常ポリゴンの処理時）のときは、グラフでいうと、縦軸のＺバッファ値の範囲Ｚ１をニア値〜ファー値Ｆ１の長さＤ１の範囲に割り当てられることになるが、ファー値Ｆ２のとき（浮かせポリゴンの処理時）は、ニア値〜ファー値Ｆ２の長さＤ２の範囲にＺバッファ値の範囲Ｚ１が割り当てられることになる。その結果、浮かせポリゴンを処理するときのＺ値の曲線２１１は、通常ポリゴンの場合の曲線１１１よりも、少し右方向に伸び、結果として下に下がったようなグラフになる。
【００８７】
その結果、仮想空間において、例えば、仮想カメラからの距離が図１０の点Ｐ１３１で示す位置に存在するポリゴンに対して設定されるＺ値が、通常ポリゴン（ファー値がＦ１）のときのＺ値（点Ｐ１）よりも、より手前側を示す値（点Ｐ２）として算出されることになる。
【００８８】
このことをよりわかりやすくするため、Ｚ値とファー値との関係のグラフを１次関数のグラフで表すと、図１１のように表される。図１１では、直線１１２が上記図１０の曲線１１１に対応し、直線２１２が曲線２１１に対応する。このグラフで見れば、仮想カメラからの距離が同じ位置である場合において、ファー値Ｆ１とファー値Ｆ２とのＺ値の違いがより際立って示されている。すなわち、ファー値Ｆ１で透視斜影変換を行ったときより、ファー値Ｆ２で透視斜影変換を行ったときのほうが、より手前側を示す値がＺ値として算出されることがわかる。
【００８９】
このように、本実施形態では、１フレーム分の処理で描画するポリゴンの種類を通常ポリゴンと浮かせポリゴンとに分けている。そして、通常ポリゴンを透視射影変換する場合と、浮かせポリゴンを透視斜影変換する場合とで、クリップ空間のニア値、ファー値としてそれぞれ異なる値を設定して処理を行う。これにより、仮想空間内において、浮かせポリゴンを移動あるいは変形させることなく、その後のプロセス（ピクセルシェーダ）で行われる深度テストにおいて、浮かせポリゴンについては、より確実に手前側（仮想カメラ側）にあると判定させることが可能となる。これにより、極めて近接した位置に配置されている通常ポリゴンと浮かせポリゴンとに間で、Ｚバッファの誤差によるちらつきの発生を防ぐことが可能となる。
【００９０】
なお、上述の図１０の例では、ファー値のみ異なった値の例で説明したが、ニア値のみを異なった値にした場合でも、同様に、浮かせポリゴンのＺ値が、より手前を示す値で算出されるという結果が得られる。図１２は、ニア値のみを異なる値（図１２のニア値Ｎ１およびＮ２）にした場合の例を示すグラフである。図１２では、曲線１１３が通常ポリゴンを処理するときのＺ値を示し、曲線２１３が、浮かせポリゴンを処理するときのＺ値を示す。また、通常ポリゴンと浮かせポリゴンとで、ニア値、ファー値共に異なる値にした場合でも、図１３に示すようなグラフとなり、この場合も同様の結果が得られる。図１３では、曲線１１４が通常ポリゴンを処理するときのＺ値を示し、曲線２１４が、浮かせポリゴンを処理するときのＺ値を示している。なお、参考のために、図１２のグラフを１次関数として示したものを図１４に示し、図１３のグラフを１次関数として示したものを図１５に示す。図１４の直線１１５が図１２の曲線１１３に対応し、図１４の直線２１５が図１２の曲線２１３に対応している。また、図１５の直線１１６が図１３の曲線１１４に対応し、図１５の直線２１６が図１３の曲線２１４に対応している。いずれの場合も、仮想３次元空間内で同じ位置（奥行き方向の座標が同じ）にあるポリゴンについて、通常ポリゴンとして処理した場合よりも浮かせポリゴンとして処理した場合のほうが、より仮想カメラ側に近いＺ値として算出されることが示されている。
【００９１】
次に、ゲーム装置３によって実行される画像処理の一例であるゲーム処理の詳細を説明する。まず、ゲーム処理の際に外部メインメモリ１２に記憶されるデータについて説明する。図１６は、ゲーム装置３のメインメモリ１２のメモリマップを示す図である。図１６において、外部メインメモリ１２は、プログラム記憶領域１２０およびデータ記憶領域１２３を含む。プログラム記憶領域１２０およびデータ記憶領域１２３のデータは、光ディスク４に記憶され、ゲーム処理プログラム実行時には外部メインメモリ１２に転送されて記憶される。
【００９２】
プログラム記憶領域１２０は、ＣＰＵ１０によって実行されるゲームプログラムを記憶し、このゲームプログラムは、メイン処理プログラム１２１と、描画処理プログラム１２２などによって構成される。メイン処理プログラム１２１は、後述する図１８のフローチャートの処理に対応するプログラムである。描画処理プログラム１２２は、仮想３次元空間の様子をゲーム画面として描画するための処理をＣＰＵ１０に実行させるためのプログラムである。
【００９３】
データ記憶領域１２３には、通常ポリゴンデータ１２４、浮かせポリゴンデータ１２５、クリッピング設定テーブル１２６などのデータが記憶されるとともに、その他ゲーム処理に必要なデータも記憶される。
【００９４】
通常ポリゴンデータ１２４は、上記通常ポリゴンに分類されるポリゴンモデルのデータ（頂点データやテクスチャデータ等）が格納される。すなわち、地形オブジェクトや風車オブジェクト１０１等のポリゴンのデータが格納される。
【００９５】
浮かせポリゴンデータ１２５は、上記浮かせポリゴンに分類されるポリゴンモデルのデータが格納される。すなわち、影のポリゴン１０２等、仮想空間内において地面から少し浮かせた位置に配置されるポリゴンのデータが格納される。
【００９６】
クリッピング設定テーブル１２６は、通常ポリゴンの描画処理時に用いるクリップ空間のニア値、ファー値と、浮かせポリゴンの描画処理時に用いるクリップ空間のニア値、ファー値とを定義したテーブルである。図１７は、クリッピング設定テーブル１２６のデータ構成の一例を示す図である。図１７に示されたクリッピング設定テーブル１２６は、種別１２６１とニア値１２６２とファー値１２６３を有する構造になっている。図１７の例では、通常ポリゴンの描画処理時のニア値は１．００、ファー値は１２００００として定義されている。また、浮かせポリゴンの描画処理時のニア値は１．００５、ファー値は１３００００として定義されている。
【００９７】
次に、図１８〜図２０を参照して、描画処理の一例としてゲーム装置３によって実行されるゲーム処理について説明する。ゲーム装置３の電源が投入されると、ゲーム装置３のＣＰＵ１０は、ＲＯＭ／ＲＴＣ１３に記憶されている起動プログラムを実行し、これによって外部メインメモリ１２等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムが外部メインメモリ１２に読み込まれ、ＣＰＵ１０によって当該ゲームプログラムの実行が開始される。図１８に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。また、図１８に示すステップＳ１〜ステップＳ３の処理ループは、１フレーム毎に繰り返し実行される。
【００９８】
図１８において、まず、ステップＳ１において、ゲーム処理が実行される。この処理では、ＣＰＵ１０は、プレイヤからの操作データを取得し、当該操作データに基づくゲーム処理を実行する。すなわち、仮想空間内での仮想カメラの移動や各種オブジェクトの移動、オブジェクトの姿勢の変更等、ゲームに関する各種処理を実行する。
【００９９】
次に、ステップＳ２において、上記ステップＳ１の処理内容を反映した仮想ゲーム空間の様子を描画するための描画処理が実行される。
【０１００】
図１９は、上記ステップＳ２で示した描画処理の詳細を示すフローチャートである。本処理では、まず、上記通常ポリゴンを対象とするポリゴン描画処理が実行され、その後、上記浮かせポリゴンを対象とするポリゴン描画処理が実行される。
【０１０１】
図１９において、まず、ステップＳ１１において、通常ポリゴンを描画する際に用いるクリップ空間のクリッピング面を設定する処理が実行される。具体的には、ＣＰＵ１０は、クリッピング設定テーブル１２６を参照し、種別１２６１が”通常ポリゴン”用のデータ（ニア値１２６２、ファー値１２６３）を読み出す。そして、クリップ空間のニア値、ファー値として設定する。上記図１７に示したようなクリッピング設定テーブル１２６の例では、ニア値が１．０、ファー値が１２００００に設定されることになる。また、その他、画角やアスペクト比等のパラメータの設定も行われる。
【０１０２】
次に、ステップＳ１２において、描画対象ポリゴンとして「通常ポリゴン」を選択する処理が実行される。具体的には、ＣＰＵ１０は、後述のポリゴン描画のポリゴンデータの入力元として（後述の頂点シェーダの入力元として）、通常ポリゴンデータ１２４を指定する。
【０１０３】
次に、ステップＳ１３において、上記通常ポリゴンを対象とするポリゴン描画処理が実行される。図２０は、上記ステップＳ１３で示したポリゴン描画処理の詳細を示すフローチャートである。本処理は、大きく分けて、１ポリゴン単位で、いわゆる頂点シェーダと呼ばれる処理（図２０のステップＳ３１〜Ｓ３７）と、いわゆるピクセルシェーダと呼ばれる処理（図２０のステップＳ３８〜Ｓ４２）が実行される。なお、当該ポリゴン描画処理は、ＧＰＵ１１ｂによって実行されてもよいし、ＣＰＵ１０によって実行されてもよいが、ここではＣＰＵ１０で実行される場合を例として説明する。
【０１０４】
図２０において、まず、ステップＳ３１において、処理対象となるポリゴンデータを全て処理したか否かが判定される（この時点では、通常ポリゴンデータ１２４が処理対象である）。より具体的には、通常ポリゴンデータ１２４に含まれている全てのポリゴンデータが読み出されて、頂点シェーダ処理が実行されたか否かが判定される。
【０１０５】
次に、ステップＳ３２において、通常ポリゴンデータ１２４から１つ分のポリゴンのデータ（未処理のポリゴンデータのうち、１つのポリゴン分のデータ）が読み出される。
【０１０６】
続くステップＳ３３において、上記読み出された１つ分のポリゴンについて、ローカル座標からワールド座標への座標変換（ワールド変換）が実行される。更に、ステップＳ３４で、ワールド座標からカメラ座標への座標変換（ビューイング変換）が実行される。
【０１０７】
次に、プロジェクション変換が実行される。まず、ステップＳ３５において、上記ステップＳ１１で設定されたニア値、ファー値（ここでは、ニア値１．０、ファー値１２００００）に基づいて、クリップ空間の設定が実行される。
【０１０８】
次に、ステップＳ３６において、透視斜影変換が実行される。ここで、クリップ空間における処理対象ポリゴンのＺ座標Ｚｃｌｉｐは、例えば、以下の式で、算出される。
Ｚｃｌｉｐ＝Ｚｅｙｅ×（−ｎ）／（ｆ−ｎ）−ｆ×ｎ／（ｆ−ｎ）
なお、変数ｎはニアクリップ面への正の距離（すなわち、ニア値）を示し、
変数ｆはファークリップ面への正の距離（すなわち、ファー値）を示し、
変数Ｚｅｙｅは、カメラ座標系に変換された後の処理対象ポリゴンのＺ座標を示す。
【０１０９】
次に、ステップＳ３７において、スクリーン座標系（ビューポート座標系）への座標変換処理（ビューポート変換）が実行される。ここで、スクリーン空間における処理対象ポリゴンのＺ座標Ｚｓｃｒｅｅｎは、例えば、以下の式で、算出される。
Ｗｃｌｉｐ＝−Ｚｅｙｅ
Ｚｓｃｒｅｅｎ＝Ｚｃｌｉｐ  ／  Ｗｃｌｉｐ  ＋  ｆ  ・・・式２
なお、変数Ｗｃｌｉｐは、いわゆるＷ値であり、いわば、ビューボリュームの拡大率を示す値である（同次座標系の値である）。
【０１１０】
スクリーン座標への変換が終われば、次に、当該ポリゴンについてピクセルシェーダ処理が実行される（ステップＳ３８〜Ｓ４２）。まず、ステップＳ３８において、対象ピクセル（つまり、現在処理中のポリゴンのピクセル）の全てについて処理を行ったか否かが判定される。当該判定の結果、まだ全て処理していないときは（ステップＳ３８でＮＯ）、ステップＳ３９において、次の処理対象ピクセル（ピクセルシェーダの処理ループの開始時は、最初の処理対象となるピクセル）が選択される。
【０１１１】
次に、いわゆる深度テスト（Ｚテスト）が実行される。すなわち、ステップＳ４０において、現在処理対象のピクセルのＺ値と、ＺバッファのＺ値との比較が行われる。（ここでは、ＺバッファのＺ値の範囲については、仮想カメラ側０．０〜奥行き側１．０とした範囲とする）。続くステップＳ４１において、現在処理対象のピクセルのＺ値がＺバッファのＺ値より小さい（すなわち、より仮想カメラ側に位置する）か否かが判定される。その結果、現在処理対象のピクセルのＺ値がＺバッファのＺ値より小さいときは（ステップＳ４１でＹＥＳ）、続くステップＳ４２において、当該ピクセルを描画するための処理が実行される。その後、上記ステップＳ３８に戻り、処理が繰り返される。一方、ステップＳ４１の判定の結果、現在処理対象のピクセルのＺ値がＺバッファのＺ値より小さくないときは（ステップＳ４１でＮＯ）、ステップＳ４２の処理は実行されずに（すなわち、当該ピクセルを描画しない）、上記ステップＳ３８に戻り、処理が繰り返される。
【０１１２】
一方、上記ステップＳ３８の判定の結果、対象ピクセルについて全て処理を行ったと判定されたときは（ステップＳ３８でＹＥＳ）、現在処理中のポリゴンについてのピクセルシェーダ処理が終了したことになるため、上記ステップＳ３１に戻り、処理が繰り返される。すなわち、未処理のポリゴンを処理対象として頂点シェーダ処理及びピクセルシェーダ処理が繰り返されることになる。
【０１１３】
上記ステップＳ３１の判定の結果、対象ポリゴン（ここでは通常ポリゴン）の全てについて頂点シェーダ処理を行ったと判定されたときは（ステップＳ３１でＹＥＳ）、当該ポリゴン描画処理は終了する。
【０１１４】
図１９に戻り、通常ポリゴンについての描画処理が終了すれば、次に、浮かせポリゴンを対象とした描画処理が実行される。まず、ステップＳ１４において、クリッピング面の設定を、浮かせポリゴン用の値に変更する処理が実行される。具体的には、ＣＰＵ１０は、クリッピング設定テーブル１２６を参照し、種別１２６１が”浮かせポリゴン”のデータ（ニア値１２６２、ファー値１２６３）を読み出し、クリップ空間のニア値、ファー値として設定する。図１７に示したクリッピング設定テーブル１２６の例では、ニア値が１．００５、ファー値が１３００００で設定されることになる。
【０１１５】
次に、ステップＳ１５において、描画対象ポリゴンとして「浮かせポリゴン」を選択する処理が実行される。具体的には、ＣＰＵ１０は、ポリゴン描画処理におけるポリゴンデータの入力元として、浮かせポリゴンデータ１２５を指定する。
【０１１６】
次に、ステップＳ１６において、浮かせポリゴンを対象としたポリゴン描画処理が実行される。当該ポリゴン描画処理の内容は、上述したステップＳ１３のポリゴン描画処理と同様の処理が実行される。そのため、詳細な説明は省略するが、上記ステップＳ１３とは、処理対象のポリゴンが浮かせポリゴンである点と、上記ステップＳ３６における透視斜影変換においては、上記ステップＳ１４において設定された内容、すなわち、ステップ浮かせポリゴン用のニア値およびファー値に基づくクリップ空間で処理が行われる点が異なる。そのため、上記図１０等で示したグラフのように、浮かせポリゴンのＺ値としては、より仮想カメラ側にあることを示す値が算出されることになる。その結果、上記深度テストにおいて、処理対象となっている浮かせポリゴン（のピクセル）について、当該浮かせポリゴンに近接する通常ポリゴンよりも、より確実に仮想カメラ側にあると判定されやすくなる。例えば、通常ポリゴンとしての地面のポリゴンと、浮かせポリゴンとして、その上に乗る影のポリゴンがある場合、当該影のポリゴンが地面の下（仮想カメラから見て奥行き側）にあると判定されることを防ぐ事が可能となり、影のポリゴンが描画されなくなることを防ぐ（すなわち、ちらつきを防ぐ）ことが可能となる。
【０１１７】
ステップＳ１６にかかる浮かせポリゴンについての描画処理が終了すれば、ポリゴン描画処理は終了する。
【０１１８】
図１８に戻り、ステップＳ２の描画処理が終了すれば、ステップＳ３において、ゲーム終了か否かが判断され、ＹＥＳの場合、ゲーム処理を終了し、ＮＯの場合、ステップＳ１に戻って、ゲーム処理が繰り返される。以上で、本実施形態にかかるゲーム処理の説明を終了する。
【０１１９】
このように、本実施形態では、描画するポリゴンを通常ポリゴンと浮かせポリゴンとに分類し、通常ポリゴン用と浮かせポリゴン用とで異なったニア値、ファー値のクリップ空間を用いて別々に透視斜影変換処理等を実行している。これにより、浮かせポリゴンを通常ポリゴンと同じクリップ空間（同じニア値およびファー値）を用いて透視斜影変換を行った場合よりも、上記深度テストにおいて、浮かせポリゴンについてはより確実に仮想カメラ側に存在すると判定させることができる（つまり、深度テストに際して、浮かせポリゴンについては仮想カメラ側にずらした状態で判定が行われるような処理が可能となる）。その結果、例えば、地面ポリゴンと影ポリゴンのような、密接した位置関係にある通常ポリゴンと浮かせポリゴンについて、浮かせポリゴンをより確実に描画することができる。換言すれば、通常ポリゴンより奥行き側にあると判定されて描画されなくなることを防ぐことができ、Ｚバッファの誤差によるちらつきを防ぐ事が可能となる。
【０１２０】
更には、透視変換処理に際に用いるクリップ空間のニア値、ファー値の設定を変更するという簡易な処理を実行するだけであり、ポリゴン数に依存して処理の回数が増えることはないため、描画処理にかかる処理コストが極端に増大することもない。
【０１２１】
また、ちらつき防止のために、ワールド座標系において浮かせポリゴンの位置を移動させることもなく、また、浮かせポリゴンについて変形を加えるような処理も行わないため、ゲーム制作者の意図した図柄や画像をより確実に表現できる。
【０１２２】
（第２の実施形態）
次に、図２１から図２３を参照して、本発明の第２の実施形態について説明する。上述の第１の実施形態では、浮かせポリゴンを処理するためのクリップ空間のニア値、ファー値として、通常ポリゴンを処理するときのクリップ空間のニア値、ファー値とは異なる値を設定して透視斜影変換処理等を実行していた。これに対して、第２の実施形態では、算出されるＺ値に対して所定のオフセットを加えることで、第１の実施形態と同様の効果を得ようとするものである。なお、当該実施形態に係るゲーム装置は、上述した第１の実施形態と同様であるため、同一の参照符号を付して詳細な説明を省略する。
【０１２３】
第２の実施形態での処理概念について、図２１を用いて説明する。第２の実施形態では、上記通常ポリゴンを処理するときのＺ値の曲線２２１に対して、上記オフセットを加えることで、当該曲線をそのまま下にずらしたような曲線２３１で示されるＺ値を浮かせポリゴンのＺ値とするものである。その結果、上述した第１の実施形態と同様に、深度テストに際して、浮かせポリゴンについては仮想カメラ側にずらしたような状態とすることができる。その結果、上述した第１の実施形態と同様に、Ｚバッファの誤差によるちらつきを防止することが可能となる。
【０１２４】
なお、上記図２１の曲線２３１は、例えば以下のような式を用いて算出することが可能である。
Ｚ＝（１＋Ｄ）＋ｎ×（１＋ｆ／Ｃｚ）／（ｆ−ｎ）
上記の式において、変数ＺはＺ値を示し、変数Ｄは、負の定数のオフセット値を示す。また、変数Ｃｚは、カメラ空間座標のＺ成分を示し、変数ｎはクリップ空間のニア値、変数ｆはクリップ空間のファー値を示す。
【０１２５】
ここで、上記変数Ｄには負の値が設定されるため、ニア値としては、より仮想カメラ側の位置が割り当てられることになる。但し、Ｚバッファメモリ空間の最小値は０であるため、０以下の部分は切り捨てられることになる。例えば、負のオフセットを０．２だけ加えた結果、０．０〜１．０の範囲が−０．２〜０．８の範囲となった場合は、負の部分が切り捨てられて、０．０〜０．８の範囲を割り当て指定することになる。
【０１２６】
次に、第２の実施形態の処理の詳細について説明する。まず、本実施形態では、上述したような処理を実現するために、以下に説明するような機能がハードウェア的に、あるいは、ソフトウェア的に実装されていることを前提とする。すなわち、クリップ空間のニア値およびファー値とＺバッファメモリ空間との対応付けを個別に定義できるような機能が実装されていることを前提とする。
【０１２７】
この機能について説明すると、Ｚバッファメモリ空間が、例えば、図２２に示すように、０．０〜１．０の範囲であるとする。そして、上述の機能は、この場合に、当該メモリ空間の一部分のみをクリップ空間に割り当てるという機能である。例えば、通常はニアクリップ面の位置を０．０、ファークリップ面の位置を１．０に割り当てるが、ニアクリップ面の位置を０．２、ファークリップ面の位置を１．０に割り当てるようなことも可能である。その上で、仮想空間に含まれないオブジェクト（たとえば字幕等）を０．０〜０．２の範囲に割り当てて描画をすることで、当該オブジェクトを常に手前に表示させることができるものである。この機能を用いて、通常ポリゴンを描画するときは、Ｚ値の範囲として０．０〜１．０の範囲を割り当てて処理するが、浮かせポリゴンを描画するときは、０．０〜０．２の範囲だけ割り当てて処理するようにすれば、浮かせポリゴンは手前に表示されることになる。すなわち、浮かせポリゴンについては、Ｚ値の取り得る値の範囲が０．０〜０．２となるように調整するものである。このときのオフセットは０．８であるが、ポリゴンの前後の判定さえできればよいので、実際のオフセットの量は微小な値で十分であり、たとえばＺの最小精度の数倍程度でよい。調整の仕方としては、上述のようにオフセットの結果０．０〜１．０の範囲外になった部分を削除することになる。それ以外にも、オフセットと共に範囲を縮小させて０．０〜０．２の範囲に収まるようにしてもよい。本実施形態では、通常ポリゴンの描画処理の際に上述したようなＺバッファメモリ空間の割り当てを設定する処理（具体的には、後述する変数Ｖｎ、Ｖｆの設定）を実行する。Ｚバッファメモリ空間の割り当てを変更することによって、結果的にＺ値のオフセットを行ったのと同様の効果が得られる。そして、浮かせポリゴンの描画処理の際に、上記の割り当て設定に所定のオフセットを加えてから浮かせポリゴンの描画処理を実行することになる。つまり、浮かせポリゴンを処理するに際して、上記図２１の曲線２１１（通常ポリゴンの設定で算出したＺ値の曲線）を、オフセットの分だけ下方に垂直に移動させて曲線２３１とするような処理を行う。
【０１２８】
次に、第２の実施形態の処理の詳細を説明する。基本的な処理の流れは、上述の第１の実施形態と同様であるが、第１の実施形態で図１９を用いて説明した描画処理の内容が、第２の実施形態では図２３に示すような処理となる。図２３において、まず最初に、ステップＳ１１において、通常ポリゴンを描画する際に用いるクリップ空間のクリッピング面を設定する処理が実行される。すなわち、クリップ空間のニア値とファー値を設定する処理が実行される。
【０１２９】
次に、ステップＳ５１において、通常ポリゴン用のＺバッファ空間の割り当てが実行される。例えば、Ｚバッファメモリ空間（Ｚ値の取り得る範囲）が０．０〜１．０の範囲であるとすると、その全てを通常ポリゴン用に割り当てるため処理が実行される。ここでは、メモリ空間の割り当てのための変数として、変数Ｖｎおよび変数Ｖｆを用いる場合を例に挙げる。変数Ｖｎは、クリップ空間のニア値に対応するＺバッファメモリ空間での値を示し、変数Ｖｆはクリップ空間のファー値に対応するＺバッファメモリ空間での値を示す。これらの変数は、後述する処理において用いられる。
【０１３０】
なお、この割り当て設定は、明示的に上記の範囲を指定するような処理を実行しても良いし、逆に、明示的に割り当てを指定しなければ、初期値として全ての範囲が指定されるようにしてもよい。
【０１３１】
次に、ステップＳ１２において、上述の第１の実施形態と同様に、描画対象ポリゴンとして「通常ポリゴン」を選択する処理が実行される。
【０１３２】
次に、ステップＳ１３において、第１の実施形態で図２０を用いて説明したようなポリゴン描画処理が実行される。但し、第２の実施形態においては、上述のステップＳ３７で処理対象ポリゴンのＺ座標Ｚｓｃｒｅｅｎを算出する際に、上記式２の代わりに、上記変数ＶｎおよびＶｆを用いて、例えば以下のような式で算出される。
Ｚｓｃｒｅｅｎ＝Ｚｃｌｉｐ／Ｗｃｌｉｐ×（Ｖｆ−Ｖｎ）＋Ｖｆ  ・・・式３
【０１３３】
通常ポリゴンの描画処理が終われば、次に、ステップＳ５２において、浮かせポリゴン用のＺバッファ空間の割り当て、すなわち、上述したようなオフセットの設定が実行される。具体的には、まず、変数ｏｆｆｓｅｔに所定の値が設定される（例えば、Ｚ値の最小精度の８個分を変数ｏｆｆｓｅｔに設定する）。次に、変数Ｖｎおよび変数Ｖｆが、以下の式で算出される。
Ｖｎ＝Ｖｎ＋ｏｆｆｓｅｔ
Ｖｆ＝Ｖｆ＋ｏｆｆｓｅｔ
このように、変数Ｖｎ、Ｖｆの値にオフセットを加えることで、上述したようなオフセットの設定が行われることになる。
【０１３４】
次に、ステップＳ１５において、第１の実施形態と同様の処理で描画対象ポリゴンとして「浮かせポリゴン」を選択する処理が実行される。
【０１３５】
続くステップＳ１６で、浮かせポリゴンを対象としたポリゴン描画処理が実行される。ここでは、上記ステップＳ５２においてオフセットが設定されているため、上記式３で算出されるＺｓｃｒｅｅｎの値は、オフセットが反映された結果が算出され、図２１の曲線２３１に相当するような結果となる。すなわち、Ｚ値について仮想カメラ側にずらしたような値を算出することができ、結果的に、第１の実施形態と同様の効果が得られる。
【０１３６】
このように、第２の実施形態では、ニア値、ファー値は通常ポリゴン、浮かせポリゴン共に同じものを使うが、浮かせポリゴンの処理に際してオフセットをＺ値に加えるような処理を実行している。これにより、第１の実施形態同様、浮かせポリゴンについては仮想カメラ側にずらしたような状態で深度テストを行うことができ、Ｚバッファの誤差によるちらつきの発生を防ぐことが可能となる。
【０１３７】
なお、上記浮かせポリゴンに関して、上述の各実施形態では、例えば地面ポリゴンから文字通り少し浮かせたような位置に浮かせポリゴンを配置（つまり、近接する位置関係）する例を挙げた。これに限らず、浮かせポリゴンと通常ポリゴンとを同じ位置（奥行き方向に関して）に配置してもよい。つまり、必ずしも「浮かせ」て配置しなくても、上述したような処理を実行することで、深度テストに際して、浮かせポリゴンについては仮想カメラ側にずらしたような状態とすることができる。
【０１３８】
また、上記浮かせポリゴンの描画に関して、浮かせポリゴンについては半透明で表示されるように描画しても良い。これにより、浮かせポリゴンに隠れている通常ポリゴンの部分についても視認できるようになり、よりリアリティのある画像を生成、表示することができる。
【０１３９】
また、通常ポリゴンについての描画処理と浮かせポリゴンの描画処理の処理順番に関して、上記実施形態では、まず通常ポリゴンを描画して、その後浮かせポリゴンを描画するという処理順番となっている。しかし、上述したような半透明表現は使わないことを前提とすれば、当該処理順番は逆であっても良い。上述したような処理で、深度テストにおいては浮かせポリゴンについては仮想カメラ側にあるとより確実に判定されるため、通常ポリゴンの描画を後にしたとしても、同様の効果が得られるためである。
【０１４０】
また、上記各実施形態では、通常ポリゴンと浮かせポリゴンとを別々のデータに分けてメモリに格納していたが（通常ポリゴンデータ１２４と浮かせポリゴンデータ１２５）、これに限らず、両者を識別するための情報を各ポリゴンデータに含めるように構成しても良い。例えば、「ポリゴン種別」のような項目を各ポリゴンデータにもたせるようにデータを構築する。そして、描画処理においては、当該「ポリゴン種別」の内容を判定し、その内容に応じて、通常ポリゴン用の設定と浮かせポリゴン用の設定（ニア値やファー値、オフセット）を使い分けてポリゴン描画処理を実行するようにしても良い。
【０１４１】
また、上述の第１の実施形態および第２の実施形態の各処理手法については、両者を併用して実行するようにしても良い。すなわち、通常ポリゴンの描画と浮かせポリゴンの描画とでクリップ空間のニア値およびファー値に異なる値を設定するという手法（第１の実施形態）と共に、浮かせポリゴンを描画するときは所定のオフセットを加える（第２の実施形態）手法を使っても良い。
【産業上の利用可能性】
【０１４２】
本発明にかかる画像処理装置および画像処理プログラムは、Ｚバッファの誤差によるちらつきの発生を防ぐことができ、Ｚバッファ法による３次元画像を描画するゲーム装置等の画像処理装置に有用である。
【符号の説明】
【０１４３】
１…ゲームシステム
２…モニタ
２ａ…スピーカ
３…ゲーム装置
４…光ディスク
７…コントローラ
１０…ＣＰＵ
１１…システムＬＳＩ
１１ａ…入出力プロセッサ
１１ｂ…ＧＰＵ
１１ｃ…ＤＳＰ
１１ｄ…ＶＲＡＭ
１１ｅ…内部メインメモリ
１２…外部メインメモリ
１３…ＲＯＭ／ＲＴＣ
１４…ディスクドライブ
１５…ＡＶ−ＩＣ
１６…ＡＶコネクタ
１７…フラッシュメモリ
１８…無線通信モジュール
１９…無線コントローラモジュール
２０…拡張コネクタ
２１…外部メモリカード用コネクタ
２２…アンテナ
２３…アンテナ
２４…電源ボタン
２５…リセットボタン
２６…イジェクトボタン
７１…ハウジング
７２…操作部
７３…コネクタ
７４…撮像情報演算部
７４１…赤外線フィルタ
７４２…レンズ
７４３…撮像素子
７４４…画像処理回路
７５…通信部
７５１…マイコン
７５２…メモリ
７５３…無線モジュール
７５４…アンテナ
７００…基板
７０１…加速度センサ
７０２…ＬＥＤ
７０３…水晶振動子
７０４…バイブレータ
７０７…サウンドＩＣ
７０８…アンプ
【図１】
2010191916.tif 000003
【図２】
2010191916.tif 000004
【図３】
2010191916.tif 000005
【図４】
2010191916.tif 000006
【図５】
2010191916.tif 000007
【図６】
2010191916.tif 000008
【図７】
2010191916.tif 000009
【図８】
2010191916.tif 000010
【図９】
2010191916.tif 000011
【図１０】
2010191916.tif 000012
【図１１】
2010191916.tif 000013
【図１２】
2010191916.tif 000014
【図１３】
2010191916.tif 000015
【図１４】
2010191916.tif 000016
【図１５】
2010191916.tif 000017
【図１６】
2010191916.tif 000018
【図１７】
2010191916.tif 000019
【図１８】
2010191916.tif 000020
【図１９】
2010191916.tif 000021
【図２０】
2010191916.tif 000022
【図２１】
2010191916.tif 000023
【図２２】
2010191916.tif 000024
【図２３】
2010191916.tif 000025
【図２４】
2010191916.tif 000026
【図２５】
2010191916.tif 000027
【図２６】
2010191916.tif 000028