画像処理方法、画像処理装置、画像処理プログラム、及び記憶媒体
![](A,2010-134872_000002.jpg)
【課題】表示品質の高い等高線状の線ポリゴンの描画方法を提供する。
【解決手段】まず、所定の平面との交差する頂点である交点を求める。次に、この交点を集めた後で、交点を距離によりソートを行う。次に、ソートされた座標情報のうち、1つの座標情報と近接する他の座標情報との中点をとって座標情報を更新する。次に、ソートした交点の座標に、視点又はカメラ方向のベクトルの座標を加算する。そして、ソートされ、ベクトルの座標が加算された交点の座標を基に、接続した線分を情報処理装置を用いて3次元CGとして描画する。
【解決手段】まず、所定の平面との交差する頂点である交点を求める。次に、この交点を集めた後で、交点を距離によりソートを行う。次に、ソートされた座標情報のうち、1つの座標情報と近接する他の座標情報との中点をとって座標情報を更新する。次に、ソートした交点の座標に、視点又はカメラ方向のベクトルの座標を加算する。そして、ソートされ、ベクトルの座標が加算された交点の座標を基に、接続した線分を情報処理装置を用いて3次元CGとして描画する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、仮想3次元空間の画像処理方法、画像処理装置、画像処理プログラム、及び記憶媒体において、特に描画品質が高い接続した線分を描画する画像処理方法、画像処理装置、画像処理プログラム、及び記憶媒体に関する。
【背景技術】
【0002】
従来、高度なCG(コンピュータ・グラフィックス)を描画するための機器は、業務用CG製作機器や、通常「ゲームセンター」と呼ばれる遊戯施設等にある高価な遊技機器にのみ搭載されていた。
しかし、近年のコンピュータの演算能力のめざましい進歩により、高度なCGが一般化している。実際に、実写と見間違うほどの精緻な物体や風景を、3次元コンピュータ・グラフィックスを描画するグラフィックプロセッサが、比較的安価に販売されている。
【0003】
このようなグラフィックプロセッサでは、数万〜数百万もの多数の「ポリゴン」と呼ばれる多面体に、テクスチャと呼ばれる画像を貼り付け、明度や影の表現を行い、秒速数十回〜数百回という単位でリアルタイム(実速度)でレンダリング(描画)して、立体的な物体や風景を描画する。さらに、近年の高度なグラフィックプロセッサでは、光源追跡(レイ・トレーシング)やラジオシティといった、より演算能力が必要なCG表現を可能としたものも実現されつつある。
そして、このようなグラフィックプロセッサは、通常のPC(パーソナル・コンピュータ)の高価な外付けグラフィック・ボードのみならず、一般(コンシューマ)向けのビデオゲーム機、携帯電話等の携帯端末にも内蔵されてきている。
【0004】
しかしながら、従来の3次元コンピュータ・グラフィックス(仮想3次元空間の描画方法)の場合には、実際には複数のポリゴンによって構成されたオブジェクトなどが2次元の液晶ディスプレイ等にアフィン変換等されて投影される。
このため、写実的な表現はできても、高さ等の立体的な感覚を読み取ることが難しいことがあった。
【0005】
そこで、描画表現を用いて表現される複数のポリゴンからなるオブジェクトなどの「高さ」を示す技術が必要とされていた。
ところが、近年、グラフィックプロセッサの描画するポリゴン数が多くなりすぎたため、仮想3次元空間内における、オブジェクトを構成するそれぞれのポリゴンからポリゴンの「高さ」を求めること、つまり、仮想空間内におけるオブジェクトの高さや高度などを求めることは難しかった。
また、単に各ポリゴンの所定の高さ位置同士を「直線」でつないで表現すると、直線のギザギザが目立つという問題があった。すなわち、レンダリングにより明度や影がなめらかに表現されているものと対比すると、線分の直線性に違和感が生じるという問題があった。
【0006】
このため、頂点を直線でつなぐのではなく、頂点を曲線で描画することが考えられる。このような曲線の描画方法としては、ベジェ曲線やB−スプライン曲線が用いられている(特許文献1の従来技術を参照)。しかしながら、従来の曲線描画方法では、非常に多くの演算が必要であるという問題があった。
そこで、特許文献1を参照すると、複数の座標データによって指定された各線分の中点を演算して曲線補間によって近似曲線を生成する近似曲線演算手段と、該近似曲線演算手段によって演算された曲線の誤差に関する閾値を設定する閾値設定手段と、該閾値設定手段によって設定された閾値と前記近似曲線演算手段によって演算された曲線の誤差とを比較して誤差の有無を判別する誤差判別手段と、該誤差判別手段によって誤差があると判断されたとき、当該線分の中点で分割された各線分について、前記近似曲線演算手段により、曲線補間によって近似曲線を生成し、前記誤差判別手段によって誤差がないと判断されたとき、当該座標データを記憶するメモリ手段とを備え、該メモリ手段に記憶された座標データによってアウトラインフオント等の文字や図形等を描画することを特徴とする情報処理装置が記載されている(以下、従来技術1とする。)。
【0007】
従来技術1の情報処理装置は、頂点の中点をとって頂点を複数回更新して更新前後の誤差が所定以下となると曲線を描画するために、曲線の描画演算に際して、曲線の座標を乗算することなしに、簡単かつ迅速に実行可能な加算や除算だけで、直線による曲線近似ができるので、高速度の曲線補間処理を行うことができる。
【0008】
【特許文献1】特許第3059739号公報
【発明の開示】
【発明が解決しようとする課題】
【0009】
ベジェ曲線、B−スプライン曲線、及び従来技術1の情報処理装置による従来の描画方法は、頂点を更新してそのまま曲線で補間するので、頂点を更新したときに元の頂点の位置情報とのずれが大きいまま曲線補間を行うが、これを仮想3次元空間上での描画方法に用いると、頂点が他のポリゴンの背後に埋もれてしまい、補間された曲線を表示できなくなったり、描画精度が落ちるという問題があった。
【0010】
本発明は、このような状況に鑑みてなされたものであり、上述の課題を解消することを課題とする。
【課題を解決するための手段】
【0011】
本発明の画像処理方法は、仮想3次元空間に複数のポリゴンから形成されるオブジェクトと仮想視点を配置し、前記仮想視点から見た前記オブジェクトの画像を生成する画像処理方法であって、各ポリゴンの頂点座標を取得し、該頂点座標に基づき、前記各ポリゴンの辺を求め、前記各ポリゴンの辺ごとに、所定の高さ情報を備えた複数の点の座標情報を求める工程と、所定の座標情報を基準として前記座標情報をソートする工程と、前記ソートされた座標情報のうち、1の座標情報と該1の座標情報と近接する他の座標情報との中点をとって座標情報を更新する工程と、更新された座標情報に、前記仮想視点又は前記仮想視点の座標情報に基づく方向ベクトル座標を加える工程と、方向ベクトル座標が加えられた座標情報から線を描画する工程とをコンピュータの制御手段に実行させることを特徴とする。
本発明の画像処理方法は、前記座標情報を求める工程は、前記各ポリゴンのそれぞれの辺において、高さ情報を備えたポリゴンとの交差点である座標情報を求める工程をコンピュータの制御手段に実行させることを特徴とする。
本発明の画像処理方法は、前記座標情報を更新する工程は、前記ソートされた座標情報のうち、ソートを開始した座標情報とソートを終了した座標情報とが所定距離内に位置するとき、前記各座標情報間の距離を小さくする工程を更にコンピュータの制御手段に実行させることを特徴とする。
本発明の画像処理方法は、前記方向ベクトル座標を加える工程は、前記更新された座標情報に方向ベクトルを加える工程をコンピュータの制御手段に実行させることを特徴とする。
本発明の画像処理方法は、前記線を描画する工程は、前記方向ベクトル座標を加えられた座標情報の3点ごとに線を描画する工程を更にコンピュータの制御手段に実行させることを特徴とする。
本発明の画像処理方法は、前記線を描画する工程は、線の描画を開始した座標情報と描画を終了した座標情報とが所定距離内に位置するとき、前記線の描画を開始した座標情報と前記描画を終了した座標情報を更新し、該更新された各座標情報間を直線で描画する工程を更にコンピュータの制御手段に実行させることを特徴とする。
本発明の画像処理方法は、前記線を描画する工程は、前記仮想3次元空間内に設定される所定の座標情報との距離に応じて前記線の色相、明度、彩度のいずれか1つを変化させる工程を更にコンピュータの制御手段に実行させることを特徴とする。
本発明の画像処理装置は、仮想3次元空間に複数のポリゴンから形成されるオブジェクトと仮想視点を配置し、前記仮想視点から見た前記オブジェクトの画像を生成する画像処理装置であって、前記画像処理装置は、各ポリゴンの頂点座標を取得し、該頂点座標に基づき、前記各ポリゴンの辺を求め、前記各ポリゴンの辺ごとに高さ情報を有する複数の点の座標情報を求める手段と、所定の座標情報を基準として前記座標情報をソートする手段と、前記ソートされた座標情報のうち、1の座標情報と該1の座標情報と近接する他の座標情報との中点をとって座標情報を更新する手段と、更新された座標情報に、前記仮想視点又は前記仮想視点の座標情報に基づく方向ベクトル座標を加える手段と、方向ベクトルの座標が加えられた座標情報から線を描画する手段とを備えることを特徴とする。
本発明の画像処理プログラムは、仮想3次元空間に複数のポリゴンから形成されるオブジェクトと仮想視点を配置し、前記仮想視点から見た前記オブジェクトの画像を生成する画像処理プログラムであって、各ポリゴンの頂点座標を取得し、該頂点座標に基づき、前記各ポリゴンの辺を求め、前記各ポリゴンの辺ごとに所定の高さ情報を有する複数の点の座標情報を求める手順と、所定の座標情報を基準として前記座標情報をソートする手順と、前記ソートされた座標情報のうち、1の座標情報と該1の座標情報と近接する他の座標情報との中点をとって座標情報を更新する手順と、更新された座標情報に、前記仮想視点又は前記仮想視点の座標情報に基づく方向ベクトル座標を加える手順と、方向ベクトルの座標が加えられた座標情報から線を描画する手順とをコンピュータの制御手段に実行させることを特徴とする。
本発明の記録媒体は、前記画像処理プログラムをコンピュータに実行させるためのプログラムをコンピュータ読取可能に構成されたことを特徴とする。
【発明の効果】
【0012】
本発明によれば、頂点座標間の中点をとって頂点座標を更新後に、仮想視点又は仮想カメラ方向に更新した頂点座標を移動させるので、更新後の頂点が埋まってしまい上手く線描画できなくなることを防止できる描画方法を提供することができる。
【発明を実施するための最良の形態】
【0013】
<第1の実施の形態>
〔ゲーム装置10の制御構成〕
本発明の第1の実施の形態に係るゲーム装置10(情報処理装置)は、PC/AT互換機等のPC(パーソナル・コンピュータ)、業務用機器、遊技機器、一般向け(コンシューマ)ゲーム機器、携帯端末等であり、高度なCGの描画機能を備えている。
図1を参照して説明すると、ゲーム装置10は、CPU100(制御手段)と、主記憶部110(主記憶手段)と、補助記憶部120(補助記憶手段)と、ブートROM130と、ペリフェラルI/F140と、バスアービタ150と、グラフィックプロセッサ160(描画手段)と、グラフィックメモリ170と、オーディオプロセッサ180と、オーディオメモリ190と、通信I/F200とを含んで構成される。
【0014】
CPU100は、CPU(Central Processing Unit、中央処理装置)、MPU(Micro Processing Unit)、DSP(Digital Siganl Processor)、ASIC(Application Specific Processor、特定用途向けプロセッサー)等である演算・制御能力を備えた制御手段である。また、CPU100に、主記憶部110や補助記憶部120やグラフィックプロセッサ160やオーディオプロセッサ180等の機能を備えることも可能である。
【0015】
主記憶部110は、RAM(Random Access Memory)等の主記憶用に使われる高速な記憶手段である。
主記憶部110には、後述するように、主に後述する地面オブジェクト400のポリゴン数を少なくして、他のオブジェクトとの衝突を検出するために使われるコリジョンオブジェクト450を備えている。
なお、このコリジョンオブジェクト450は、グラフィックメモリ170上に備えることも可能である。また、地面オブジェクト400から、グラフィックプロセッサのアダプティブ・メッシュ機能等を用いて動的に生成することも可能である。
【0016】
補助記憶部120は、HDD(Hard Disk Drive)、フラッシュメモリ、SRAM(スタティックRAM)、磁気テープ装置、光ディスク装置等の補助記憶手段である。補助記憶部120には、ゲーム装置10をコンピュータとして機能させるためのOS(Operating System、図示せず)が備えられており、各アプリケーションプログラムが各種API(Application Programming Interface)により、ゲーム装置10の各機能にアクセス可能である。
このアプリケーションプログラムとして、本発明の第1の実施の形態に係るゲーム装置10では、コリジョンオブジェクト450をいくつかの高さで輪切り状態にして等高線状の線ポリゴン(接続した線分)である「高さポリゴン」を求める高さポリゴン作成部125を備えている。この高さポリゴン作成部125は、他の、例えばゴルフゲームのプログラムに用いるためのクラスやサブルーチン等の単位として備えることができる。また、高さポリゴン作成部125を、他のプログラムから汎用的に呼び出すDLL(ダイナミック・リンキング・ライブラリー)や共通クラスとして備えることも可能である。
【0017】
詳細に説明すると、高さポリゴン作成部125は、メインプログラムと、交点取得部310(交点取得手段)、交点ソート部320(交点ソート手段)、色決定部325(色決定手段)、視点方向移動部330(視点方向移動手段)、曲線作成部340(曲線作成手段)、及び終点処理部350(終点処理手段)のような、各種クラスや付随するデータを含んで構成される。
交点取得部310は、横をx座標、縦をy座標、奥行きをz座標とする左手座標系(本発明の第1の実施の形態に係る描画方法において、以下、左手座標系を用いて説明する。)における、例えば、コリジョンオブジェクト450を構成する複数のポリゴンと、所定の高さ(y座標)をもったx−z平面とが交差するときの座標情報(以下、交点)を取得する。なお、この交点については、平面ではない交点を求めることも可能である。
交点ソート部320は、交点取得部310により取得された交点の情報を、例えば、所定の座標情報(点)からの距離を基準としてソートする(並び換える)。この所定の座標情報(点)としては、例えば、高さポリゴン作成部125をゴルフゲームに用いる場合は、ゴルフにおけるグリーン上のカップが設定されている位置の位置座標を用いることが好適である。なお、この位置座標としては、カップが設定されている位置の仮想3次元空間での点の座標や、カップが設定されている位置のx−y軸の線がx−z平面と交差した点の座標等を用いることができる。また、所定の座標情報からの距離として、単純に、仮想視点が設定されている位置の位置座標からの距離を用いることも可能である。さらに、ワールド座標からビュー座標に変換した後のz軸の座標値等を用いることもできる。また、交点ソート部320は、ソートした交点の情報から、曲線描画のために、中点を取得する処理についても行う。
色決定部325は、等高線状の線ポリゴンの色を決める。この等高線状の線ポリゴンの色としては、例えば、高さポリゴン作成部125をゴルフゲームに用いる場合は、ゴルフにおけるグリーンの所定の座標情報(カップが設定されている位置や、グリーン上のゴルフボールが配置されている位置)からの高さの値に従って、寒色〜暖色のグラデーションのような色を選択して表現することができる。
視点方向移動部330は、各交点について、視線方向のベクトルを加えて移動する処理を行う。これにより、粗いコリジョンオブジェクト450から作成された曲線が、コリジョンオブジェクト450の中に埋もれて描画されないことを防ぐことができる。
曲線作成部340は、ソートされて中点を取得した頂点について、更に中点を取得する等の処理を行って、なめらかな曲線の頂点を作成する。この曲線の頂点を作成する処理については、後述する。この曲線の頂点を作成する処理により、誤差を少なくして、少ない交点から曲線を描画することができる。
終点処理部350は、曲線の端と端が接続される場合に、直線的に接続されることを防ぐための処理を行う。これにより、例えば、ゴルフゲームのカップ付近のように、等高線状の曲線が円を描いた際にも、なめらかな曲線を描画することができる。
【0018】
ブートROM130は、ROMやNOR型フラッシュメモリやSRAM等の不揮発性記憶媒体である。ブートROM130は、ゲーム装置10が起動する際に、CPU100のマイクロコードの設定を行ったり、各部の初期化を行ったり、補助記憶部120からOS等が起動するような指示を行ったりする。
【0019】
ペリフェラルI/F140は、各種周辺機器(ペリフェラル)に接続するための、USB、IEEE1394、シリアル、パラレル、赤外線、無線等のインターフェイスを提供する部位である。各種周辺機器としては、ゲームパッド、スティック型コントローラー、加速度検出器、振動装置等のフォースフィードバック装置、足踏み/手押し式のスイッチ、ディスプレイモニタの画面上の位置を検出する位置検出器、CCD/CMOSカメラ、タッチパッド、タッチパネル、キーボード、マウスやトラックボール等のポインティングデバイス、ライトの点灯用コントローラー等を用いることができる。
【0020】
バスアービタ150は、いわゆる「チップセット」等の、各部を接続するためのバスインターフェイスを提供する集積回路である。このバスアービタ150で接続される各部のバスのスピードは異なっていてもよく、上り/下りで非対称であってもよい。また、例えば、CPU100と、主記憶部110と、バスアービタ150の間はFSBやHTといった高速なバスで接続され、グラフィックプロセッサ160とバスアービタ150の間も広帯域なバスで接続されるのが好適である。さらに、CPU100にDDR2/3 SDRAMやXDR DRAM等のバスインターフェイスが内蔵されて、主記憶部110を直接読み書きするように構成されていてもよい。
【0021】
グラフィックプロセッサ160は、高度な3次元CGを描画する機能をもつグラフィックプロセッサである。グラフィックプロセッサ160は、ポリゴンのジオメトリ(座標)の計算を行うジオメトリ部162と、ジオメトリ計算が行われたポリゴンをラスタライズ/レンダリング(描画)するレンダリング部164とを含んで構成される。また、グラフィックプロセッサ160は、液晶ディスプレイやPDP(プラズマ・ディスプレイ・パネル)やHMD(ヘッドマウントディスプレイ)やプロジェクター等であるディスプレイモニタに描画された画像を出力するために、RAMDAC(RAM D/Aコンバーター)やHDMIインターフェイス等を備えている。
ジオメトリ部162は、ポリゴンの3次元空間での座標(ワールド座標)について、行列の回転や拡大等を行って、アフィン変換等を行い、ポリゴンの2次元空間での座標を求める部位である。また、ジオメトリ部162は、ポリゴンの分割やスプライン補完等のテッセレーションを行う、「ジオメトリシェーダ」(又はバーテックスシェーダ)を備えることもできる。
レンダリング部164は、座標計算されたポリゴンについて、テクスチャと呼ばれる画像データを貼り付け、各種効果を加えてグラフィックメモリ170に描画する部位である。この各種効果としては、プログラマブル・シェーダ等を用いて、光点・影(シェーディング)計算、明暗の表現、半透明、ぶれ、霧、ぼかし、HDR(ハイダイナミックレンジ合成)等の計算を行うことができる。また、レンダリング部164が描画するポリゴンの種類としては、点ポリゴン(ポイント)、線ポリゴン(ラインリスト)、三角形や四角形といった面ポリゴン、面ポリゴンの集合体等がある。加えて、レンダリング部164がレイ・トレーシング等を用いて描画を行う際には、円、楕円、球、メタボール等の領域で定義される物体を描画することも可能である。
なお、ジオメトリ部162を、CPU100にて処理するように構成することも可能である。この場合は主記憶部110に記憶するプログラムをCPU100が実行して作成したポリゴンの座標を、グラフィックメモリ170に転送等を行う。レンダリング部164は、このポリゴンの座標に従って、ポリゴンを描画する。
【0022】
グラフィックメモリ170は、グラフィックプロセッサ160が描画するために高速に読み書きができる記憶媒体である。たとえば、このグラフィックメモリとして、GDDR(Graphics Double Data Rate(グラフィックス・ダブル・データレート))等の広帯域なメモリを高レベルのインターリーブ等を用いて接続することができる。また、システムLSIのようにグラフィックメモリをグラフィックプロセッサ160に内蔵する構成も可能である。また、グラフィックプロセッサ160が描画している間に、ディスプレイモニタに表示するためのデュアルポート構成をとることも可能である。
本発明の第1の実施の形態に係るグラフィックメモリ170には、例えばゴルフゲーム用のポリゴンの情報として、多数のポリゴンで構成されている、地面オブジェクト400と、物体オブジェクト410とを備えることができる。なお、このポリゴンの情報としては、ポリゴンの3次元の座標、テクスチャ、色、光源の位置等を記憶することができる。
地面オブジェクト400は、地形を描画するための多数のポリゴンの情報を記憶したポリゴンの集合体のオブジェクトである。この地面オブジェクト400は、数万〜数十万単位の多数のポリゴンを備えていたり、ポリゴンをテッセレーションにより補完して描画するためのデータを備えているため、例えば、ゴルフ場の風景をフォト・リアリスティック(写実的)に描画することができる。地面オブジェクトには、芝目等や草等の「ファー(毛皮)・シェーディング」で自然に表現するためのオブジェクトも含まれる。地面オブジェクト400は、このように多数のポリゴンを含んでいるために、地面オブジェクト400とボール等のオブジェクトとの衝突・交差計算を行うのは容易ではない。このために、本発明の第1の実施の形態に係る描画方法では、地面オブジェクト400のポリゴン数を少なくしたコリジョンオブジェクト450を用いる。
物体オブジェクト410は、木や建物などの風景に関する物体のポリゴンの情報を記憶したポリゴンの集合体のオブジェクトである。実際に、ボール等の衝突計算を行うときには、コリジョンオブジェクト450と、この物体オブジェクト410とを合わせたポリゴンの集合体を用いて衝突計算を行うことが好適である。また、この物体オブジェクト410と、地面オブジェクト400とは、一体的なデータとして構成することも、分離された状態で構成することもできる。
【0023】
オーディオプロセッサ180は、音楽や音声や効果音を出力するためのPCM(Wave)音源等を備えたDSP(デジタル・シグナル・プロセッサ)等である。オーディオプロセッサ180は、物理演算音源、FM音源等の計算を行い、残響や反射等の各種音声効果を計算することもできる。オーディオプロセッサ180の出力は、D/A(デジタル・アナログ)変換され、デジタルアンプ等に接続されて、実際にスピーカーで音楽や音声や効果音として再生される。また、オーディオプロセッサ180は、マイクから入力した音声の音声認識等にも対応している。
オーディオメモリ190は、音楽や音声や効果音のためのデジタル変換されたデータを記憶している記憶媒体である。オーディオプロセッサ180とオーディオメモリ190とを一体的に構成することも当然可能である。
【0024】
通信I/F200は、LAN(ローカル・エリア・ネットワーク)、WAN(ワイド・エリア・ネットワーク)等のネットワークに接続するための(例えば、有線/無線LAN、WiMax(登録商標)、電話線、携帯電話網、PHS網、電灯線ネットワーク、cLink、HDMI、IEEE1394等)インターフェイスである。通信I/F200を介して、他のゲーム装置やサーバ装置へと通信可能に接続することができる。これにより、例えば、ゴルフゲームの場合には、通信可能に接続されている他のゲーム装置のプレイヤーと共同で遊んだり、複数のゲーム装置が通信可能に接続されたサーバ装置がスコアの集計等を行ったりすることなどが可能である。
【0025】
〔本発明の第1の実施の形態に係る描画処理〕
ここで、図2〜図11を更に参照して、ゲーム装置10を用いて、本発明の第1の実施の形態に係る描画処理を行う際に、ゴルフゲームのグリーン部分の等高線状の線ポリゴンの描画の例について説明する。
上述したように、近年のグラフィックプロセッサのように描画するポリゴンが多い場合には、地面や人物等のポリゴンの集合体であるオブジェクトと、他のオブジェクトとの衝突等の座標計算(以下、衝突演算という。)のために、膨大な演算能力が必要であるという問題があった。
このために、本発明の第1の実施の形態に係るゲーム装置10では、衝突演算のために、「コリジョンオブジェクト」と呼ばれる少ないポリゴン数(粗い)オブジェクトであるコリジョンオブジェクト450を用いる。このコリジョンオブジェクト450により、専用の「物理演算」ハードウェアを用いなくても、物体オブジェクト410のような人物や物体のオブジェクトと地面との接触・衝突する場合に、十分な精度で高速に計算することができる。
さらに、本発明の第1の実施の形態に係る描画方法では、このコリジョンオブジェクトを用いて、複雑で多数のポリゴンのデータである地面オブジェクト400の上に、等高線状の線ポリゴン(高さポリゴン)を描画することができる。
これにより、地面オブジェクト400のような多数のポリゴンを用いて重い(複雑な)計算をする必要がなく、リアルタイムで等高線状の線ポリゴンを描画できるという効果が得られる。
また、なめらかな地面オブジェクト400のような多数のポリゴンの上に線ポリゴンを描くことで、ポリゴン及びそのポリゴンの集合体であるオブジェクトの立体的な情報をユーザーが得やすくするという効果が得られる。
以下で、図2のデータ構成の概念図と、図3のフローチャートを参照して、本発明の第1の実施の形態に係る描画処理について詳しく説明する。
【0026】
〔高さポリゴン作成部125のデータ構成〕
まず、図2を参照して、高さポリゴン作成部125が用いるデータ構成について説明する。
高さポリゴン作成部125が用いるデータとしては、例えば、図2の表に示すような、コリジョンオブジェクトD101、交点座標D102(頂点座標、座標情報)、等高線下端高さD103、等高線上端高さD104、等高線間隔D105、といった配列(配列変数)や変数を用いることができる。
【0027】
コリジョンオブジェクトD101は、コリジョンオブジェクト450の三角、四角ポリゴンのリストに対して、各ポリゴンの各頂点の3次元座標を抽出して記憶する。
具体例を挙げて説明すると、コリジョンオブジェクトD101は、3次元座標を示すx軸、y軸、z軸の値と行列計算のためのw値の4つの単精度の浮動小数点の実数のデータを備えたベクトル(vec4f)型の配列(例えば、tris[])を用いることができる。ここでは、頂点数を増減させることを容易にするため、リジョンオブジェクトD101を構造体のリンクリストのようなデータ形式で構成して、「.pos1」、「.pos2」、「.pos3」といった3角形の各頂点の座標と、「.next」というコリジョンオブジェクトD101の次の構造体を示すポインタを、リンクリストの要素として記憶することもできる。この場合は、tris[]の終点(端点)にあたるtris[頂点数].nextの最後には、リンクリストの最後を示すNULL(NiL、空、0)等の値を記憶する。
なお、以下において、[]は、配列であることを示す。この配列としては、構造体の配列のように、ベクトルや行列の集合を用いることができる。また、本発明の実施の形態においては、「配列」には、リンクリスト(リスト)のようなデータ形式も含むものとする。
また、これらの配列や変数に用いる値としては、単精度の浮動小数点実数ではなく、倍精度や倍々精度のような浮動小数点の実数のデータ、固定小数点の実数のデータ、整数データ等を用いることも当然可能である。
【0028】
交点座標D102は、コリジョンオブジェクトD101の各三角、四角ポリゴンの各頂点を結んだ線と、x座標とz座標に平行なx−z平面とが交わった点である「交点」の座標、及びこの交点から中間点等を求めて作成する曲線の頂点の座標を記憶する。
具体例を挙げて説明すると、上述の「交点」の座標、及びこの交点から中間点等を求めて作成する曲線の頂点の座標を記憶する配列(例えば、配列hline_list[][])を用いることができる。
また、この配列は、等高線状の線ポリゴンを描画する数×各曲線の座標数の領域を確保して用いることができる。
【0029】
等高線下端高さD103は、x−z平面の高さを示す値の最小値である。
具体例を挙げて説明すると、等高線下端高さD103は、等高線状の線ポリゴンを描画する最低の高さを示している変数(例えば、変数hline_min)を用いることができる。
また、この変数に代入する等高線下端高さD103の値としては、例えば、ゴルフゲームの場合には、グリーンの部分の高さの最小値を用いることができる。
また、後述するように本発明の第1の実施の形態に係る描画方法において、高さポリゴン作成部125を投射影表現に用いる場合には、仮想空間内で人物や物体等を構成するオブジェクトの周囲の地面の高さの最小値を用いることができる。
さらに、地面オブジェクトのy座標の最小値/最大値といった値を単純に用いることも可能である。
【0030】
等高線上端高さD104は、x−z平面の高さを示す値の最大値である。
具体例を挙げて説明すると、等高線上端高さD104は、等高線状の線ポリゴンを描画する最大の高さを示している変数(例えば、変数hline_max)を用いることができる。
この変数に代入する等高線上端高さD104の値としては、例えば、ゴルフゲームの場合には、グリーンの部分の高さの最大値等を用いることができる。
【0031】
等高線間隔D105は、等高線状の線ポリゴンを描画するx−z平面の高さの間隔(等高線の間隔)を示す値である。
具体例を挙げて説明すると、等高線間隔D105は、等高線状の線ポリゴンを描画する間隔を示している変数(例えば、変数hline_width)を用いることができる。
この変数に代入する等高線間隔D105の値は、例えばゴルフゲームの場合は、等高線上端高さD104の値から、等高線下端高さD103の値を引いて、等高線状の線ポリゴンを描画する数(等高線の本数)で割ることで求められるが、これに限られない。
【0032】
なお、この他にも、それぞれの等高線状の線ポリゴンに係る値を用いることができる。
具体的には、それぞれの等高線状の線ポリゴンに係る値を示す変数hは、整数の変数として、初期値を0とし、下記の高さポリゴン作成部125のメインプログラムのループ内を実行後にインクリメント(1足す)され、等高線の本数が最大値となる。
【0033】
また、交点座標D102の配列に記憶される交点や曲線の頂点の数に係る値として、頂点数(初期値は0)を備えることができる。
具体例を挙げて説明すると、交点座標D102の配列hline_list[][]に記憶する交点や曲線の頂点の数である変数として、頂点数numを備える。この頂点数numには、変数hの各値における交点座標D102の要素数(例えば、hline_list[変数h][]の要素数)を、必要なときに代入して使用する。
【0034】
加えて、最終的に曲線描画のための新たな線ポリゴン用のリンクリストや配列(例えば、p[][])も、等高線の本数分だけ用意することが可能である。
【0035】
以下で、図3のフローチャートを参照して、高さポリゴン作成部125のメインプログラムの処理について、各ステップを追いながら説明する。
高さポリゴン作成部125においては、図3のループで示したように、等高線の本数だけ各処理(関数)を呼び出していることが分かる。
なお、以下の描画処理は、CPU100が、補助記憶部120に記憶された高さポリゴン作成部125のプログラムやクラスを、ハードウェア資源を用いて演算制御して実行することで実現することができる。
【0036】
(ステップS101)
まず、高さポリゴン作成部125は、頂点取得処理を行う。
高さポリゴン作成部125は、この頂点取得処理においては、等高線状の線ポリゴンを作成したい部分、すなわち等高線を引きたい部分のコリジョンオブジェクト450の三角形、四角形ポリゴンの頂点座標を取得する。
具体的には、高さポリゴン作成部125は、この取得した頂点座標を、主記憶部110や補助記憶部120に、上述したコリジョンオブジェクトD101の配列のリンクリストとして記憶し、配列の最後を示すポインタをNULLとする。
また、この処理において、高さポリゴン作成部125は、等高線状の線ポリゴンを描画する本数(以下、等高線の本数と呼ぶ。)を求める。この等高線の本数は、例えば50本等の所定の値を設定することもできるし、等高線下端高さD103の値と等高線上端高さD104の値との差から好適な本数を決定することもできる。またビューポイント内のポリゴンの数等を用いて、最適な値を求めることもできる。
【0037】
(ステップS102)
ここで、高さポリゴン作成部125は、すべての等高線を処理しているか判定する。
具体的には、高さポリゴン作成部125は、図3のループのループ内で、すべての等高線状の線ポリゴンを作成する処理を終了したか判定する。
このループとしては、例えばfor()ループのようなループ構造を用いることができる。ここでは、高さポリゴン作成部125は、処理する等高線状の線ポリゴンの本数を示す整数の変数hの初期値を0と設定し、その後、高さポリゴン作成部125は、変数hが描画する等高線の本数を超えているかを判定する。
(ステップS102がYesの場合)
変数hが描画する等高線の本数と同じか超えていると判断した場合には、すべての等高線を処理しているものとして、本発明の第1の実施の形態に係る描画処理を終了する。
(ステップS102がNoの場合)
変数hが描画する等高線の本数より少ないと判断した場合には、ループ内の各処理を実行する。高さポリゴン作成部125は、ループ内の各処理の実行後に、変数hに1を足すなど、変数hに対してインクリメントを行い、また判定を行う。
【0038】
(ステップS103)
ここで、高さポリゴン作成部125の交点取得部310は、交点計算処理を行う。
すなわち、交点取得部310は、コリジョンオブジェクト450とx−z平面との交点を求めて、交点座標D102に記憶する。
具体例を挙げて説明すると、この交点計算処理においては、ステップS101で得られた三角形、四角形のポリゴンのリストであるコリジョンオブジェクトD101のリンクリストに対して、すべての交点を計算する。つまり、この交点の計算では、Triangleという、3角形ポリゴンのポインタを示す型の変数triを定義し、この変数triに配列(tris[])のアドレスを渡す。すなわち、変数triは、各ポリゴンを示すことができる。この上で、配列(tris[])の各要素を示すtri.nextがNULLになるまで、すなわち、すべてのポリゴンを処理するまで、for()やuntil()のようなループとして各ポリゴンと変数hに係るx−z平面の高さでの交点計算を行う。
以下で、図4のフローチャートを参照して、このステップS103の交点計算処理の具体的な処理の流れについて更に詳しく説明する。
【0039】
(ステップS1031)
まず、交点取得部310は、ポリゴン3次元座標取得処理を行う。言い換えれば、交点を計算する三角形ポリゴンの各頂点を取得する。
具体的には、例えば、上述の3次元の座標を示すvec4f型の変数であるp1、p2、p3に、triの各頂点の座標、tri.pos1、tri.pos2、tri.pos3をそれぞれ代入して記憶する。
【0040】
(ステップS1032)
次に、交点取得部310は、等高線の高さ取得処理を行う。
この処理においては、等高線下端高さD103の値に等高線間隔D105の値×変数hを計算した値を足して、上述のx−z平面の高さ、すなわち「等高線の高さ」を計算する。
具体例を挙げて説明すると、等高線の高さを示す変数(変数hline_point)を用意して、以下の式(1)を計算して、「等高線の高さ」を求める。
hline_point = hline_min + hline_width×h …… 式(1)
【0041】
(ステップS1033)
次に、交点取得部310は、線分p1、p2にx−z平面との交点があるかを判定する。
つまり、この判定では、頂点p1とp2とを結ぶ線分に、等高線の高さに応じたx−z平面に平行な面との交点があるかどうかを判定する。
具体的に記載すると、左手座標系におけるy=hline_pointの面と、線分p1、p2との交点があるかを判定する。
【0042】
(ステップS1034)
ステップS1033の判定がYESの場合、交点取得部310は、交点の座標を交点座標D102に追加する処理を行う。
具体例を挙げて説明すると、交点取得部310は、交点があった場合には、交点座標D102に(例えばhline_list[変数h][頂点数num]として)記憶する。そして、ここでは、さらに交点の数(本実施の形態では頂点数numの値)をインクリメントする。
【0043】
(ステップS1035)
ステップS1033の判断がNOの場合、又はステップS1034の処理が行われた後、交点取得部310は、線分p2、p3にx−z平面との交点があるかを判定する。
つまり、この判定では、頂点p2とp3とを結ぶ線分に、等高線の高さに応じたx−z平面に平行な面との交点があるかどうかを判定する。
具体的に記載すると、左手座標系におけるy=hline_pointの面と、線分p2、p3との交点があるかを判定する。
【0044】
(ステップS1036)
ステップS1035の判断がYESの場合、交点取得部310は、交点の座標を交点座標D102に追加する処理を行う。
具体的に記すと、この処理は、ステップS1034と同様に、交点取得部310が、交点があった場合に、交点座標D102に(例えば配列hline_list[変数h][頂点数num]として)記憶する。そして、交点の数(ここでは頂点数numの値)をインクリメントする。
【0045】
(ステップS1037)
ステップS1035の判断がNOの場合、または、ステップS1036の処理が行われた後、交点取得部310は、線分p3、p1にx−z平面との交点があるかを判定する。
つまり、この判定では、頂点p3とp1とを結ぶ線分に、等高線の高さに応じたx−z平面に平行な面との交点があるかどうかを判定する。
具体的に記載すると、左手座標系におけるy=hline_pointの面と、線分p3、p1との交点があるかを判定する。
【0046】
(ステップS1038)
ステップS1037の判断がYESの場合、交点取得部310は、交点の座標をD102に追加する処理を行う。
具体的には、この処理もステップS1034と同様に、交点取得部310が、交点があった場合に交点座標D102に(例えばhline_list[変数h][頂点数num]として)記憶する。そして、交点の数(ここでは頂点数numの値)をインクリメントする。
【0047】
(ステップS1039)
ステップS1037の判断がNOの場合、又はステップS1038の処理が行われた後、交点取得部310は、すべてのポリゴンを処理しているか判定する。
具体例を挙げて説明すると、配列(tris[])に設定されている変数tri「.next」がNULLになっているか等について判定を行う。
ステップS1039の判断がNoの場合は、次のポリゴンについて、ループ内の処理を繰り返す。具体的には、配列(tris[])に設定される変数triがtri「.next」として設定され、上述のステップS1031〜S1038の処理を行う。
逆にステップS1039の判断がYesの場合は、交点計算処理を終了する。
以上の交点計算処理により、交点取得部310は、変数hに係る所定の高さ毎に、等高線状の線ポリゴンの交点座標を記憶することができる。
【0048】
図5を参照すると、このステップS103の状態で、交点座標D102の各交点(頂点)をコリジョンオブジェクト450と一緒に点ポリゴンのように描画した例である。
ここで、変数hが所定の値における交点座標D102の各交点を描画した各交点群を、交点1000として示す。
交点1000の頂点の状態では、点の数が少なく、このまま各点を結んで線を引くと、ギザギザした直線の集まりとして描画されることが推測できる。
【0049】
(ステップS104)
ここでまた図3を参照して説明すると、高さポリゴン作成部125の交点ソート部320は、交点ソート・中点補完処理を行う。
この交点ソート・中点補完処理は、主に交点ソート処理と中点補完処理を含んでおり、上述の交点の座標から、より曲線に近い等高線状の頂点の集合を得ることができる。
以下で、図6のフローチャートと、図7A〜図7Eの概念図を参照して、ステップ104の交点ソート・中点補完処理の具体的な処理の内容について具体例を挙げて説明する。なお、以下の説明において、図7Aを参照し、変数hの値における交点座標D102に記憶されている交点の数が4つある場合について説明する。
【0050】
(ステップS1041)
まず、交点ソート部320は、距離取得初期値設定処理を行う。
図7Bを参照し、具体例を挙げて説明すると、まず、交点ソート部320は、3次元空間の座標を示す上述のvec4f型の変数Xと変数start_posを用意する。
交点ソート部320は、各交点との距離を計算するための座標を変数Xに代入する。すなわち、例えば、ゴルフゲームの場合は、仮想空間内のグリーンに設定されるカップの3次元空間の座標情報などを変数Xに代入する。
なお、変数Xには所定の座標(例えば仮想視点(ビューポイント)の位置)から一番遠い座標を入力し、変数start_posに所定の座標を代入することも可能である。
【0051】
その後、交点ソート部320は、変数Xの座標から一番距離が大きい(遠い)最遠点の交点を、変数hの値における交点座標D102から検索して、変数start_posにその交点の座標を代入する。
図7Bの例においては、この最遠点の交点が、始点Sとなり、変数start_posには、始点Sの座標が代入される。
【0052】
(ステップS1042)
次に、交点ソート部320は、交点ソート処理を行う。
図7Cを参照すると、交点ソート部320は、例えば、変数hの値における交点座標D102の交点が、変数Xの座標を基準として遠い点から近い点にするようにソートを行う。
すなわち、ある座標から一番離れた頂点である交点を始点として、そこから一番近い交点を次の頂点とし、これらの交点を並べるようにソートする。この例では、交点ソート部320は、始点Sから、頂点P1、頂点P2、終点Gの順になるようにソートする。
【0053】
(ステップS1043)
次に、交点ソート部320は、全ての交点を処理したか判定する。すなわち、変数hの値における交点座標D102の配列のすべての交点についてのソートを終えたかについて、判定を行う。
Yesの場合、交点ソート部320は、処理をステップS1044に進める。
Noの場合、交点ソート部320は、処理をステップS1042に戻してソートを続ける。
【0054】
図7Cの例においては、ソートを終えた時点で、交点ソート部320は、変数hの値における交点座標D102について、始点S、頂点P1、頂点P2、終点Gのような順番になるようにソートする。
【0055】
なお、ここでは、説明を容易にするために、選択ソートのようなアルゴリズムを用いて交点をソートする例について示している。しかし、このソートに関しては、バブルソートやクイックソート等のソート手法をすべて用いることができる。
本発明の第1の実施の形態に係る描画方法では、コリジョンオブジェクト450を用いるので、交点が少ないため、選択ソートやバブルソートを用いても、処理時間は殆ど問題にならない。
【0056】
また、上述の交点ソート・中点補完処理においては、所定の点からの距離を基にソートを行う例について示しているが、これに限られるものではない。
また、交点ソート処理については、コリジョンオブジェクト450からコリジョンオブジェクトD101を取得するときに、所定の座標からの距離でソートして、変数hの値における交点座標D102を選択する際に自動的に所定の座標を基準として、その所定の座標の近くから遠くの座標の順番、又は所定の座標の遠くから近くの座標の順番で取得するようにすることもできる。
また、交点ソート処理に代えて、変数hの値における交点座標D102の最短距離の交点同士を、ダイクストラ法のような手法を用いて接続することもできる。
また、交点ソート処理や上述のダイクストラ法の処理により、所定の距離以上離れた頂点があった場合には、変数hの値における交点座標D102を基にして、等高線状の線ポリゴンを分割することもできる。この分割は、各交点を結んだ線分の交差判定を行って、交差する線が出る箇所で分割することも可能である。これにより、例えば、ゴルフゲームの場合は、仮想空間に設定されるグリーンに隆起が2カ所以上あるような場合にも対応可能である。
また、ソートにより一番近い交点同士を結んでも、交点の数が多い場合には、間違った点を選択することもあり得る。このため、交点を結んだ線分の交差判定を行って、例えば、正しいと思われる交点を順にたどるといった所定のルールを用いて(ヒューリスティック) に処理することも可能である。
また、そもそも交点を判定するのではなく、コリジョンオブジェクト450と交差する線分を取得して、これらの線分の情報を備えたまま、線分同士の頂点を接続するようにすることも可能である。
【0057】
(ステップS1044)
ステップS1043でYESと判定されたとき、又は、後述するS1045の判定でNOと判定されたとき、交点ソート部320は、中点補完処理を行う。
図7Dを参照して説明すると、この中点補完処理は、ソートした頂点を、平均をとってならす(均す)処理である。
すなわち、変数hにおける交点座標D102の配列に各交点の1つ前の交点の座標と足して2で割る中点を求めて、それぞれの配列に代入(更新)する。
【0058】
(ステップS1045)
次に、交点ソート部320は、全ての交点を処理したか判定する。
具体的には、変数hの各値における交点座標D102(配列hline_list[変数h][])のすべての交点についての中点に更新したかについて、判定を行う。
Yesの場合、交点ソート部320は、交点ソート・中点補完処理を終了する。また、終点を、変数hにおける交点座標D102の配列に追加する。
Noの場合、交点ソート部320は、処理をステップS1044に戻して中点補完処理を続ける。
【0059】
図7Eを参照すると、実際に変数hの値における交点座標D102について、中点補完処理を行った後の各頂点の様子を示している。変数hにおける交点座標D102の配列は、最終的に、始点S、中点になった頂点P1、中点になった頂点P2、中点P3、新たな終点Gのような状態で記憶される。
【0060】
図8を参照して説明すると、中点補完処理を行った後に、交点座標D102の各頂点を図5と同様に、点ポリゴンのように描画した例である。また、変数hの値における交点座標D102の各交点を描画したものを、中点補完後の頂点1010として示す。
図8の中点補完後の頂点1010の状態では、図5の交点1000と比べて、かなりなめらかな曲線に近づいており、また、中点を計算して新たな頂点として更新することで、各頂点間の距離のばらつきが抑えられるため、曲線にしやすくなるという効果が得られる。
【0061】
(ステップS105)
ここで、また図3を参照して説明すると、色決定部325は、色決定処理を行う。
すなわち、この色決定処理においては、例えばゴルフゲームの場合、所定の頂点であるグリーン上のカップの座標と、等高線状の線ポリゴンの高さ(軸方向の距離)との差の値を用いて、等高線状の線ポリゴンの色を決める。
ここで図9(a)を参照して具体例を挙げて説明すると、ここでは、変数hの値における交点座標D102の各交点に設定するための色を計算する。つまり、色の計算については、等高線の高さ(等高線の高さを示す変数である変数hline_point)の値を用いて計算を行う。高さポリゴン作成部125は、この等高線の高さを示すhline_pointと、上述の変数Xに入れたのと同様の所定の座標のy座標とを比較して、変数hの値における交点座標D102の各要素(各交点)に対する色を計算する。たとえば、ゴルフゲームの場合は、所定の座標をカップの座標(水準原点)として、この座標との高さの違いを、「cm」のような所定単位で所定の計算式から計算する。そして、カップの座標との差により、カップの座標と差がない場合は薄い色で表現し、高い場合は赤色を濃くして表現し、低い場合は青色を濃くして表現する。
なお、色の選択方法として、例えば、予め記憶部に上述の等高線の高さの値に対応したインデックス番号と、そのインデックス番号に対応した画像情報(R成分、G成分、B成分、α(透明度)成分)とを対応づける色情報テーブルを格納しておくとともに、その色情報テーブルを参照して、等高線状の線ポリゴンの色を選択して表現することもできる。また、上述の画像情報のRGB各成分及びα成分の代わりに色相、彩度、明度、輝度の値を成分として設定することもできる。
【0062】
図9(b)を参照すると、ゴルフゲームのグリーンに実際に等高線状の線ポリゴンを描画した例を示している。
この図9(b)では、カップの近くの線が薄くなっており、グリーンの内側に描かれている等高線状の線ポリゴンが色が濃くなり、実際には赤く表示されており、高さが高くなっていることが容易に判断できる。
なお、等高線の高さはx−z平面の高さには限られない。すなわち、軸方向の距離としては、任意の座標系の一次元の距離を用いることが可能である。また、等高線状の線ポリゴンの色としては、等高線の高さや仮想視点との距離を用いて、より単純に濃淡で表現することもできる。また、地面オブジェクト400の色を参照して、これを高さにより所定の割合で反転したり、色成分を高さにより加算や減算する等の画像処理を行って、等高線状の線ポリゴンを描画することも可能である。
【0063】
(ステップS106)
ふたたび図3を参照して説明すると、高さポリゴン作成部125の視点方向移動部330は、視点方向移動処理を行う。
この視点方向移動処理においては、等高線状の線ポリゴンが潜ってしまわないようにするために、仮想視点(ビューポイント)方向に、交点座標D102の各頂点の座標を移動する処理を行う。
以下で、図10のフローチャートを参照して、ステップS106の視点方向移動処理の具体的な処理の流れについて説明する。
【0064】
(ステップS1061)
まず、視点方向移動部330は、座標初期設定処理を行う。
つまり、視点方向移動部330は交点座標の各頂点の座標として、3つの座標を設定する。
具体例を挙げて説明すると、視点方向移動部330は、変数hの値における交点座標D102の各頂点の座標として、座標1、座標2、座標3として、上述のvec4f型の変数first_pos、second_pos、third_posを設定する。
そして、ループのカウンタ用の変数iを設定し、以下の、ループ内の処理を実行する。
【0065】
(ステップS1062)
ここで、視点方向移動部330は、座標1、2、3設定処理を行う。
すなわち、この処理においては、視点方向移動部330は、座標1、座標2、座標3として設定した値のうち、3つ連続する座標の値を選択する処理を行う。
具体例を挙げて説明すると、視点方向移動部330は、この座標1、座標2、座標3として、変数first_pos、second_pos、third_posに、変数iに係る3つ連続する変数hの値における交点座標D102の要素のアドレス(番地)を選択して割り当てる。
【0066】
(ステップS1063)
次に、視点方向移動部330は、座標1、2、3移動処理を行う。
この座標1、2、3移動処理においては、視点方向移動部330は、まずは、選択した3点の真ん中の頂点(上述の具体例では、変数second_pos)に合わせて3点を仮想視点、又はビュー座標系のビューポイント等であるカメラの座標の方向に所定の値(方向ベクトル座標)だけ移動させる。
この視点又はカメラの方向に移動させるための所定の値としては、コリジョンオブジェクト450又は地面オブジェクト400のポリゴンの大きさの最大値、コリジョンオブジェクト450又は地面オブジェクト400の視点方向の高さの差の最大値等を基に、等高線状の線ポリゴンが潜ってしまわないようにするための値を計算することができる。
【0067】
(ステップS1064)
次に、視点方向移動部330は、すべての頂点を処理し終えたかについて判定する。
具体的には、for()やuntil()ループにおいて、変数iが変数hにおける交点座標D102の頂点数numと同じか大きくなったについて、判定を行う。
Yesの場合、視点方向移動部330は、視点方向移動処理を終了する。
Noの場合、視点方向移動部330は、変数iをインクリメントし、処理をステップS1062に戻してステップS1062〜ステップS1064のループの処理を続ける。
【0068】
以上のような視点方向移動処理により、ステップS105で中点での更新をしたため、頂点が地面オブジェクト400やコリジョンオブジェクト450に潜って描画されなくなることを防ぐことが可能になる。
また、3点の真ん中の頂点を基準として仮想視点の方向に移動するため、描画時の誤差が少なく、地面オブジェクト400やコリジョンオブジェクト450から離れて浮き上がっているように見えることもなく、真実の等高線のようにぴったりと地面上に描画されているようなレンダリング結果を得ることができる。なお、視点方向移動処理は3点ごとに実行するものに限らず、2点以上の複数の頂点であれば、視点方向移動処理を実行することができる。また、必ずしも真ん中の頂点を基準としなくても、各頂点について仮想視点の方向に移動するような処理を行うことも可能である。
【0069】
なお、この視点方向移動処理を行わない場合は、地面オブジェクト400と物体オブジェクト410が分離して備えられているようなデータ構造の場合、描画順の変更により対応可能である。たとえば、(1)地面オブジェクト400を描画、(2)等高線状の線ポリゴンを描画、(3)物体オブジェクト410を描画、というような手段も考えられる。
しかしながら、ポリゴンをzバッファ等を用いて描画する近年のグラフィックプロセッサの描画方法においては、描画順を分けて描画を行うのは現実的ではなく、後述するように高さポリゴン作成部125を影の作成に用いた場合等にはzバッファの誤差のせいで表示品質が著しく落ちる。
すなわち、本発明の第1の実施の形態に係る描画方法のように、視点方向移動処理を用いることで、複数のオブジェクトの描画順を考慮せず、zバッファの誤差も気にせずに、描画品質を保ったポリゴン上への輪郭線の描画が可能になるという顕著な効果が得られる。
また、このような表示品質は、特に画像表現の高品質さが求められるゲーム装置の分野では非常に有効である。
【0070】
(ステップS107)
また図3に戻って説明すると、次に、曲線作成部340は、曲線作成処理を実行する。
ここで、図11の概念図を参照して、曲線作成処理について、より具体的に説明する。
【0071】
図11のように、変数hの値における交点座標D102の各頂点として、頂点a、頂点b、頂点c、頂点dが記憶されているとする。
この上で、まず、頂点a、頂点b、頂点cの3点に対して曲線にする曲線作成処理を行う例について説明する。
最初に、曲線作成部340は、頂点aと頂点bの中点である頂点sの座標を計算する。
次に、曲線作成部340は、頂点bと頂点cの中点である頂点tの座標を計算する。
次に、曲線作成部340は、頂点sと頂点tの中点である頂点iの座標を計算する。
そして、次に、曲線作成部340は、頂点aの座標を曲線描画のための新たな線ポリゴン用のリンクリストp[変数h][]に頂点a、頂点s、頂点iの座標をそれぞれ代入してゆく。
【0072】
この上で、曲線作成部340は、次の連続する3点を頂点i、頂点c、頂点dの3点に対して、上述の処理を繰り返すことができる。
このような処理により、通常のベジェ曲線の計算よりもより高速に、曲線の計算が可能になる。
【0073】
なお、曲線作成処理を別のクラスやルーチンにて実行することもできる。この場合は、頂点a〜iを示す変数は、スコープが可視である、グローバル変数等を用いることができる。
また、この曲線描画処理については、計算スピードを厭わなければ、3点を用いて曲線に均してゆく手法以外にも、B−スプライン曲線や、ベジェ曲線の計算を行う等の処理を用いることも可能である。
【0074】
(ステップS108)
ここで再び図3を参照して説明すると、次に、終点処理部350は、終点処理を行う。
この終点処理において、終点処理部350は、例えばゴルフゲームの場合、グリーンの山の頂上付近で等高線が環状(円状態)になる場合についての処理を行う。すなわち、上述の曲線作成処理では、端の点から連続する3点について近づける(平均する、丸める)処理を行っているために、端同士をつなげた部分の線ポリゴンの描画になめらかさが欠けるという問題に対応する。具体的に説明すると、線ポリゴン用の端の頂点(リンクリストp[変数h][0])と、もう一方の端の頂点(線ポリゴン用のリンクリストp[変数h][曲線の頂点数])をつなぐと、直線上に見えてしまうという問題の処理を行うものである。
ここでは、線ポリゴン用のもう一方の端の頂点(線ポリゴン用のリンクリストp[変数h][曲線の頂点数])と、線ポリゴン用の端の頂点(線ポリゴン用のリンクリストp[変数h][0])と、線ポリゴン用の端の頂点に隣接する頂点(線ポリゴン用のリンクリストp[変数h][1])とを連続する3点として、曲線作成処理の3点を近づける処理を行うことで対処可能である。また、この3点だけではまだ直線に見える場合には、さらに周囲の頂点を用いて3点を近づける処理を行うことができる。
【0075】
以上のように、高さポリゴン作成部125は、ステップS102〜S108を実行することで、等高線状の線ポリゴンを一本作成することが可能である。上述したように、このループを繰り返すことで、等高線の本数分だけ、等高線状の線ポリゴンを作成できる。
すべての等高線状の線ポリゴンを作成した後、高さポリゴン作成部125は、グラフィックプロセッサ160を用いて、グラフィックメモリ170上に、この等高線状の線ポリゴンを描画する。
これにより、本発明の第1の実施の形態に係る描画処理を終了する。
【0076】
図12を参照して説明すると、各頂点間を線分で結んだ曲線1020である、等高線状の線ポリゴンを描画した例を示す。
このように、図5の単にx−z平面の交点を取得しただけの場合や、図8の単に中点で補完しただけの場合に比べて、非常になめらかな曲線を描画できることが分かる。
なお、ステップS104の中点補完処理と、ステップS107の曲線に均す「中点で更新する処理」を繰り返すことにより、さらに曲線に近い線ポリゴンを描画することが可能である。
【0077】
以上のように構成することで、以下のような効果を得ることができる。
まず、ベジェ曲線、B−スプライン曲線、及び従来技術1を用いた描画方法においては、頂点を更新してそのまま曲線で補間するように構成されている。
このため、頂点を更新したときに元の頂点の位置情報とのずれが大きいまま曲線補間をするため、正確な描画ができないという問題があった。
これにより、特にベジェ曲線、B−スプライン曲線、及び従来技術1の描画方法を仮想3次元空間における画像処理方法として用いようとすると、更新後に頂点が他のポリゴンに埋もれてしまうという問題があった。このため、描画の精度やクォリティが落ちるという問題があった。
【0078】
これに対して、本発明の第1の実施の形態に係る描画方法では、頂点間の中点をとって頂点を更新した後で、仮想視点又はカメラ方向に所定のベクトル座標(方向ベクトル座標)を頂点に加えてから曲線を補間する。
これにより、更新後の頂点が地面オブジェクト等に埋まってしまい描画できなくなったり、浮き上がりすぎて見えることを防止できる。
また、更新後の頂点をカメラ方向に向かせてから曲線を描画するので、複雑な処理なく精度良く曲線を描画できるという効果が得られる。
また、ポリゴンの交点の頂点をソートしてから、一筆書きのように描画を行うことで、等高線状の線ポリゴンを、容易な処理で作成可能であるという効果が得られる。このために、3次元空間の平面との交差の計算の後、内外判定等を行って、輪郭線を抽出するなどの複雑な処理を行う場合に比べて、演算コストを抑えることが可能になる。
このため、高度な描画能力をもつ、近年のグラフィックプロセッサで、細かいポリゴンの地面オブジェクト400の上に、容易に等高線状の線ポリゴンを描画することができる。
加えて、上述の第1の実施の形態においては、コリジョンオブジェクト450をトライアングルストリップのように面を構成する情報もあるものとして説明した。しかし、実際には、本発明の第1の実施の形態に係る描画方法では、交点を求めるポリゴンの集合体であるオブジェクトについて、頂点によりどうポリゴンの面を構成するかという情報がない、頂点のみの集合を用いても、等高線状の線ポリゴンを描画できるという効果が得られる。
【0079】
また、従来技術1では、ポリゴン描画のための精度が低いために、従来技術1を用いて等高線を描画して、単純にy座標を足したり引いたりして浮かせた場合には、地面オブジェクト400から浮き上がって見えたり、ところどころ埋もれるという描画品質(クォリティ)の低下が起こるという問題があった。
これに対して、本発明の第1の実施の形態に係る描画方法は、中点を求めた後の頂点を、視点又はカメラ方向のベクトルを加算して、視点方向に移動してから曲線を描画するために、描画の破綻が非常に少ないという効果が得られる。
【0080】
なお、上述の第1の実施の形態においては、高さポリゴン作成部125を等高線状の線ポリゴンを作成する例について説明したが、これに限られない。
本発明の第1の実施の形態の描画方法は、例えば、投影シャドウのように、ポリゴンと交点を求めて、その輪郭線を描画するような仮想3次元空間における画像処理方法にすべて応用可能である。投影シャドウを描画する場合は、影内部をトライアングルファン等のように分割して、暗く描画することで実現可能である。
また、本発明の第1の実施の形態の描画方法は、例えば、トゥーンシェーダのような写実的ではない輪郭線を強調したようなポリゴン描画においても用いることができる。たとえば、輪郭線にポリゴンの縁のギザギザが出ることを抑えることが可能である。
また、本発明の第1の実施の形態の描画方法は、ゲームに限られず、各種シミュレーション、医療画像から腫瘍の輪郭の推定、動画像の各フレームの差分から物体の形状を割り出すといった処理にも応用して用いることが可能である。
【0081】
また、本発明の第1の実施の形態の描画方法での描画については、等高線状の線ポリゴンの描画について説明した。しかし、描画するポリゴンは、線ポリゴンには限られず、トライアングルストリップや柱状の厚みのある形状のポリゴンのオブジェクトであってもよい。
【0082】
<第2の実施の形態>
次に、本発明の第2の実施の形態に係るゲーム装置10を用いた描画処理について説明する。
本発明の第2の実施の形態に係る描画処理では、始点・終点に係る処理を更に加えることにより、例えば、ゴルフゲームの場合は、カップの近くで等高線が環状になる場合に、よりなめらかな等高線状の線ポリゴンを得ることができる。
【0083】
〔本発明の第2の実施の形態におけるゲーム装置10の制御構成〕
本発明の第2の実施の形態に係る描画処理では、高さポリゴン作成部125は、本発明の第1の実施の形態に係るゲーム装置10の高さポリゴン作成部125の交点ソート部320、視点方向移動部330、終点処理部350について、さらなる処理を行わせることができる。
交点ソート部320は、図13のステップS205の始点・終点移動処理を行い、ソート後の交点の始点と終点をより近づけることで、等高線状の線ポリゴンをなめらかにする。
視点方向移動部330は、図13のステップS207の始点方向カメラ移動処理を行う。視点方向移動部330は、始点方向カメラ移動処理により、曲線のなめらかさに合わせた等高線状の線ポリゴンの視点方向への移動が可能になる。
終点処理部350は、後述するステップS209の始点・終点曲線化処理を行う。この始点・終点曲線化処理により、特に等高線状の線ポリゴンが環状になっている場合に、特に始点と終点とを結ぶ等高線状の線ポリゴンを、よりなめらかに描画することができる。
【0084】
また、高さポリゴン作成部125のデータ構成としては、本発明の第1の実施の形態と同様のデータ構成を用いることができる。
以下で、図13のフローチャートを参照して、本発明の第2の実施の形態に係る高さポリゴン作成部125の描画処理の流れについて詳しく説明する。
【0085】
〔本発明の第2の実施の形態に係る描画処理〕
図13を参照すると、ゲーム装置10は、本発明の第2の実施の形態に係る描画処理であるステップS201〜S209の処理を実行する。
ここで、図3をもう一度参照すると、ステップS201はステップS101と、ステップS202はステップS102と、ステップS203はステップS103と、ステップS204はステップS104と、ステップS206はステップS105と、ステップS208はステップS107と同様な処理を行うことができる。
本発明の第2の実施の形態に係る描画処理においては、この上で、ステップS205、ステップS207、ステップS209の処理を行うことで、なめらかな等高線状の線ポリゴンを描画する。
以下で、ステップS205、ステップS207、ステップS209の各処理について詳しく説明する。
【0086】
(ステップS205)
交点ソート部320は、ステップS205において、始点・終点移動処理を行う。
図14A〜図14Bを参照して説明すると、交点ソート部320は、上述の図7Eの交点ソート・中点補完処理後の状態と同様に、始点S、頂点P1、P2、P3、終点Gのような状態になった場合に、最終的な処理として始点・終点移動処理を行う。
交点ソート部320は、まず、始点Sと終点Gが近いかどうかについて判定する。この近いかどうかについては、始点Sと終点Gの距離が所定の距離以下であった場合や、各頂点間の距離の平均距離の数倍といった値以下であるような条件を用いて判定を行う。
始点Sと終点Gが近くなかった場合は、交点ソート部320は処理を次のステップS206に進める。
始点Sと終点Gが近かった場合は、交点ソート部320は、以下で説明する実際の始点・終点移動処理を行う。
【0087】
図14Aを参照すると、実際の始点・終点移動処理においては:
交点ソート部320は、まず、始点Sと終点Gの中点Tを計算する。
次に、交点ソート部320は、始点Sと中点Tとの中点S’を計算する。
次に、交点ソート部320は、終点Gと中点Tとの中点G’を計算する。
この上で、図14Bを参照すると、
交点ソート部320は、始点Sの座標を、中点S'の座標に移動する。
また、交点ソート部320は、終点Gの座標を、中点G’の座標に移動する。
【0088】
このように、始点Sと終点Gを移動して、ソート後の交点の始点と終点をより近づけることで、等高線状の線ポリゴンが環状である場合に、よりなめらかに描画することができる。
また、始点Sと終点Gについても座標を移動するために、それ以外の等高線状の線ポリゴンの部位についても、なめらかに描画することができる。
【0089】
(ステップS207)
視点方向移動部330は、ステップS207において、視点方向カメラ移動処理を行う。
この視点方向カメラ移動処理においては、上述の第1の実施の形態におけるステップS106の視点方向移動処理と同様の処理に加えて、カメラ方向への移動量を設定して、視点方向への等高線状の線ポリゴンの移動を行う。
このカメラ方向への移動量としては、視点方向移動部330は、上述の中点で更新する処理の回数を考慮した上で移動量を設定することができる。
以下で、この視点方向カメラ移動処理について、より詳しく説明する。
【0090】
視点方向移動部330は、まず、頂点AをカメラCに移動させる例について説明する。カメラCは、上述のビューポイント(仮想視点)のような座標である。以下において、具体例を挙げて説明する。
頂点Aの座標を、例えば上述のvec4f型の変数Aposに代入する。また、カメラCの座標を、例えば上述のvec4f型の変数Cposに代入する。
この上で、カメラCから頂点AへのベクトルCAを、同様に上述のvec4f型の変数CAvecとして、このCAvecの値を以下の式(2)で求める。
CAvec = Cpos − Apos …… 式(2)
【0091】
ベクトルCAの単位ベクトルを上述のvec4f型の変数CAvec_Eとし、このCAvec_Eの値を以下の式(3)で求める。
CAvec_E = CAvec ÷ |CAvec| …… 式(3)
【0092】
ここで、視点方向移動部330は、カメラ方向への移動量を計算し、例えば上述のvec4f型の変数(例えば、変数transfer)に代入する。
このカメラ方向への移動量の値(方向ベクトル座標)としては、等高線状の線ポリゴンが浮き上がらないよう、また、他のポリゴンに埋没しないように微調整した値として、概ねベクトルの大きさが0.25のような所定の値を設定することができる。
さらに、視点方向移動部330は、中点で更新する処理回数と3点で曲線にする回数に比例して、カメラ方向への移動量の値を大きくする。例えば、概ね1.5倍のような比率で、移動量の値を大きくすることができる。
また、コリジョンオブジェクト450と、地面オブジェクト400のポリゴンのなめらかさの差、具体的にはポリゴン数の比率等を用いて計算することもできる。
【0093】
次に、視点方向移動部330は、頂点Aの移動後の座標の値をA’とすると、以下の式(4)を用いて、A’の値を求める。
A’ = Apos + (CAvec_E × transfer) …… 式(4)
この上で、視点方向移動部330は、A’の値を、変数Aposに代入する。
この処理を、頂点毎に繰り返して、視点方向移動部330は、視点方向カメラ移動処理を終了する。
【0094】
この視点方向カメラ移動処理により、コリジョンオブジェクト450がより荒くても、等高線状の線ポリゴンが地面オブジェクト400等に埋まったり上空に飛び出て見えるようにすることなく、確実に描画することができる。また、中点で更新する処理を複数回行って、地面オブジェクト400と等高線状の線ポリゴンとの誤差が生じた場合でも、等高線状の線ポリゴンを地面オブジェクト400に埋もれたり飛び出て見えることなく描画可能である。
すなわち、線のなめらかさに合わせた等高線状の線ポリゴンの視点方向への移動が可能になる。
【0095】
(ステップS209)
終点処理部350は、ステップS209において、始点・終点曲線化処理を行う。
この始点・終点曲線化処理については、始点と終点が近く、始点と終点とを結ぶ場合に、よりなめらかに等高線状の線ポリゴンを描画する。
以下で、図15のフローチャートと、図16A〜図16Cを参照して、ステップS209の始点・終点曲線化処理についてより詳しく説明する。
【0096】
(ステップS2091)
まず、終点処理部350は、始点と終点が近いかどうかについて判定する。この判定は、ステップS205の判定と同様に行う。すなわち、等高線状の線ポリゴンが環状になっているか否かの判定を行い、その結果に応じて、異なった処理に移行する。
つまり、上述の判定がYesの場合、等高線状の線ポリゴンが環状なので、終点処理部350は、処理をステップS2092に進める。逆に上述の判定がNoの場合、環状ではないので、終点処理部350は、処理をステップS2096に進める。
【0097】
(ステップS2092)
終点処理部350は、等高線状の線ポリゴンが環状の場合は、まず、始点再移動処理を行う。
図16Aを参照して、上述の例のように始点S、頂点P1、頂点P2、頂点P3、終点Gがある場合について、始点再移動処理の計算を説明する。
終点処理部350は、まず、終点G、始点S、頂点P1を用いて、終点Gと始点Sとの中点を求め、始点Sと頂点P1との中点を求め、この2つの中点の中点S’を求める。
この上で、終点処理部350は、始点Sの座標を、中点S’の座標に移動する。
【0098】
(ステップS2093)
次に、曲線作成部340は、上述の実施の形態1に係る図3のステップS107と同様に、曲線作成処理を行う。
図16Bを参照して説明すると、実際には、曲線作成部340は、移動された始点Sから、終点Gの手前の頂点まで、曲線作成処理を行う。すなわち、図16Bの中点Tと終点Gとは、線分で結ばない。
【0099】
(ステップS2094)
次に、終点処理部350は、曲線端点・始点曲線化処理を行う。
図16Cを参照して説明すると、終点処理部350は、中点T、終点G、始点Sの3つの頂点を用いて、曲線を作成する。
【0100】
(ステップS2095)
次に、終点処理部350は、曲線端点・始点結合処理を行う。
ここでは、終点処理部350は、上述のステップS2094で作成された最後の頂点と、始点Sとを接続する。これにより、なめらかな環状に接続された等高線状の線ポリゴンを作成することができる。
以上により、始点・終点曲線化処理を終了する。
【0101】
(ステップS2096)
曲線作成部340は、始点Sと終点Gが近くない場合、すなわち等高線状の線ポリゴンが環状でない場合には、ステップS107と同様に、曲線作成処理を行う。
図17を参照すると、上述のステップS2093とは異なり始点Sは移動されない状態で、曲線作成部340は、通常の曲線作成処理を行う。
【0102】
(ステップS2097)
次に、終点処理部350は、曲線端点・終点結合処理を行う。
すなわち、図17を参照すると、上述のステップS2096で作成された最後の頂点と、終点Gとを接続する。
これにより、環がつながっていない、線状の等高線状の線ポリゴンが作成できる。
以上により、始点・終点曲線化処理を終了する。
【0103】
図18を参照すると、本発明の第2の実施の形態に係る描画処理により描画した等高線状の線ポリゴンを示す。
環状になった等高線状の線ポリゴンについても、かなり円に近いようになめらかに描画されていることが分かる。
このように、本発明の第2の実施の形態に係る描画処理により、上述のように、例えばゴルフゲームの場合、カップの側等で等高線状の線ポリゴンが環状になっていても、破綻が少なく表示することができる。
【0104】
なお、本発明の第2の実施の形態に係る描画処理においても、コリジョンオブジェクト450のポリゴンが粗い場合には、中点での更新を繰り返すことで、より滑らかな等高線を描画することができる。すなわち、ステップS204の中点補完処理と〜ステップS209の始点・終点曲線化処理を繰り返して、なめらかな等高線状の線ポリゴンを描画することが可能である。
また、ステップS204の中点補完処理と、ステップS205の始点・終点移動処理とは、実行する順番を変えることもできる。
【0105】
なお、上記実施の形態の構成及び動作は例であって、本発明の趣旨を逸脱しない範囲で適宜変更して実行することができることは言うまでもない。
【図面の簡単な説明】
【0106】
【図1】本発明の第1の実施の形態に係るゲーム装置10の制御構成を示すブロック図である。
【図2】本発明の第1の実施の形態に係るデータ構成を示す概念図である。
【図3】本発明の第1の実施の形態に係る描画方法の各処理を示すフローチャートである。
【図4】本発明の第1の実施の形態に係る交点計算処理の各処理を示すフローチャートである。
【図5】本発明の第1の実施の形態に係る交点を点ポリゴンとして描画した画面例である。
【図6】本発明の第1の実施の形態に係る交点ソート・中点補完処理の各処理を示すフローチャートである。
【図7A】本発明の第1の実施の形態に係る変数hの値における交点座標D102の頂点の例である。
【図7B】本発明の第1の実施の形態に係る所定の座標から頂点までの距離を示す概念図である。
【図7C】本発明の第1の実施の形態に係る所定の座標から頂点までの距離による各頂点のソートを示す概念図である。
【図7D】本発明の第1の実施の形態に係る中点補完処理の概念図である。
【図7E】本発明の第1の実施の形態に係る中点補完処理を行った後の各頂点の様子を示す概念図である。
【図8】本発明の第1の実施の形態に係る中点補完処理後の頂点を点ポリゴンとして描画した画面例である。
【図9】本発明の第1の実施の形態に係る等高線状の線ポリゴンの色の計算方法を示す概念図である。
【図10】本発明の第1の実施の形態に係る視点方向移動処理の各処理を示すフローチャートである。
【図11】本発明の第1の実施の形態に係る曲線作成処理を説明する概念図である。
【図12】本発明の第1の実施の形態に係る等高線状の線ポリゴンを描画した画面例である。
【図13】本発明の第2の実施の形態に係る描画方法の各処理を示すフローチャートである。
【図14A】本発明の第2の実施の形態に係る始点・終点移動処理を説明する概念図である。
【図14B】本発明の第2の実施の形態に係る始点・終点移動処理を行った後の各頂点の様子を示す概念図である。
【図15】本発明の第2の実施の形態に係る始点・終点曲線化処理の各処理を示すフローチャートである。
【図16A】本発明の第2の実施の形態に係る始点・終点曲線化処理の始点再移動処理を説明する概念図である。
【図16B】本発明の第2の実施の形態に係る始点再移動処理後の曲線作成処理を説明する概念図である。
【図16C】本発明の第2の実施の形態に係る曲線端点・始点曲線化処理を説明する概念図である。
【図17】本発明の第2の実施の形態に係る始点・終点曲線化処理の始点Sと終点Gが近くない場合の処理の概念図である。
【図18】本発明の第2の実施の形態に係る等高線状の等高線状の線ポリゴンを描画した画面例である。
【符号の説明】
【0107】
10 ゲーム装置
100 CPU
110 主記憶部
120 補助記憶部
125 高さポリゴン作成部
130 ブートROM
140 ペリフェラルI/F
150 バスアービタ
160 グラフィックプロセッサ
162 ジオメトリ部
164 レンダリング部
170 グラフィックメモリ
180 オーディオプロセッサ
190 オーディオメモリ
200 通信I/F
310 交点取得部
320 交点ソート部
325 色決定部
330 視点方向移動部
340 曲線作成部
350 終点処理部
400 地面オブジェクト
410 物体オブジェクト
450 コリジョンオブジェクト
1000 交点
1010 中点補完後の頂点
1020 曲線
【技術分野】
【0001】
本発明は、仮想3次元空間の画像処理方法、画像処理装置、画像処理プログラム、及び記憶媒体において、特に描画品質が高い接続した線分を描画する画像処理方法、画像処理装置、画像処理プログラム、及び記憶媒体に関する。
【背景技術】
【0002】
従来、高度なCG(コンピュータ・グラフィックス)を描画するための機器は、業務用CG製作機器や、通常「ゲームセンター」と呼ばれる遊戯施設等にある高価な遊技機器にのみ搭載されていた。
しかし、近年のコンピュータの演算能力のめざましい進歩により、高度なCGが一般化している。実際に、実写と見間違うほどの精緻な物体や風景を、3次元コンピュータ・グラフィックスを描画するグラフィックプロセッサが、比較的安価に販売されている。
【0003】
このようなグラフィックプロセッサでは、数万〜数百万もの多数の「ポリゴン」と呼ばれる多面体に、テクスチャと呼ばれる画像を貼り付け、明度や影の表現を行い、秒速数十回〜数百回という単位でリアルタイム(実速度)でレンダリング(描画)して、立体的な物体や風景を描画する。さらに、近年の高度なグラフィックプロセッサでは、光源追跡(レイ・トレーシング)やラジオシティといった、より演算能力が必要なCG表現を可能としたものも実現されつつある。
そして、このようなグラフィックプロセッサは、通常のPC(パーソナル・コンピュータ)の高価な外付けグラフィック・ボードのみならず、一般(コンシューマ)向けのビデオゲーム機、携帯電話等の携帯端末にも内蔵されてきている。
【0004】
しかしながら、従来の3次元コンピュータ・グラフィックス(仮想3次元空間の描画方法)の場合には、実際には複数のポリゴンによって構成されたオブジェクトなどが2次元の液晶ディスプレイ等にアフィン変換等されて投影される。
このため、写実的な表現はできても、高さ等の立体的な感覚を読み取ることが難しいことがあった。
【0005】
そこで、描画表現を用いて表現される複数のポリゴンからなるオブジェクトなどの「高さ」を示す技術が必要とされていた。
ところが、近年、グラフィックプロセッサの描画するポリゴン数が多くなりすぎたため、仮想3次元空間内における、オブジェクトを構成するそれぞれのポリゴンからポリゴンの「高さ」を求めること、つまり、仮想空間内におけるオブジェクトの高さや高度などを求めることは難しかった。
また、単に各ポリゴンの所定の高さ位置同士を「直線」でつないで表現すると、直線のギザギザが目立つという問題があった。すなわち、レンダリングにより明度や影がなめらかに表現されているものと対比すると、線分の直線性に違和感が生じるという問題があった。
【0006】
このため、頂点を直線でつなぐのではなく、頂点を曲線で描画することが考えられる。このような曲線の描画方法としては、ベジェ曲線やB−スプライン曲線が用いられている(特許文献1の従来技術を参照)。しかしながら、従来の曲線描画方法では、非常に多くの演算が必要であるという問題があった。
そこで、特許文献1を参照すると、複数の座標データによって指定された各線分の中点を演算して曲線補間によって近似曲線を生成する近似曲線演算手段と、該近似曲線演算手段によって演算された曲線の誤差に関する閾値を設定する閾値設定手段と、該閾値設定手段によって設定された閾値と前記近似曲線演算手段によって演算された曲線の誤差とを比較して誤差の有無を判別する誤差判別手段と、該誤差判別手段によって誤差があると判断されたとき、当該線分の中点で分割された各線分について、前記近似曲線演算手段により、曲線補間によって近似曲線を生成し、前記誤差判別手段によって誤差がないと判断されたとき、当該座標データを記憶するメモリ手段とを備え、該メモリ手段に記憶された座標データによってアウトラインフオント等の文字や図形等を描画することを特徴とする情報処理装置が記載されている(以下、従来技術1とする。)。
【0007】
従来技術1の情報処理装置は、頂点の中点をとって頂点を複数回更新して更新前後の誤差が所定以下となると曲線を描画するために、曲線の描画演算に際して、曲線の座標を乗算することなしに、簡単かつ迅速に実行可能な加算や除算だけで、直線による曲線近似ができるので、高速度の曲線補間処理を行うことができる。
【0008】
【特許文献1】特許第3059739号公報
【発明の開示】
【発明が解決しようとする課題】
【0009】
ベジェ曲線、B−スプライン曲線、及び従来技術1の情報処理装置による従来の描画方法は、頂点を更新してそのまま曲線で補間するので、頂点を更新したときに元の頂点の位置情報とのずれが大きいまま曲線補間を行うが、これを仮想3次元空間上での描画方法に用いると、頂点が他のポリゴンの背後に埋もれてしまい、補間された曲線を表示できなくなったり、描画精度が落ちるという問題があった。
【0010】
本発明は、このような状況に鑑みてなされたものであり、上述の課題を解消することを課題とする。
【課題を解決するための手段】
【0011】
本発明の画像処理方法は、仮想3次元空間に複数のポリゴンから形成されるオブジェクトと仮想視点を配置し、前記仮想視点から見た前記オブジェクトの画像を生成する画像処理方法であって、各ポリゴンの頂点座標を取得し、該頂点座標に基づき、前記各ポリゴンの辺を求め、前記各ポリゴンの辺ごとに、所定の高さ情報を備えた複数の点の座標情報を求める工程と、所定の座標情報を基準として前記座標情報をソートする工程と、前記ソートされた座標情報のうち、1の座標情報と該1の座標情報と近接する他の座標情報との中点をとって座標情報を更新する工程と、更新された座標情報に、前記仮想視点又は前記仮想視点の座標情報に基づく方向ベクトル座標を加える工程と、方向ベクトル座標が加えられた座標情報から線を描画する工程とをコンピュータの制御手段に実行させることを特徴とする。
本発明の画像処理方法は、前記座標情報を求める工程は、前記各ポリゴンのそれぞれの辺において、高さ情報を備えたポリゴンとの交差点である座標情報を求める工程をコンピュータの制御手段に実行させることを特徴とする。
本発明の画像処理方法は、前記座標情報を更新する工程は、前記ソートされた座標情報のうち、ソートを開始した座標情報とソートを終了した座標情報とが所定距離内に位置するとき、前記各座標情報間の距離を小さくする工程を更にコンピュータの制御手段に実行させることを特徴とする。
本発明の画像処理方法は、前記方向ベクトル座標を加える工程は、前記更新された座標情報に方向ベクトルを加える工程をコンピュータの制御手段に実行させることを特徴とする。
本発明の画像処理方法は、前記線を描画する工程は、前記方向ベクトル座標を加えられた座標情報の3点ごとに線を描画する工程を更にコンピュータの制御手段に実行させることを特徴とする。
本発明の画像処理方法は、前記線を描画する工程は、線の描画を開始した座標情報と描画を終了した座標情報とが所定距離内に位置するとき、前記線の描画を開始した座標情報と前記描画を終了した座標情報を更新し、該更新された各座標情報間を直線で描画する工程を更にコンピュータの制御手段に実行させることを特徴とする。
本発明の画像処理方法は、前記線を描画する工程は、前記仮想3次元空間内に設定される所定の座標情報との距離に応じて前記線の色相、明度、彩度のいずれか1つを変化させる工程を更にコンピュータの制御手段に実行させることを特徴とする。
本発明の画像処理装置は、仮想3次元空間に複数のポリゴンから形成されるオブジェクトと仮想視点を配置し、前記仮想視点から見た前記オブジェクトの画像を生成する画像処理装置であって、前記画像処理装置は、各ポリゴンの頂点座標を取得し、該頂点座標に基づき、前記各ポリゴンの辺を求め、前記各ポリゴンの辺ごとに高さ情報を有する複数の点の座標情報を求める手段と、所定の座標情報を基準として前記座標情報をソートする手段と、前記ソートされた座標情報のうち、1の座標情報と該1の座標情報と近接する他の座標情報との中点をとって座標情報を更新する手段と、更新された座標情報に、前記仮想視点又は前記仮想視点の座標情報に基づく方向ベクトル座標を加える手段と、方向ベクトルの座標が加えられた座標情報から線を描画する手段とを備えることを特徴とする。
本発明の画像処理プログラムは、仮想3次元空間に複数のポリゴンから形成されるオブジェクトと仮想視点を配置し、前記仮想視点から見た前記オブジェクトの画像を生成する画像処理プログラムであって、各ポリゴンの頂点座標を取得し、該頂点座標に基づき、前記各ポリゴンの辺を求め、前記各ポリゴンの辺ごとに所定の高さ情報を有する複数の点の座標情報を求める手順と、所定の座標情報を基準として前記座標情報をソートする手順と、前記ソートされた座標情報のうち、1の座標情報と該1の座標情報と近接する他の座標情報との中点をとって座標情報を更新する手順と、更新された座標情報に、前記仮想視点又は前記仮想視点の座標情報に基づく方向ベクトル座標を加える手順と、方向ベクトルの座標が加えられた座標情報から線を描画する手順とをコンピュータの制御手段に実行させることを特徴とする。
本発明の記録媒体は、前記画像処理プログラムをコンピュータに実行させるためのプログラムをコンピュータ読取可能に構成されたことを特徴とする。
【発明の効果】
【0012】
本発明によれば、頂点座標間の中点をとって頂点座標を更新後に、仮想視点又は仮想カメラ方向に更新した頂点座標を移動させるので、更新後の頂点が埋まってしまい上手く線描画できなくなることを防止できる描画方法を提供することができる。
【発明を実施するための最良の形態】
【0013】
<第1の実施の形態>
〔ゲーム装置10の制御構成〕
本発明の第1の実施の形態に係るゲーム装置10(情報処理装置)は、PC/AT互換機等のPC(パーソナル・コンピュータ)、業務用機器、遊技機器、一般向け(コンシューマ)ゲーム機器、携帯端末等であり、高度なCGの描画機能を備えている。
図1を参照して説明すると、ゲーム装置10は、CPU100(制御手段)と、主記憶部110(主記憶手段)と、補助記憶部120(補助記憶手段)と、ブートROM130と、ペリフェラルI/F140と、バスアービタ150と、グラフィックプロセッサ160(描画手段)と、グラフィックメモリ170と、オーディオプロセッサ180と、オーディオメモリ190と、通信I/F200とを含んで構成される。
【0014】
CPU100は、CPU(Central Processing Unit、中央処理装置)、MPU(Micro Processing Unit)、DSP(Digital Siganl Processor)、ASIC(Application Specific Processor、特定用途向けプロセッサー)等である演算・制御能力を備えた制御手段である。また、CPU100に、主記憶部110や補助記憶部120やグラフィックプロセッサ160やオーディオプロセッサ180等の機能を備えることも可能である。
【0015】
主記憶部110は、RAM(Random Access Memory)等の主記憶用に使われる高速な記憶手段である。
主記憶部110には、後述するように、主に後述する地面オブジェクト400のポリゴン数を少なくして、他のオブジェクトとの衝突を検出するために使われるコリジョンオブジェクト450を備えている。
なお、このコリジョンオブジェクト450は、グラフィックメモリ170上に備えることも可能である。また、地面オブジェクト400から、グラフィックプロセッサのアダプティブ・メッシュ機能等を用いて動的に生成することも可能である。
【0016】
補助記憶部120は、HDD(Hard Disk Drive)、フラッシュメモリ、SRAM(スタティックRAM)、磁気テープ装置、光ディスク装置等の補助記憶手段である。補助記憶部120には、ゲーム装置10をコンピュータとして機能させるためのOS(Operating System、図示せず)が備えられており、各アプリケーションプログラムが各種API(Application Programming Interface)により、ゲーム装置10の各機能にアクセス可能である。
このアプリケーションプログラムとして、本発明の第1の実施の形態に係るゲーム装置10では、コリジョンオブジェクト450をいくつかの高さで輪切り状態にして等高線状の線ポリゴン(接続した線分)である「高さポリゴン」を求める高さポリゴン作成部125を備えている。この高さポリゴン作成部125は、他の、例えばゴルフゲームのプログラムに用いるためのクラスやサブルーチン等の単位として備えることができる。また、高さポリゴン作成部125を、他のプログラムから汎用的に呼び出すDLL(ダイナミック・リンキング・ライブラリー)や共通クラスとして備えることも可能である。
【0017】
詳細に説明すると、高さポリゴン作成部125は、メインプログラムと、交点取得部310(交点取得手段)、交点ソート部320(交点ソート手段)、色決定部325(色決定手段)、視点方向移動部330(視点方向移動手段)、曲線作成部340(曲線作成手段)、及び終点処理部350(終点処理手段)のような、各種クラスや付随するデータを含んで構成される。
交点取得部310は、横をx座標、縦をy座標、奥行きをz座標とする左手座標系(本発明の第1の実施の形態に係る描画方法において、以下、左手座標系を用いて説明する。)における、例えば、コリジョンオブジェクト450を構成する複数のポリゴンと、所定の高さ(y座標)をもったx−z平面とが交差するときの座標情報(以下、交点)を取得する。なお、この交点については、平面ではない交点を求めることも可能である。
交点ソート部320は、交点取得部310により取得された交点の情報を、例えば、所定の座標情報(点)からの距離を基準としてソートする(並び換える)。この所定の座標情報(点)としては、例えば、高さポリゴン作成部125をゴルフゲームに用いる場合は、ゴルフにおけるグリーン上のカップが設定されている位置の位置座標を用いることが好適である。なお、この位置座標としては、カップが設定されている位置の仮想3次元空間での点の座標や、カップが設定されている位置のx−y軸の線がx−z平面と交差した点の座標等を用いることができる。また、所定の座標情報からの距離として、単純に、仮想視点が設定されている位置の位置座標からの距離を用いることも可能である。さらに、ワールド座標からビュー座標に変換した後のz軸の座標値等を用いることもできる。また、交点ソート部320は、ソートした交点の情報から、曲線描画のために、中点を取得する処理についても行う。
色決定部325は、等高線状の線ポリゴンの色を決める。この等高線状の線ポリゴンの色としては、例えば、高さポリゴン作成部125をゴルフゲームに用いる場合は、ゴルフにおけるグリーンの所定の座標情報(カップが設定されている位置や、グリーン上のゴルフボールが配置されている位置)からの高さの値に従って、寒色〜暖色のグラデーションのような色を選択して表現することができる。
視点方向移動部330は、各交点について、視線方向のベクトルを加えて移動する処理を行う。これにより、粗いコリジョンオブジェクト450から作成された曲線が、コリジョンオブジェクト450の中に埋もれて描画されないことを防ぐことができる。
曲線作成部340は、ソートされて中点を取得した頂点について、更に中点を取得する等の処理を行って、なめらかな曲線の頂点を作成する。この曲線の頂点を作成する処理については、後述する。この曲線の頂点を作成する処理により、誤差を少なくして、少ない交点から曲線を描画することができる。
終点処理部350は、曲線の端と端が接続される場合に、直線的に接続されることを防ぐための処理を行う。これにより、例えば、ゴルフゲームのカップ付近のように、等高線状の曲線が円を描いた際にも、なめらかな曲線を描画することができる。
【0018】
ブートROM130は、ROMやNOR型フラッシュメモリやSRAM等の不揮発性記憶媒体である。ブートROM130は、ゲーム装置10が起動する際に、CPU100のマイクロコードの設定を行ったり、各部の初期化を行ったり、補助記憶部120からOS等が起動するような指示を行ったりする。
【0019】
ペリフェラルI/F140は、各種周辺機器(ペリフェラル)に接続するための、USB、IEEE1394、シリアル、パラレル、赤外線、無線等のインターフェイスを提供する部位である。各種周辺機器としては、ゲームパッド、スティック型コントローラー、加速度検出器、振動装置等のフォースフィードバック装置、足踏み/手押し式のスイッチ、ディスプレイモニタの画面上の位置を検出する位置検出器、CCD/CMOSカメラ、タッチパッド、タッチパネル、キーボード、マウスやトラックボール等のポインティングデバイス、ライトの点灯用コントローラー等を用いることができる。
【0020】
バスアービタ150は、いわゆる「チップセット」等の、各部を接続するためのバスインターフェイスを提供する集積回路である。このバスアービタ150で接続される各部のバスのスピードは異なっていてもよく、上り/下りで非対称であってもよい。また、例えば、CPU100と、主記憶部110と、バスアービタ150の間はFSBやHTといった高速なバスで接続され、グラフィックプロセッサ160とバスアービタ150の間も広帯域なバスで接続されるのが好適である。さらに、CPU100にDDR2/3 SDRAMやXDR DRAM等のバスインターフェイスが内蔵されて、主記憶部110を直接読み書きするように構成されていてもよい。
【0021】
グラフィックプロセッサ160は、高度な3次元CGを描画する機能をもつグラフィックプロセッサである。グラフィックプロセッサ160は、ポリゴンのジオメトリ(座標)の計算を行うジオメトリ部162と、ジオメトリ計算が行われたポリゴンをラスタライズ/レンダリング(描画)するレンダリング部164とを含んで構成される。また、グラフィックプロセッサ160は、液晶ディスプレイやPDP(プラズマ・ディスプレイ・パネル)やHMD(ヘッドマウントディスプレイ)やプロジェクター等であるディスプレイモニタに描画された画像を出力するために、RAMDAC(RAM D/Aコンバーター)やHDMIインターフェイス等を備えている。
ジオメトリ部162は、ポリゴンの3次元空間での座標(ワールド座標)について、行列の回転や拡大等を行って、アフィン変換等を行い、ポリゴンの2次元空間での座標を求める部位である。また、ジオメトリ部162は、ポリゴンの分割やスプライン補完等のテッセレーションを行う、「ジオメトリシェーダ」(又はバーテックスシェーダ)を備えることもできる。
レンダリング部164は、座標計算されたポリゴンについて、テクスチャと呼ばれる画像データを貼り付け、各種効果を加えてグラフィックメモリ170に描画する部位である。この各種効果としては、プログラマブル・シェーダ等を用いて、光点・影(シェーディング)計算、明暗の表現、半透明、ぶれ、霧、ぼかし、HDR(ハイダイナミックレンジ合成)等の計算を行うことができる。また、レンダリング部164が描画するポリゴンの種類としては、点ポリゴン(ポイント)、線ポリゴン(ラインリスト)、三角形や四角形といった面ポリゴン、面ポリゴンの集合体等がある。加えて、レンダリング部164がレイ・トレーシング等を用いて描画を行う際には、円、楕円、球、メタボール等の領域で定義される物体を描画することも可能である。
なお、ジオメトリ部162を、CPU100にて処理するように構成することも可能である。この場合は主記憶部110に記憶するプログラムをCPU100が実行して作成したポリゴンの座標を、グラフィックメモリ170に転送等を行う。レンダリング部164は、このポリゴンの座標に従って、ポリゴンを描画する。
【0022】
グラフィックメモリ170は、グラフィックプロセッサ160が描画するために高速に読み書きができる記憶媒体である。たとえば、このグラフィックメモリとして、GDDR(Graphics Double Data Rate(グラフィックス・ダブル・データレート))等の広帯域なメモリを高レベルのインターリーブ等を用いて接続することができる。また、システムLSIのようにグラフィックメモリをグラフィックプロセッサ160に内蔵する構成も可能である。また、グラフィックプロセッサ160が描画している間に、ディスプレイモニタに表示するためのデュアルポート構成をとることも可能である。
本発明の第1の実施の形態に係るグラフィックメモリ170には、例えばゴルフゲーム用のポリゴンの情報として、多数のポリゴンで構成されている、地面オブジェクト400と、物体オブジェクト410とを備えることができる。なお、このポリゴンの情報としては、ポリゴンの3次元の座標、テクスチャ、色、光源の位置等を記憶することができる。
地面オブジェクト400は、地形を描画するための多数のポリゴンの情報を記憶したポリゴンの集合体のオブジェクトである。この地面オブジェクト400は、数万〜数十万単位の多数のポリゴンを備えていたり、ポリゴンをテッセレーションにより補完して描画するためのデータを備えているため、例えば、ゴルフ場の風景をフォト・リアリスティック(写実的)に描画することができる。地面オブジェクトには、芝目等や草等の「ファー(毛皮)・シェーディング」で自然に表現するためのオブジェクトも含まれる。地面オブジェクト400は、このように多数のポリゴンを含んでいるために、地面オブジェクト400とボール等のオブジェクトとの衝突・交差計算を行うのは容易ではない。このために、本発明の第1の実施の形態に係る描画方法では、地面オブジェクト400のポリゴン数を少なくしたコリジョンオブジェクト450を用いる。
物体オブジェクト410は、木や建物などの風景に関する物体のポリゴンの情報を記憶したポリゴンの集合体のオブジェクトである。実際に、ボール等の衝突計算を行うときには、コリジョンオブジェクト450と、この物体オブジェクト410とを合わせたポリゴンの集合体を用いて衝突計算を行うことが好適である。また、この物体オブジェクト410と、地面オブジェクト400とは、一体的なデータとして構成することも、分離された状態で構成することもできる。
【0023】
オーディオプロセッサ180は、音楽や音声や効果音を出力するためのPCM(Wave)音源等を備えたDSP(デジタル・シグナル・プロセッサ)等である。オーディオプロセッサ180は、物理演算音源、FM音源等の計算を行い、残響や反射等の各種音声効果を計算することもできる。オーディオプロセッサ180の出力は、D/A(デジタル・アナログ)変換され、デジタルアンプ等に接続されて、実際にスピーカーで音楽や音声や効果音として再生される。また、オーディオプロセッサ180は、マイクから入力した音声の音声認識等にも対応している。
オーディオメモリ190は、音楽や音声や効果音のためのデジタル変換されたデータを記憶している記憶媒体である。オーディオプロセッサ180とオーディオメモリ190とを一体的に構成することも当然可能である。
【0024】
通信I/F200は、LAN(ローカル・エリア・ネットワーク)、WAN(ワイド・エリア・ネットワーク)等のネットワークに接続するための(例えば、有線/無線LAN、WiMax(登録商標)、電話線、携帯電話網、PHS網、電灯線ネットワーク、cLink、HDMI、IEEE1394等)インターフェイスである。通信I/F200を介して、他のゲーム装置やサーバ装置へと通信可能に接続することができる。これにより、例えば、ゴルフゲームの場合には、通信可能に接続されている他のゲーム装置のプレイヤーと共同で遊んだり、複数のゲーム装置が通信可能に接続されたサーバ装置がスコアの集計等を行ったりすることなどが可能である。
【0025】
〔本発明の第1の実施の形態に係る描画処理〕
ここで、図2〜図11を更に参照して、ゲーム装置10を用いて、本発明の第1の実施の形態に係る描画処理を行う際に、ゴルフゲームのグリーン部分の等高線状の線ポリゴンの描画の例について説明する。
上述したように、近年のグラフィックプロセッサのように描画するポリゴンが多い場合には、地面や人物等のポリゴンの集合体であるオブジェクトと、他のオブジェクトとの衝突等の座標計算(以下、衝突演算という。)のために、膨大な演算能力が必要であるという問題があった。
このために、本発明の第1の実施の形態に係るゲーム装置10では、衝突演算のために、「コリジョンオブジェクト」と呼ばれる少ないポリゴン数(粗い)オブジェクトであるコリジョンオブジェクト450を用いる。このコリジョンオブジェクト450により、専用の「物理演算」ハードウェアを用いなくても、物体オブジェクト410のような人物や物体のオブジェクトと地面との接触・衝突する場合に、十分な精度で高速に計算することができる。
さらに、本発明の第1の実施の形態に係る描画方法では、このコリジョンオブジェクトを用いて、複雑で多数のポリゴンのデータである地面オブジェクト400の上に、等高線状の線ポリゴン(高さポリゴン)を描画することができる。
これにより、地面オブジェクト400のような多数のポリゴンを用いて重い(複雑な)計算をする必要がなく、リアルタイムで等高線状の線ポリゴンを描画できるという効果が得られる。
また、なめらかな地面オブジェクト400のような多数のポリゴンの上に線ポリゴンを描くことで、ポリゴン及びそのポリゴンの集合体であるオブジェクトの立体的な情報をユーザーが得やすくするという効果が得られる。
以下で、図2のデータ構成の概念図と、図3のフローチャートを参照して、本発明の第1の実施の形態に係る描画処理について詳しく説明する。
【0026】
〔高さポリゴン作成部125のデータ構成〕
まず、図2を参照して、高さポリゴン作成部125が用いるデータ構成について説明する。
高さポリゴン作成部125が用いるデータとしては、例えば、図2の表に示すような、コリジョンオブジェクトD101、交点座標D102(頂点座標、座標情報)、等高線下端高さD103、等高線上端高さD104、等高線間隔D105、といった配列(配列変数)や変数を用いることができる。
【0027】
コリジョンオブジェクトD101は、コリジョンオブジェクト450の三角、四角ポリゴンのリストに対して、各ポリゴンの各頂点の3次元座標を抽出して記憶する。
具体例を挙げて説明すると、コリジョンオブジェクトD101は、3次元座標を示すx軸、y軸、z軸の値と行列計算のためのw値の4つの単精度の浮動小数点の実数のデータを備えたベクトル(vec4f)型の配列(例えば、tris[])を用いることができる。ここでは、頂点数を増減させることを容易にするため、リジョンオブジェクトD101を構造体のリンクリストのようなデータ形式で構成して、「.pos1」、「.pos2」、「.pos3」といった3角形の各頂点の座標と、「.next」というコリジョンオブジェクトD101の次の構造体を示すポインタを、リンクリストの要素として記憶することもできる。この場合は、tris[]の終点(端点)にあたるtris[頂点数].nextの最後には、リンクリストの最後を示すNULL(NiL、空、0)等の値を記憶する。
なお、以下において、[]は、配列であることを示す。この配列としては、構造体の配列のように、ベクトルや行列の集合を用いることができる。また、本発明の実施の形態においては、「配列」には、リンクリスト(リスト)のようなデータ形式も含むものとする。
また、これらの配列や変数に用いる値としては、単精度の浮動小数点実数ではなく、倍精度や倍々精度のような浮動小数点の実数のデータ、固定小数点の実数のデータ、整数データ等を用いることも当然可能である。
【0028】
交点座標D102は、コリジョンオブジェクトD101の各三角、四角ポリゴンの各頂点を結んだ線と、x座標とz座標に平行なx−z平面とが交わった点である「交点」の座標、及びこの交点から中間点等を求めて作成する曲線の頂点の座標を記憶する。
具体例を挙げて説明すると、上述の「交点」の座標、及びこの交点から中間点等を求めて作成する曲線の頂点の座標を記憶する配列(例えば、配列hline_list[][])を用いることができる。
また、この配列は、等高線状の線ポリゴンを描画する数×各曲線の座標数の領域を確保して用いることができる。
【0029】
等高線下端高さD103は、x−z平面の高さを示す値の最小値である。
具体例を挙げて説明すると、等高線下端高さD103は、等高線状の線ポリゴンを描画する最低の高さを示している変数(例えば、変数hline_min)を用いることができる。
また、この変数に代入する等高線下端高さD103の値としては、例えば、ゴルフゲームの場合には、グリーンの部分の高さの最小値を用いることができる。
また、後述するように本発明の第1の実施の形態に係る描画方法において、高さポリゴン作成部125を投射影表現に用いる場合には、仮想空間内で人物や物体等を構成するオブジェクトの周囲の地面の高さの最小値を用いることができる。
さらに、地面オブジェクトのy座標の最小値/最大値といった値を単純に用いることも可能である。
【0030】
等高線上端高さD104は、x−z平面の高さを示す値の最大値である。
具体例を挙げて説明すると、等高線上端高さD104は、等高線状の線ポリゴンを描画する最大の高さを示している変数(例えば、変数hline_max)を用いることができる。
この変数に代入する等高線上端高さD104の値としては、例えば、ゴルフゲームの場合には、グリーンの部分の高さの最大値等を用いることができる。
【0031】
等高線間隔D105は、等高線状の線ポリゴンを描画するx−z平面の高さの間隔(等高線の間隔)を示す値である。
具体例を挙げて説明すると、等高線間隔D105は、等高線状の線ポリゴンを描画する間隔を示している変数(例えば、変数hline_width)を用いることができる。
この変数に代入する等高線間隔D105の値は、例えばゴルフゲームの場合は、等高線上端高さD104の値から、等高線下端高さD103の値を引いて、等高線状の線ポリゴンを描画する数(等高線の本数)で割ることで求められるが、これに限られない。
【0032】
なお、この他にも、それぞれの等高線状の線ポリゴンに係る値を用いることができる。
具体的には、それぞれの等高線状の線ポリゴンに係る値を示す変数hは、整数の変数として、初期値を0とし、下記の高さポリゴン作成部125のメインプログラムのループ内を実行後にインクリメント(1足す)され、等高線の本数が最大値となる。
【0033】
また、交点座標D102の配列に記憶される交点や曲線の頂点の数に係る値として、頂点数(初期値は0)を備えることができる。
具体例を挙げて説明すると、交点座標D102の配列hline_list[][]に記憶する交点や曲線の頂点の数である変数として、頂点数numを備える。この頂点数numには、変数hの各値における交点座標D102の要素数(例えば、hline_list[変数h][]の要素数)を、必要なときに代入して使用する。
【0034】
加えて、最終的に曲線描画のための新たな線ポリゴン用のリンクリストや配列(例えば、p[][])も、等高線の本数分だけ用意することが可能である。
【0035】
以下で、図3のフローチャートを参照して、高さポリゴン作成部125のメインプログラムの処理について、各ステップを追いながら説明する。
高さポリゴン作成部125においては、図3のループで示したように、等高線の本数だけ各処理(関数)を呼び出していることが分かる。
なお、以下の描画処理は、CPU100が、補助記憶部120に記憶された高さポリゴン作成部125のプログラムやクラスを、ハードウェア資源を用いて演算制御して実行することで実現することができる。
【0036】
(ステップS101)
まず、高さポリゴン作成部125は、頂点取得処理を行う。
高さポリゴン作成部125は、この頂点取得処理においては、等高線状の線ポリゴンを作成したい部分、すなわち等高線を引きたい部分のコリジョンオブジェクト450の三角形、四角形ポリゴンの頂点座標を取得する。
具体的には、高さポリゴン作成部125は、この取得した頂点座標を、主記憶部110や補助記憶部120に、上述したコリジョンオブジェクトD101の配列のリンクリストとして記憶し、配列の最後を示すポインタをNULLとする。
また、この処理において、高さポリゴン作成部125は、等高線状の線ポリゴンを描画する本数(以下、等高線の本数と呼ぶ。)を求める。この等高線の本数は、例えば50本等の所定の値を設定することもできるし、等高線下端高さD103の値と等高線上端高さD104の値との差から好適な本数を決定することもできる。またビューポイント内のポリゴンの数等を用いて、最適な値を求めることもできる。
【0037】
(ステップS102)
ここで、高さポリゴン作成部125は、すべての等高線を処理しているか判定する。
具体的には、高さポリゴン作成部125は、図3のループのループ内で、すべての等高線状の線ポリゴンを作成する処理を終了したか判定する。
このループとしては、例えばfor()ループのようなループ構造を用いることができる。ここでは、高さポリゴン作成部125は、処理する等高線状の線ポリゴンの本数を示す整数の変数hの初期値を0と設定し、その後、高さポリゴン作成部125は、変数hが描画する等高線の本数を超えているかを判定する。
(ステップS102がYesの場合)
変数hが描画する等高線の本数と同じか超えていると判断した場合には、すべての等高線を処理しているものとして、本発明の第1の実施の形態に係る描画処理を終了する。
(ステップS102がNoの場合)
変数hが描画する等高線の本数より少ないと判断した場合には、ループ内の各処理を実行する。高さポリゴン作成部125は、ループ内の各処理の実行後に、変数hに1を足すなど、変数hに対してインクリメントを行い、また判定を行う。
【0038】
(ステップS103)
ここで、高さポリゴン作成部125の交点取得部310は、交点計算処理を行う。
すなわち、交点取得部310は、コリジョンオブジェクト450とx−z平面との交点を求めて、交点座標D102に記憶する。
具体例を挙げて説明すると、この交点計算処理においては、ステップS101で得られた三角形、四角形のポリゴンのリストであるコリジョンオブジェクトD101のリンクリストに対して、すべての交点を計算する。つまり、この交点の計算では、Triangleという、3角形ポリゴンのポインタを示す型の変数triを定義し、この変数triに配列(tris[])のアドレスを渡す。すなわち、変数triは、各ポリゴンを示すことができる。この上で、配列(tris[])の各要素を示すtri.nextがNULLになるまで、すなわち、すべてのポリゴンを処理するまで、for()やuntil()のようなループとして各ポリゴンと変数hに係るx−z平面の高さでの交点計算を行う。
以下で、図4のフローチャートを参照して、このステップS103の交点計算処理の具体的な処理の流れについて更に詳しく説明する。
【0039】
(ステップS1031)
まず、交点取得部310は、ポリゴン3次元座標取得処理を行う。言い換えれば、交点を計算する三角形ポリゴンの各頂点を取得する。
具体的には、例えば、上述の3次元の座標を示すvec4f型の変数であるp1、p2、p3に、triの各頂点の座標、tri.pos1、tri.pos2、tri.pos3をそれぞれ代入して記憶する。
【0040】
(ステップS1032)
次に、交点取得部310は、等高線の高さ取得処理を行う。
この処理においては、等高線下端高さD103の値に等高線間隔D105の値×変数hを計算した値を足して、上述のx−z平面の高さ、すなわち「等高線の高さ」を計算する。
具体例を挙げて説明すると、等高線の高さを示す変数(変数hline_point)を用意して、以下の式(1)を計算して、「等高線の高さ」を求める。
hline_point = hline_min + hline_width×h …… 式(1)
【0041】
(ステップS1033)
次に、交点取得部310は、線分p1、p2にx−z平面との交点があるかを判定する。
つまり、この判定では、頂点p1とp2とを結ぶ線分に、等高線の高さに応じたx−z平面に平行な面との交点があるかどうかを判定する。
具体的に記載すると、左手座標系におけるy=hline_pointの面と、線分p1、p2との交点があるかを判定する。
【0042】
(ステップS1034)
ステップS1033の判定がYESの場合、交点取得部310は、交点の座標を交点座標D102に追加する処理を行う。
具体例を挙げて説明すると、交点取得部310は、交点があった場合には、交点座標D102に(例えばhline_list[変数h][頂点数num]として)記憶する。そして、ここでは、さらに交点の数(本実施の形態では頂点数numの値)をインクリメントする。
【0043】
(ステップS1035)
ステップS1033の判断がNOの場合、又はステップS1034の処理が行われた後、交点取得部310は、線分p2、p3にx−z平面との交点があるかを判定する。
つまり、この判定では、頂点p2とp3とを結ぶ線分に、等高線の高さに応じたx−z平面に平行な面との交点があるかどうかを判定する。
具体的に記載すると、左手座標系におけるy=hline_pointの面と、線分p2、p3との交点があるかを判定する。
【0044】
(ステップS1036)
ステップS1035の判断がYESの場合、交点取得部310は、交点の座標を交点座標D102に追加する処理を行う。
具体的に記すと、この処理は、ステップS1034と同様に、交点取得部310が、交点があった場合に、交点座標D102に(例えば配列hline_list[変数h][頂点数num]として)記憶する。そして、交点の数(ここでは頂点数numの値)をインクリメントする。
【0045】
(ステップS1037)
ステップS1035の判断がNOの場合、または、ステップS1036の処理が行われた後、交点取得部310は、線分p3、p1にx−z平面との交点があるかを判定する。
つまり、この判定では、頂点p3とp1とを結ぶ線分に、等高線の高さに応じたx−z平面に平行な面との交点があるかどうかを判定する。
具体的に記載すると、左手座標系におけるy=hline_pointの面と、線分p3、p1との交点があるかを判定する。
【0046】
(ステップS1038)
ステップS1037の判断がYESの場合、交点取得部310は、交点の座標をD102に追加する処理を行う。
具体的には、この処理もステップS1034と同様に、交点取得部310が、交点があった場合に交点座標D102に(例えばhline_list[変数h][頂点数num]として)記憶する。そして、交点の数(ここでは頂点数numの値)をインクリメントする。
【0047】
(ステップS1039)
ステップS1037の判断がNOの場合、又はステップS1038の処理が行われた後、交点取得部310は、すべてのポリゴンを処理しているか判定する。
具体例を挙げて説明すると、配列(tris[])に設定されている変数tri「.next」がNULLになっているか等について判定を行う。
ステップS1039の判断がNoの場合は、次のポリゴンについて、ループ内の処理を繰り返す。具体的には、配列(tris[])に設定される変数triがtri「.next」として設定され、上述のステップS1031〜S1038の処理を行う。
逆にステップS1039の判断がYesの場合は、交点計算処理を終了する。
以上の交点計算処理により、交点取得部310は、変数hに係る所定の高さ毎に、等高線状の線ポリゴンの交点座標を記憶することができる。
【0048】
図5を参照すると、このステップS103の状態で、交点座標D102の各交点(頂点)をコリジョンオブジェクト450と一緒に点ポリゴンのように描画した例である。
ここで、変数hが所定の値における交点座標D102の各交点を描画した各交点群を、交点1000として示す。
交点1000の頂点の状態では、点の数が少なく、このまま各点を結んで線を引くと、ギザギザした直線の集まりとして描画されることが推測できる。
【0049】
(ステップS104)
ここでまた図3を参照して説明すると、高さポリゴン作成部125の交点ソート部320は、交点ソート・中点補完処理を行う。
この交点ソート・中点補完処理は、主に交点ソート処理と中点補完処理を含んでおり、上述の交点の座標から、より曲線に近い等高線状の頂点の集合を得ることができる。
以下で、図6のフローチャートと、図7A〜図7Eの概念図を参照して、ステップ104の交点ソート・中点補完処理の具体的な処理の内容について具体例を挙げて説明する。なお、以下の説明において、図7Aを参照し、変数hの値における交点座標D102に記憶されている交点の数が4つある場合について説明する。
【0050】
(ステップS1041)
まず、交点ソート部320は、距離取得初期値設定処理を行う。
図7Bを参照し、具体例を挙げて説明すると、まず、交点ソート部320は、3次元空間の座標を示す上述のvec4f型の変数Xと変数start_posを用意する。
交点ソート部320は、各交点との距離を計算するための座標を変数Xに代入する。すなわち、例えば、ゴルフゲームの場合は、仮想空間内のグリーンに設定されるカップの3次元空間の座標情報などを変数Xに代入する。
なお、変数Xには所定の座標(例えば仮想視点(ビューポイント)の位置)から一番遠い座標を入力し、変数start_posに所定の座標を代入することも可能である。
【0051】
その後、交点ソート部320は、変数Xの座標から一番距離が大きい(遠い)最遠点の交点を、変数hの値における交点座標D102から検索して、変数start_posにその交点の座標を代入する。
図7Bの例においては、この最遠点の交点が、始点Sとなり、変数start_posには、始点Sの座標が代入される。
【0052】
(ステップS1042)
次に、交点ソート部320は、交点ソート処理を行う。
図7Cを参照すると、交点ソート部320は、例えば、変数hの値における交点座標D102の交点が、変数Xの座標を基準として遠い点から近い点にするようにソートを行う。
すなわち、ある座標から一番離れた頂点である交点を始点として、そこから一番近い交点を次の頂点とし、これらの交点を並べるようにソートする。この例では、交点ソート部320は、始点Sから、頂点P1、頂点P2、終点Gの順になるようにソートする。
【0053】
(ステップS1043)
次に、交点ソート部320は、全ての交点を処理したか判定する。すなわち、変数hの値における交点座標D102の配列のすべての交点についてのソートを終えたかについて、判定を行う。
Yesの場合、交点ソート部320は、処理をステップS1044に進める。
Noの場合、交点ソート部320は、処理をステップS1042に戻してソートを続ける。
【0054】
図7Cの例においては、ソートを終えた時点で、交点ソート部320は、変数hの値における交点座標D102について、始点S、頂点P1、頂点P2、終点Gのような順番になるようにソートする。
【0055】
なお、ここでは、説明を容易にするために、選択ソートのようなアルゴリズムを用いて交点をソートする例について示している。しかし、このソートに関しては、バブルソートやクイックソート等のソート手法をすべて用いることができる。
本発明の第1の実施の形態に係る描画方法では、コリジョンオブジェクト450を用いるので、交点が少ないため、選択ソートやバブルソートを用いても、処理時間は殆ど問題にならない。
【0056】
また、上述の交点ソート・中点補完処理においては、所定の点からの距離を基にソートを行う例について示しているが、これに限られるものではない。
また、交点ソート処理については、コリジョンオブジェクト450からコリジョンオブジェクトD101を取得するときに、所定の座標からの距離でソートして、変数hの値における交点座標D102を選択する際に自動的に所定の座標を基準として、その所定の座標の近くから遠くの座標の順番、又は所定の座標の遠くから近くの座標の順番で取得するようにすることもできる。
また、交点ソート処理に代えて、変数hの値における交点座標D102の最短距離の交点同士を、ダイクストラ法のような手法を用いて接続することもできる。
また、交点ソート処理や上述のダイクストラ法の処理により、所定の距離以上離れた頂点があった場合には、変数hの値における交点座標D102を基にして、等高線状の線ポリゴンを分割することもできる。この分割は、各交点を結んだ線分の交差判定を行って、交差する線が出る箇所で分割することも可能である。これにより、例えば、ゴルフゲームの場合は、仮想空間に設定されるグリーンに隆起が2カ所以上あるような場合にも対応可能である。
また、ソートにより一番近い交点同士を結んでも、交点の数が多い場合には、間違った点を選択することもあり得る。このため、交点を結んだ線分の交差判定を行って、例えば、正しいと思われる交点を順にたどるといった所定のルールを用いて(ヒューリスティック) に処理することも可能である。
また、そもそも交点を判定するのではなく、コリジョンオブジェクト450と交差する線分を取得して、これらの線分の情報を備えたまま、線分同士の頂点を接続するようにすることも可能である。
【0057】
(ステップS1044)
ステップS1043でYESと判定されたとき、又は、後述するS1045の判定でNOと判定されたとき、交点ソート部320は、中点補完処理を行う。
図7Dを参照して説明すると、この中点補完処理は、ソートした頂点を、平均をとってならす(均す)処理である。
すなわち、変数hにおける交点座標D102の配列に各交点の1つ前の交点の座標と足して2で割る中点を求めて、それぞれの配列に代入(更新)する。
【0058】
(ステップS1045)
次に、交点ソート部320は、全ての交点を処理したか判定する。
具体的には、変数hの各値における交点座標D102(配列hline_list[変数h][])のすべての交点についての中点に更新したかについて、判定を行う。
Yesの場合、交点ソート部320は、交点ソート・中点補完処理を終了する。また、終点を、変数hにおける交点座標D102の配列に追加する。
Noの場合、交点ソート部320は、処理をステップS1044に戻して中点補完処理を続ける。
【0059】
図7Eを参照すると、実際に変数hの値における交点座標D102について、中点補完処理を行った後の各頂点の様子を示している。変数hにおける交点座標D102の配列は、最終的に、始点S、中点になった頂点P1、中点になった頂点P2、中点P3、新たな終点Gのような状態で記憶される。
【0060】
図8を参照して説明すると、中点補完処理を行った後に、交点座標D102の各頂点を図5と同様に、点ポリゴンのように描画した例である。また、変数hの値における交点座標D102の各交点を描画したものを、中点補完後の頂点1010として示す。
図8の中点補完後の頂点1010の状態では、図5の交点1000と比べて、かなりなめらかな曲線に近づいており、また、中点を計算して新たな頂点として更新することで、各頂点間の距離のばらつきが抑えられるため、曲線にしやすくなるという効果が得られる。
【0061】
(ステップS105)
ここで、また図3を参照して説明すると、色決定部325は、色決定処理を行う。
すなわち、この色決定処理においては、例えばゴルフゲームの場合、所定の頂点であるグリーン上のカップの座標と、等高線状の線ポリゴンの高さ(軸方向の距離)との差の値を用いて、等高線状の線ポリゴンの色を決める。
ここで図9(a)を参照して具体例を挙げて説明すると、ここでは、変数hの値における交点座標D102の各交点に設定するための色を計算する。つまり、色の計算については、等高線の高さ(等高線の高さを示す変数である変数hline_point)の値を用いて計算を行う。高さポリゴン作成部125は、この等高線の高さを示すhline_pointと、上述の変数Xに入れたのと同様の所定の座標のy座標とを比較して、変数hの値における交点座標D102の各要素(各交点)に対する色を計算する。たとえば、ゴルフゲームの場合は、所定の座標をカップの座標(水準原点)として、この座標との高さの違いを、「cm」のような所定単位で所定の計算式から計算する。そして、カップの座標との差により、カップの座標と差がない場合は薄い色で表現し、高い場合は赤色を濃くして表現し、低い場合は青色を濃くして表現する。
なお、色の選択方法として、例えば、予め記憶部に上述の等高線の高さの値に対応したインデックス番号と、そのインデックス番号に対応した画像情報(R成分、G成分、B成分、α(透明度)成分)とを対応づける色情報テーブルを格納しておくとともに、その色情報テーブルを参照して、等高線状の線ポリゴンの色を選択して表現することもできる。また、上述の画像情報のRGB各成分及びα成分の代わりに色相、彩度、明度、輝度の値を成分として設定することもできる。
【0062】
図9(b)を参照すると、ゴルフゲームのグリーンに実際に等高線状の線ポリゴンを描画した例を示している。
この図9(b)では、カップの近くの線が薄くなっており、グリーンの内側に描かれている等高線状の線ポリゴンが色が濃くなり、実際には赤く表示されており、高さが高くなっていることが容易に判断できる。
なお、等高線の高さはx−z平面の高さには限られない。すなわち、軸方向の距離としては、任意の座標系の一次元の距離を用いることが可能である。また、等高線状の線ポリゴンの色としては、等高線の高さや仮想視点との距離を用いて、より単純に濃淡で表現することもできる。また、地面オブジェクト400の色を参照して、これを高さにより所定の割合で反転したり、色成分を高さにより加算や減算する等の画像処理を行って、等高線状の線ポリゴンを描画することも可能である。
【0063】
(ステップS106)
ふたたび図3を参照して説明すると、高さポリゴン作成部125の視点方向移動部330は、視点方向移動処理を行う。
この視点方向移動処理においては、等高線状の線ポリゴンが潜ってしまわないようにするために、仮想視点(ビューポイント)方向に、交点座標D102の各頂点の座標を移動する処理を行う。
以下で、図10のフローチャートを参照して、ステップS106の視点方向移動処理の具体的な処理の流れについて説明する。
【0064】
(ステップS1061)
まず、視点方向移動部330は、座標初期設定処理を行う。
つまり、視点方向移動部330は交点座標の各頂点の座標として、3つの座標を設定する。
具体例を挙げて説明すると、視点方向移動部330は、変数hの値における交点座標D102の各頂点の座標として、座標1、座標2、座標3として、上述のvec4f型の変数first_pos、second_pos、third_posを設定する。
そして、ループのカウンタ用の変数iを設定し、以下の、ループ内の処理を実行する。
【0065】
(ステップS1062)
ここで、視点方向移動部330は、座標1、2、3設定処理を行う。
すなわち、この処理においては、視点方向移動部330は、座標1、座標2、座標3として設定した値のうち、3つ連続する座標の値を選択する処理を行う。
具体例を挙げて説明すると、視点方向移動部330は、この座標1、座標2、座標3として、変数first_pos、second_pos、third_posに、変数iに係る3つ連続する変数hの値における交点座標D102の要素のアドレス(番地)を選択して割り当てる。
【0066】
(ステップS1063)
次に、視点方向移動部330は、座標1、2、3移動処理を行う。
この座標1、2、3移動処理においては、視点方向移動部330は、まずは、選択した3点の真ん中の頂点(上述の具体例では、変数second_pos)に合わせて3点を仮想視点、又はビュー座標系のビューポイント等であるカメラの座標の方向に所定の値(方向ベクトル座標)だけ移動させる。
この視点又はカメラの方向に移動させるための所定の値としては、コリジョンオブジェクト450又は地面オブジェクト400のポリゴンの大きさの最大値、コリジョンオブジェクト450又は地面オブジェクト400の視点方向の高さの差の最大値等を基に、等高線状の線ポリゴンが潜ってしまわないようにするための値を計算することができる。
【0067】
(ステップS1064)
次に、視点方向移動部330は、すべての頂点を処理し終えたかについて判定する。
具体的には、for()やuntil()ループにおいて、変数iが変数hにおける交点座標D102の頂点数numと同じか大きくなったについて、判定を行う。
Yesの場合、視点方向移動部330は、視点方向移動処理を終了する。
Noの場合、視点方向移動部330は、変数iをインクリメントし、処理をステップS1062に戻してステップS1062〜ステップS1064のループの処理を続ける。
【0068】
以上のような視点方向移動処理により、ステップS105で中点での更新をしたため、頂点が地面オブジェクト400やコリジョンオブジェクト450に潜って描画されなくなることを防ぐことが可能になる。
また、3点の真ん中の頂点を基準として仮想視点の方向に移動するため、描画時の誤差が少なく、地面オブジェクト400やコリジョンオブジェクト450から離れて浮き上がっているように見えることもなく、真実の等高線のようにぴったりと地面上に描画されているようなレンダリング結果を得ることができる。なお、視点方向移動処理は3点ごとに実行するものに限らず、2点以上の複数の頂点であれば、視点方向移動処理を実行することができる。また、必ずしも真ん中の頂点を基準としなくても、各頂点について仮想視点の方向に移動するような処理を行うことも可能である。
【0069】
なお、この視点方向移動処理を行わない場合は、地面オブジェクト400と物体オブジェクト410が分離して備えられているようなデータ構造の場合、描画順の変更により対応可能である。たとえば、(1)地面オブジェクト400を描画、(2)等高線状の線ポリゴンを描画、(3)物体オブジェクト410を描画、というような手段も考えられる。
しかしながら、ポリゴンをzバッファ等を用いて描画する近年のグラフィックプロセッサの描画方法においては、描画順を分けて描画を行うのは現実的ではなく、後述するように高さポリゴン作成部125を影の作成に用いた場合等にはzバッファの誤差のせいで表示品質が著しく落ちる。
すなわち、本発明の第1の実施の形態に係る描画方法のように、視点方向移動処理を用いることで、複数のオブジェクトの描画順を考慮せず、zバッファの誤差も気にせずに、描画品質を保ったポリゴン上への輪郭線の描画が可能になるという顕著な効果が得られる。
また、このような表示品質は、特に画像表現の高品質さが求められるゲーム装置の分野では非常に有効である。
【0070】
(ステップS107)
また図3に戻って説明すると、次に、曲線作成部340は、曲線作成処理を実行する。
ここで、図11の概念図を参照して、曲線作成処理について、より具体的に説明する。
【0071】
図11のように、変数hの値における交点座標D102の各頂点として、頂点a、頂点b、頂点c、頂点dが記憶されているとする。
この上で、まず、頂点a、頂点b、頂点cの3点に対して曲線にする曲線作成処理を行う例について説明する。
最初に、曲線作成部340は、頂点aと頂点bの中点である頂点sの座標を計算する。
次に、曲線作成部340は、頂点bと頂点cの中点である頂点tの座標を計算する。
次に、曲線作成部340は、頂点sと頂点tの中点である頂点iの座標を計算する。
そして、次に、曲線作成部340は、頂点aの座標を曲線描画のための新たな線ポリゴン用のリンクリストp[変数h][]に頂点a、頂点s、頂点iの座標をそれぞれ代入してゆく。
【0072】
この上で、曲線作成部340は、次の連続する3点を頂点i、頂点c、頂点dの3点に対して、上述の処理を繰り返すことができる。
このような処理により、通常のベジェ曲線の計算よりもより高速に、曲線の計算が可能になる。
【0073】
なお、曲線作成処理を別のクラスやルーチンにて実行することもできる。この場合は、頂点a〜iを示す変数は、スコープが可視である、グローバル変数等を用いることができる。
また、この曲線描画処理については、計算スピードを厭わなければ、3点を用いて曲線に均してゆく手法以外にも、B−スプライン曲線や、ベジェ曲線の計算を行う等の処理を用いることも可能である。
【0074】
(ステップS108)
ここで再び図3を参照して説明すると、次に、終点処理部350は、終点処理を行う。
この終点処理において、終点処理部350は、例えばゴルフゲームの場合、グリーンの山の頂上付近で等高線が環状(円状態)になる場合についての処理を行う。すなわち、上述の曲線作成処理では、端の点から連続する3点について近づける(平均する、丸める)処理を行っているために、端同士をつなげた部分の線ポリゴンの描画になめらかさが欠けるという問題に対応する。具体的に説明すると、線ポリゴン用の端の頂点(リンクリストp[変数h][0])と、もう一方の端の頂点(線ポリゴン用のリンクリストp[変数h][曲線の頂点数])をつなぐと、直線上に見えてしまうという問題の処理を行うものである。
ここでは、線ポリゴン用のもう一方の端の頂点(線ポリゴン用のリンクリストp[変数h][曲線の頂点数])と、線ポリゴン用の端の頂点(線ポリゴン用のリンクリストp[変数h][0])と、線ポリゴン用の端の頂点に隣接する頂点(線ポリゴン用のリンクリストp[変数h][1])とを連続する3点として、曲線作成処理の3点を近づける処理を行うことで対処可能である。また、この3点だけではまだ直線に見える場合には、さらに周囲の頂点を用いて3点を近づける処理を行うことができる。
【0075】
以上のように、高さポリゴン作成部125は、ステップS102〜S108を実行することで、等高線状の線ポリゴンを一本作成することが可能である。上述したように、このループを繰り返すことで、等高線の本数分だけ、等高線状の線ポリゴンを作成できる。
すべての等高線状の線ポリゴンを作成した後、高さポリゴン作成部125は、グラフィックプロセッサ160を用いて、グラフィックメモリ170上に、この等高線状の線ポリゴンを描画する。
これにより、本発明の第1の実施の形態に係る描画処理を終了する。
【0076】
図12を参照して説明すると、各頂点間を線分で結んだ曲線1020である、等高線状の線ポリゴンを描画した例を示す。
このように、図5の単にx−z平面の交点を取得しただけの場合や、図8の単に中点で補完しただけの場合に比べて、非常になめらかな曲線を描画できることが分かる。
なお、ステップS104の中点補完処理と、ステップS107の曲線に均す「中点で更新する処理」を繰り返すことにより、さらに曲線に近い線ポリゴンを描画することが可能である。
【0077】
以上のように構成することで、以下のような効果を得ることができる。
まず、ベジェ曲線、B−スプライン曲線、及び従来技術1を用いた描画方法においては、頂点を更新してそのまま曲線で補間するように構成されている。
このため、頂点を更新したときに元の頂点の位置情報とのずれが大きいまま曲線補間をするため、正確な描画ができないという問題があった。
これにより、特にベジェ曲線、B−スプライン曲線、及び従来技術1の描画方法を仮想3次元空間における画像処理方法として用いようとすると、更新後に頂点が他のポリゴンに埋もれてしまうという問題があった。このため、描画の精度やクォリティが落ちるという問題があった。
【0078】
これに対して、本発明の第1の実施の形態に係る描画方法では、頂点間の中点をとって頂点を更新した後で、仮想視点又はカメラ方向に所定のベクトル座標(方向ベクトル座標)を頂点に加えてから曲線を補間する。
これにより、更新後の頂点が地面オブジェクト等に埋まってしまい描画できなくなったり、浮き上がりすぎて見えることを防止できる。
また、更新後の頂点をカメラ方向に向かせてから曲線を描画するので、複雑な処理なく精度良く曲線を描画できるという効果が得られる。
また、ポリゴンの交点の頂点をソートしてから、一筆書きのように描画を行うことで、等高線状の線ポリゴンを、容易な処理で作成可能であるという効果が得られる。このために、3次元空間の平面との交差の計算の後、内外判定等を行って、輪郭線を抽出するなどの複雑な処理を行う場合に比べて、演算コストを抑えることが可能になる。
このため、高度な描画能力をもつ、近年のグラフィックプロセッサで、細かいポリゴンの地面オブジェクト400の上に、容易に等高線状の線ポリゴンを描画することができる。
加えて、上述の第1の実施の形態においては、コリジョンオブジェクト450をトライアングルストリップのように面を構成する情報もあるものとして説明した。しかし、実際には、本発明の第1の実施の形態に係る描画方法では、交点を求めるポリゴンの集合体であるオブジェクトについて、頂点によりどうポリゴンの面を構成するかという情報がない、頂点のみの集合を用いても、等高線状の線ポリゴンを描画できるという効果が得られる。
【0079】
また、従来技術1では、ポリゴン描画のための精度が低いために、従来技術1を用いて等高線を描画して、単純にy座標を足したり引いたりして浮かせた場合には、地面オブジェクト400から浮き上がって見えたり、ところどころ埋もれるという描画品質(クォリティ)の低下が起こるという問題があった。
これに対して、本発明の第1の実施の形態に係る描画方法は、中点を求めた後の頂点を、視点又はカメラ方向のベクトルを加算して、視点方向に移動してから曲線を描画するために、描画の破綻が非常に少ないという効果が得られる。
【0080】
なお、上述の第1の実施の形態においては、高さポリゴン作成部125を等高線状の線ポリゴンを作成する例について説明したが、これに限られない。
本発明の第1の実施の形態の描画方法は、例えば、投影シャドウのように、ポリゴンと交点を求めて、その輪郭線を描画するような仮想3次元空間における画像処理方法にすべて応用可能である。投影シャドウを描画する場合は、影内部をトライアングルファン等のように分割して、暗く描画することで実現可能である。
また、本発明の第1の実施の形態の描画方法は、例えば、トゥーンシェーダのような写実的ではない輪郭線を強調したようなポリゴン描画においても用いることができる。たとえば、輪郭線にポリゴンの縁のギザギザが出ることを抑えることが可能である。
また、本発明の第1の実施の形態の描画方法は、ゲームに限られず、各種シミュレーション、医療画像から腫瘍の輪郭の推定、動画像の各フレームの差分から物体の形状を割り出すといった処理にも応用して用いることが可能である。
【0081】
また、本発明の第1の実施の形態の描画方法での描画については、等高線状の線ポリゴンの描画について説明した。しかし、描画するポリゴンは、線ポリゴンには限られず、トライアングルストリップや柱状の厚みのある形状のポリゴンのオブジェクトであってもよい。
【0082】
<第2の実施の形態>
次に、本発明の第2の実施の形態に係るゲーム装置10を用いた描画処理について説明する。
本発明の第2の実施の形態に係る描画処理では、始点・終点に係る処理を更に加えることにより、例えば、ゴルフゲームの場合は、カップの近くで等高線が環状になる場合に、よりなめらかな等高線状の線ポリゴンを得ることができる。
【0083】
〔本発明の第2の実施の形態におけるゲーム装置10の制御構成〕
本発明の第2の実施の形態に係る描画処理では、高さポリゴン作成部125は、本発明の第1の実施の形態に係るゲーム装置10の高さポリゴン作成部125の交点ソート部320、視点方向移動部330、終点処理部350について、さらなる処理を行わせることができる。
交点ソート部320は、図13のステップS205の始点・終点移動処理を行い、ソート後の交点の始点と終点をより近づけることで、等高線状の線ポリゴンをなめらかにする。
視点方向移動部330は、図13のステップS207の始点方向カメラ移動処理を行う。視点方向移動部330は、始点方向カメラ移動処理により、曲線のなめらかさに合わせた等高線状の線ポリゴンの視点方向への移動が可能になる。
終点処理部350は、後述するステップS209の始点・終点曲線化処理を行う。この始点・終点曲線化処理により、特に等高線状の線ポリゴンが環状になっている場合に、特に始点と終点とを結ぶ等高線状の線ポリゴンを、よりなめらかに描画することができる。
【0084】
また、高さポリゴン作成部125のデータ構成としては、本発明の第1の実施の形態と同様のデータ構成を用いることができる。
以下で、図13のフローチャートを参照して、本発明の第2の実施の形態に係る高さポリゴン作成部125の描画処理の流れについて詳しく説明する。
【0085】
〔本発明の第2の実施の形態に係る描画処理〕
図13を参照すると、ゲーム装置10は、本発明の第2の実施の形態に係る描画処理であるステップS201〜S209の処理を実行する。
ここで、図3をもう一度参照すると、ステップS201はステップS101と、ステップS202はステップS102と、ステップS203はステップS103と、ステップS204はステップS104と、ステップS206はステップS105と、ステップS208はステップS107と同様な処理を行うことができる。
本発明の第2の実施の形態に係る描画処理においては、この上で、ステップS205、ステップS207、ステップS209の処理を行うことで、なめらかな等高線状の線ポリゴンを描画する。
以下で、ステップS205、ステップS207、ステップS209の各処理について詳しく説明する。
【0086】
(ステップS205)
交点ソート部320は、ステップS205において、始点・終点移動処理を行う。
図14A〜図14Bを参照して説明すると、交点ソート部320は、上述の図7Eの交点ソート・中点補完処理後の状態と同様に、始点S、頂点P1、P2、P3、終点Gのような状態になった場合に、最終的な処理として始点・終点移動処理を行う。
交点ソート部320は、まず、始点Sと終点Gが近いかどうかについて判定する。この近いかどうかについては、始点Sと終点Gの距離が所定の距離以下であった場合や、各頂点間の距離の平均距離の数倍といった値以下であるような条件を用いて判定を行う。
始点Sと終点Gが近くなかった場合は、交点ソート部320は処理を次のステップS206に進める。
始点Sと終点Gが近かった場合は、交点ソート部320は、以下で説明する実際の始点・終点移動処理を行う。
【0087】
図14Aを参照すると、実際の始点・終点移動処理においては:
交点ソート部320は、まず、始点Sと終点Gの中点Tを計算する。
次に、交点ソート部320は、始点Sと中点Tとの中点S’を計算する。
次に、交点ソート部320は、終点Gと中点Tとの中点G’を計算する。
この上で、図14Bを参照すると、
交点ソート部320は、始点Sの座標を、中点S'の座標に移動する。
また、交点ソート部320は、終点Gの座標を、中点G’の座標に移動する。
【0088】
このように、始点Sと終点Gを移動して、ソート後の交点の始点と終点をより近づけることで、等高線状の線ポリゴンが環状である場合に、よりなめらかに描画することができる。
また、始点Sと終点Gについても座標を移動するために、それ以外の等高線状の線ポリゴンの部位についても、なめらかに描画することができる。
【0089】
(ステップS207)
視点方向移動部330は、ステップS207において、視点方向カメラ移動処理を行う。
この視点方向カメラ移動処理においては、上述の第1の実施の形態におけるステップS106の視点方向移動処理と同様の処理に加えて、カメラ方向への移動量を設定して、視点方向への等高線状の線ポリゴンの移動を行う。
このカメラ方向への移動量としては、視点方向移動部330は、上述の中点で更新する処理の回数を考慮した上で移動量を設定することができる。
以下で、この視点方向カメラ移動処理について、より詳しく説明する。
【0090】
視点方向移動部330は、まず、頂点AをカメラCに移動させる例について説明する。カメラCは、上述のビューポイント(仮想視点)のような座標である。以下において、具体例を挙げて説明する。
頂点Aの座標を、例えば上述のvec4f型の変数Aposに代入する。また、カメラCの座標を、例えば上述のvec4f型の変数Cposに代入する。
この上で、カメラCから頂点AへのベクトルCAを、同様に上述のvec4f型の変数CAvecとして、このCAvecの値を以下の式(2)で求める。
CAvec = Cpos − Apos …… 式(2)
【0091】
ベクトルCAの単位ベクトルを上述のvec4f型の変数CAvec_Eとし、このCAvec_Eの値を以下の式(3)で求める。
CAvec_E = CAvec ÷ |CAvec| …… 式(3)
【0092】
ここで、視点方向移動部330は、カメラ方向への移動量を計算し、例えば上述のvec4f型の変数(例えば、変数transfer)に代入する。
このカメラ方向への移動量の値(方向ベクトル座標)としては、等高線状の線ポリゴンが浮き上がらないよう、また、他のポリゴンに埋没しないように微調整した値として、概ねベクトルの大きさが0.25のような所定の値を設定することができる。
さらに、視点方向移動部330は、中点で更新する処理回数と3点で曲線にする回数に比例して、カメラ方向への移動量の値を大きくする。例えば、概ね1.5倍のような比率で、移動量の値を大きくすることができる。
また、コリジョンオブジェクト450と、地面オブジェクト400のポリゴンのなめらかさの差、具体的にはポリゴン数の比率等を用いて計算することもできる。
【0093】
次に、視点方向移動部330は、頂点Aの移動後の座標の値をA’とすると、以下の式(4)を用いて、A’の値を求める。
A’ = Apos + (CAvec_E × transfer) …… 式(4)
この上で、視点方向移動部330は、A’の値を、変数Aposに代入する。
この処理を、頂点毎に繰り返して、視点方向移動部330は、視点方向カメラ移動処理を終了する。
【0094】
この視点方向カメラ移動処理により、コリジョンオブジェクト450がより荒くても、等高線状の線ポリゴンが地面オブジェクト400等に埋まったり上空に飛び出て見えるようにすることなく、確実に描画することができる。また、中点で更新する処理を複数回行って、地面オブジェクト400と等高線状の線ポリゴンとの誤差が生じた場合でも、等高線状の線ポリゴンを地面オブジェクト400に埋もれたり飛び出て見えることなく描画可能である。
すなわち、線のなめらかさに合わせた等高線状の線ポリゴンの視点方向への移動が可能になる。
【0095】
(ステップS209)
終点処理部350は、ステップS209において、始点・終点曲線化処理を行う。
この始点・終点曲線化処理については、始点と終点が近く、始点と終点とを結ぶ場合に、よりなめらかに等高線状の線ポリゴンを描画する。
以下で、図15のフローチャートと、図16A〜図16Cを参照して、ステップS209の始点・終点曲線化処理についてより詳しく説明する。
【0096】
(ステップS2091)
まず、終点処理部350は、始点と終点が近いかどうかについて判定する。この判定は、ステップS205の判定と同様に行う。すなわち、等高線状の線ポリゴンが環状になっているか否かの判定を行い、その結果に応じて、異なった処理に移行する。
つまり、上述の判定がYesの場合、等高線状の線ポリゴンが環状なので、終点処理部350は、処理をステップS2092に進める。逆に上述の判定がNoの場合、環状ではないので、終点処理部350は、処理をステップS2096に進める。
【0097】
(ステップS2092)
終点処理部350は、等高線状の線ポリゴンが環状の場合は、まず、始点再移動処理を行う。
図16Aを参照して、上述の例のように始点S、頂点P1、頂点P2、頂点P3、終点Gがある場合について、始点再移動処理の計算を説明する。
終点処理部350は、まず、終点G、始点S、頂点P1を用いて、終点Gと始点Sとの中点を求め、始点Sと頂点P1との中点を求め、この2つの中点の中点S’を求める。
この上で、終点処理部350は、始点Sの座標を、中点S’の座標に移動する。
【0098】
(ステップS2093)
次に、曲線作成部340は、上述の実施の形態1に係る図3のステップS107と同様に、曲線作成処理を行う。
図16Bを参照して説明すると、実際には、曲線作成部340は、移動された始点Sから、終点Gの手前の頂点まで、曲線作成処理を行う。すなわち、図16Bの中点Tと終点Gとは、線分で結ばない。
【0099】
(ステップS2094)
次に、終点処理部350は、曲線端点・始点曲線化処理を行う。
図16Cを参照して説明すると、終点処理部350は、中点T、終点G、始点Sの3つの頂点を用いて、曲線を作成する。
【0100】
(ステップS2095)
次に、終点処理部350は、曲線端点・始点結合処理を行う。
ここでは、終点処理部350は、上述のステップS2094で作成された最後の頂点と、始点Sとを接続する。これにより、なめらかな環状に接続された等高線状の線ポリゴンを作成することができる。
以上により、始点・終点曲線化処理を終了する。
【0101】
(ステップS2096)
曲線作成部340は、始点Sと終点Gが近くない場合、すなわち等高線状の線ポリゴンが環状でない場合には、ステップS107と同様に、曲線作成処理を行う。
図17を参照すると、上述のステップS2093とは異なり始点Sは移動されない状態で、曲線作成部340は、通常の曲線作成処理を行う。
【0102】
(ステップS2097)
次に、終点処理部350は、曲線端点・終点結合処理を行う。
すなわち、図17を参照すると、上述のステップS2096で作成された最後の頂点と、終点Gとを接続する。
これにより、環がつながっていない、線状の等高線状の線ポリゴンが作成できる。
以上により、始点・終点曲線化処理を終了する。
【0103】
図18を参照すると、本発明の第2の実施の形態に係る描画処理により描画した等高線状の線ポリゴンを示す。
環状になった等高線状の線ポリゴンについても、かなり円に近いようになめらかに描画されていることが分かる。
このように、本発明の第2の実施の形態に係る描画処理により、上述のように、例えばゴルフゲームの場合、カップの側等で等高線状の線ポリゴンが環状になっていても、破綻が少なく表示することができる。
【0104】
なお、本発明の第2の実施の形態に係る描画処理においても、コリジョンオブジェクト450のポリゴンが粗い場合には、中点での更新を繰り返すことで、より滑らかな等高線を描画することができる。すなわち、ステップS204の中点補完処理と〜ステップS209の始点・終点曲線化処理を繰り返して、なめらかな等高線状の線ポリゴンを描画することが可能である。
また、ステップS204の中点補完処理と、ステップS205の始点・終点移動処理とは、実行する順番を変えることもできる。
【0105】
なお、上記実施の形態の構成及び動作は例であって、本発明の趣旨を逸脱しない範囲で適宜変更して実行することができることは言うまでもない。
【図面の簡単な説明】
【0106】
【図1】本発明の第1の実施の形態に係るゲーム装置10の制御構成を示すブロック図である。
【図2】本発明の第1の実施の形態に係るデータ構成を示す概念図である。
【図3】本発明の第1の実施の形態に係る描画方法の各処理を示すフローチャートである。
【図4】本発明の第1の実施の形態に係る交点計算処理の各処理を示すフローチャートである。
【図5】本発明の第1の実施の形態に係る交点を点ポリゴンとして描画した画面例である。
【図6】本発明の第1の実施の形態に係る交点ソート・中点補完処理の各処理を示すフローチャートである。
【図7A】本発明の第1の実施の形態に係る変数hの値における交点座標D102の頂点の例である。
【図7B】本発明の第1の実施の形態に係る所定の座標から頂点までの距離を示す概念図である。
【図7C】本発明の第1の実施の形態に係る所定の座標から頂点までの距離による各頂点のソートを示す概念図である。
【図7D】本発明の第1の実施の形態に係る中点補完処理の概念図である。
【図7E】本発明の第1の実施の形態に係る中点補完処理を行った後の各頂点の様子を示す概念図である。
【図8】本発明の第1の実施の形態に係る中点補完処理後の頂点を点ポリゴンとして描画した画面例である。
【図9】本発明の第1の実施の形態に係る等高線状の線ポリゴンの色の計算方法を示す概念図である。
【図10】本発明の第1の実施の形態に係る視点方向移動処理の各処理を示すフローチャートである。
【図11】本発明の第1の実施の形態に係る曲線作成処理を説明する概念図である。
【図12】本発明の第1の実施の形態に係る等高線状の線ポリゴンを描画した画面例である。
【図13】本発明の第2の実施の形態に係る描画方法の各処理を示すフローチャートである。
【図14A】本発明の第2の実施の形態に係る始点・終点移動処理を説明する概念図である。
【図14B】本発明の第2の実施の形態に係る始点・終点移動処理を行った後の各頂点の様子を示す概念図である。
【図15】本発明の第2の実施の形態に係る始点・終点曲線化処理の各処理を示すフローチャートである。
【図16A】本発明の第2の実施の形態に係る始点・終点曲線化処理の始点再移動処理を説明する概念図である。
【図16B】本発明の第2の実施の形態に係る始点再移動処理後の曲線作成処理を説明する概念図である。
【図16C】本発明の第2の実施の形態に係る曲線端点・始点曲線化処理を説明する概念図である。
【図17】本発明の第2の実施の形態に係る始点・終点曲線化処理の始点Sと終点Gが近くない場合の処理の概念図である。
【図18】本発明の第2の実施の形態に係る等高線状の等高線状の線ポリゴンを描画した画面例である。
【符号の説明】
【0107】
10 ゲーム装置
100 CPU
110 主記憶部
120 補助記憶部
125 高さポリゴン作成部
130 ブートROM
140 ペリフェラルI/F
150 バスアービタ
160 グラフィックプロセッサ
162 ジオメトリ部
164 レンダリング部
170 グラフィックメモリ
180 オーディオプロセッサ
190 オーディオメモリ
200 通信I/F
310 交点取得部
320 交点ソート部
325 色決定部
330 視点方向移動部
340 曲線作成部
350 終点処理部
400 地面オブジェクト
410 物体オブジェクト
450 コリジョンオブジェクト
1000 交点
1010 中点補完後の頂点
1020 曲線
【特許請求の範囲】
【請求項1】
仮想3次元空間に複数のポリゴンから形成されるオブジェクトと仮想視点を配置し、前記仮想視点から見た前記オブジェクトの画像を生成する画像処理方法であって、
各ポリゴンの頂点座標を取得し、該頂点座標に基づき、前記各ポリゴンの辺を求め、前記各ポリゴンの辺ごとに、所定の高さ情報を備えた複数の点の座標情報を求める工程と、
所定の座標情報を基準として前記座標情報をソートする工程と、
ソートされた座標情報のうち、1の座標情報と該1の座標情報と近接する他の座標情報との中点をとって座標情報を更新する工程と、
更新された座標情報に、前記仮想視点又は前記仮想視点の座標情報に基づく方向ベクトル座標を加える工程と、
方向ベクトル座標が加えられた座標情報から線を描画する工程と
をコンピュータの制御手段に実行させることを特徴とする画像処理方法。
【請求項2】
前記座標情報を求める工程は、
前記各ポリゴンのそれぞれの辺において、高さ情報を備えたポリゴンとの交差点である座標情報を求める工程
をコンピュータの制御手段に実行させることを特徴とする請求項1に記載の画像処理方法。
【請求項3】
前記座標情報を更新する工程は、
前記ソートされた座標情報のうち、ソートを開始した座標情報とソートを終了した座標情報とが所定距離内に位置するとき、前記各座標情報間の距離を小さくする工程
を更にコンピュータの制御手段に実行させることを特徴とする請求項1又は請求項2に記載の画像処理方法。
【請求項4】
前記方向ベクトル座標を加える工程は、
前記更新された座標情報に方向ベクトルを加える工程
をコンピュータの制御手段に実行させることを特徴とする請求項1乃至3のいずれかに記載の画像処理方法。
【請求項5】
前記線を描画する工程は、
前記方向ベクトル座標を加えられた座標情報の3点ごとに線を描画する工程
をコンピュータの制御手段に実行させることを特徴とする請求項1乃至4のいずれかに記載の画像処理方法。
【請求項6】
前記線を描画する工程は、
線の描画を開始した座標情報と描画を終了した座標情報とが所定距離内に位置するとき、
前記線の描画を開始した座標情報と前記描画を終了した座標情報を更新し、該更新された各座標情報間を直線で描画する工程
を更にコンピュータの制御手段に実行させることを特徴とする請求項1乃至5のいずれかに記載の画像処理方法。
【請求項7】
前記線を描画する工程は、
前記仮想3次元空間内に設定される所定の座標情報との距離に応じて前記線の色相、明度、彩度のいずれか1つを変化させる工程
を更にコンピュータの制御手段に実行させることを特徴とする請求項1乃至6のいずれかに記載の画像処理方法。
【請求項8】
仮想3次元空間に複数のポリゴンから形成されるオブジェクトと仮想視点を配置し、前記仮想視点から見た前記オブジェクトの画像を生成する画像処理装置であって、
前記画像処理装置は、
各ポリゴンの頂点座標を取得し、該頂点座標に基づき、前記各ポリゴンの辺を求め、前記各ポリゴンの辺ごとに高さ情報を有する複数の点の座標情報を求める手段と、
所定の座標情報を基準として前記座標情報をソートする手段と、
ソートされた座標情報のうち、1の座標情報と該1の座標情報と近接する他の座標情報との中点をとって座標情報を更新する手段と、
更新された座標情報に、前記仮想視点又は前記仮想視点の座標情報に基づく方向ベクトル座標を加える手段と、
方向ベクトル座標が加えられた座標情報から線を描画する手段と、
を備えることを特徴とする画像処理装置。
【請求項9】
仮想3次元空間に複数のポリゴンから形成されるオブジェクトと仮想視点を配置し、前記仮想視点から見た前記オブジェクトの画像を生成する画像処理プログラムであって、
各ポリゴンの頂点座標を取得し、該頂点座標に基づき、前記各ポリゴンの辺を求め、前記各ポリゴンの辺ごとに所定の高さ情報を有する複数の点の座標情報を求める手順と、
所定の座標情報を基準として前記座標情報をソートする手順と、
ソートされた座標情報のうち、1の座標情報と該1の座標情報と近接する他の座標情報との中点をとって座標情報を更新する手順と、
更新された座標情報に、前記仮想視点又は前記仮想視点の座標情報に基づく方向ベクトル座標を加える手順と、
方向ベクトルの座標が加えられた座標情報から線を描画する手順と
をコンピュータの制御手段に実行させる画像処理プログラム。
【請求項10】
請求項9記載の画像処理プログラムをコンピュータに実行させるためのプログラムをコンピュータ読取可能に構成された記録媒体。
【請求項1】
仮想3次元空間に複数のポリゴンから形成されるオブジェクトと仮想視点を配置し、前記仮想視点から見た前記オブジェクトの画像を生成する画像処理方法であって、
各ポリゴンの頂点座標を取得し、該頂点座標に基づき、前記各ポリゴンの辺を求め、前記各ポリゴンの辺ごとに、所定の高さ情報を備えた複数の点の座標情報を求める工程と、
所定の座標情報を基準として前記座標情報をソートする工程と、
ソートされた座標情報のうち、1の座標情報と該1の座標情報と近接する他の座標情報との中点をとって座標情報を更新する工程と、
更新された座標情報に、前記仮想視点又は前記仮想視点の座標情報に基づく方向ベクトル座標を加える工程と、
方向ベクトル座標が加えられた座標情報から線を描画する工程と
をコンピュータの制御手段に実行させることを特徴とする画像処理方法。
【請求項2】
前記座標情報を求める工程は、
前記各ポリゴンのそれぞれの辺において、高さ情報を備えたポリゴンとの交差点である座標情報を求める工程
をコンピュータの制御手段に実行させることを特徴とする請求項1に記載の画像処理方法。
【請求項3】
前記座標情報を更新する工程は、
前記ソートされた座標情報のうち、ソートを開始した座標情報とソートを終了した座標情報とが所定距離内に位置するとき、前記各座標情報間の距離を小さくする工程
を更にコンピュータの制御手段に実行させることを特徴とする請求項1又は請求項2に記載の画像処理方法。
【請求項4】
前記方向ベクトル座標を加える工程は、
前記更新された座標情報に方向ベクトルを加える工程
をコンピュータの制御手段に実行させることを特徴とする請求項1乃至3のいずれかに記載の画像処理方法。
【請求項5】
前記線を描画する工程は、
前記方向ベクトル座標を加えられた座標情報の3点ごとに線を描画する工程
をコンピュータの制御手段に実行させることを特徴とする請求項1乃至4のいずれかに記載の画像処理方法。
【請求項6】
前記線を描画する工程は、
線の描画を開始した座標情報と描画を終了した座標情報とが所定距離内に位置するとき、
前記線の描画を開始した座標情報と前記描画を終了した座標情報を更新し、該更新された各座標情報間を直線で描画する工程
を更にコンピュータの制御手段に実行させることを特徴とする請求項1乃至5のいずれかに記載の画像処理方法。
【請求項7】
前記線を描画する工程は、
前記仮想3次元空間内に設定される所定の座標情報との距離に応じて前記線の色相、明度、彩度のいずれか1つを変化させる工程
を更にコンピュータの制御手段に実行させることを特徴とする請求項1乃至6のいずれかに記載の画像処理方法。
【請求項8】
仮想3次元空間に複数のポリゴンから形成されるオブジェクトと仮想視点を配置し、前記仮想視点から見た前記オブジェクトの画像を生成する画像処理装置であって、
前記画像処理装置は、
各ポリゴンの頂点座標を取得し、該頂点座標に基づき、前記各ポリゴンの辺を求め、前記各ポリゴンの辺ごとに高さ情報を有する複数の点の座標情報を求める手段と、
所定の座標情報を基準として前記座標情報をソートする手段と、
ソートされた座標情報のうち、1の座標情報と該1の座標情報と近接する他の座標情報との中点をとって座標情報を更新する手段と、
更新された座標情報に、前記仮想視点又は前記仮想視点の座標情報に基づく方向ベクトル座標を加える手段と、
方向ベクトル座標が加えられた座標情報から線を描画する手段と、
を備えることを特徴とする画像処理装置。
【請求項9】
仮想3次元空間に複数のポリゴンから形成されるオブジェクトと仮想視点を配置し、前記仮想視点から見た前記オブジェクトの画像を生成する画像処理プログラムであって、
各ポリゴンの頂点座標を取得し、該頂点座標に基づき、前記各ポリゴンの辺を求め、前記各ポリゴンの辺ごとに所定の高さ情報を有する複数の点の座標情報を求める手順と、
所定の座標情報を基準として前記座標情報をソートする手順と、
ソートされた座標情報のうち、1の座標情報と該1の座標情報と近接する他の座標情報との中点をとって座標情報を更新する手順と、
更新された座標情報に、前記仮想視点又は前記仮想視点の座標情報に基づく方向ベクトル座標を加える手順と、
方向ベクトルの座標が加えられた座標情報から線を描画する手順と
をコンピュータの制御手段に実行させる画像処理プログラム。
【請求項10】
請求項9記載の画像処理プログラムをコンピュータに実行させるためのプログラムをコンピュータ読取可能に構成された記録媒体。
【図1】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図2】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図3】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図4】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図5】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図6】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図7A】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図7B】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図7C】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図7D】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図7E】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図8】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図9】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図10】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図11】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図12】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図13】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図14A】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図14B】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図15】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図16A】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図16B】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図16C】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図17】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図18】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図2】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図3】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図4】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図5】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図6】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図7A】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図7B】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図7C】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図7D】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図7E】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図8】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図9】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図10】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図11】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図12】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図13】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図14A】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図14B】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図15】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図16A】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図16B】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図16C】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図17】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【図18】
![](/placeholder_lazyload.gif)
![image rotate](/img/rotate_to_90.png)
【公開番号】特開2010−134872(P2010−134872A)
【公開日】平成22年6月17日(2010.6.17)
【国際特許分類】
【出願番号】特願2008−312614(P2008−312614)
【出願日】平成20年12月8日(2008.12.8)
【出願人】(000132471)株式会社セガ (811)
【Fターム(参考)】
【公開日】平成22年6月17日(2010.6.17)
【国際特許分類】
【出願日】平成20年12月8日(2008.12.8)
【出願人】(000132471)株式会社セガ (811)
【Fターム(参考)】
[ Back to top ]