2012年4月5日木曜日

おきブログ  XNAにおける3Dゲーム描画設計 (スプライト描画情報を持たせる)


 前回まで3Dモデル情報の描画を行う説明をしてきましたが、今回から2D情報をスプライトとして描画する説明を行います。

 3Dゲームにてスプライトの表現というと、奥行がないもの(常に手前に表示されるもの)ということで、ステータス情報や文字情報が主な表示情報となることが多いと思われます。ここでは従来のサンプルにコードを追記編集して、自機のエネルギーメーターの表示といったサンプルを挙げて説明して行こうと思います。

 ■サンプルソース (2008.03.23.zip)

 
 Fig.実行画面

 
 Fig.サンプルソースのデータ構成

       ◇       ◇       ◇


リロードゲームをダウンロードする方法

 モデルキャラクタータスククラスを設計した際は、このクラス内にモデル情報を保持しましたが、今回はスプライト情報を持つクラスとして、スプライトキャラクタータスククラスを設計します(至極単純な発想ですね)。
サンプルソース上では「SpriteCharacterTask.cs」がその実装例として実装しています。

 XNA上でスプライトを実現するには、Texture2Dクラスを用いれば容易に実現が行え、この情報に対して描画を行えば、画面にスプライト(ビットマップ)が描画できます。モデルキャラクタータスククラスの時同様、スプライトキャラクタータスククラスには、このTexture2Dクラスをメンバ(m_texture)として保持し、このスプライトを描画するための座標 (m_drawRect)を内包しています。

 ここで、スプライトとテクスチャーの用語が混合しているので、本ブログではどのように考えているかというと、


11 10 PCの勝利を再生する方法

[スプライト]
 昔ながらの2Dゲームにて表現される、平面のビットマップオブジェクト(物体としての定義が強いです)。

[テクスチャー]
 3Dのモデルに貼り付けるビットマップデータ(要素としての定義が強いです)。

という感じで表現します。
XNA上のスプライト情報はTexture2Dというクラスの考え方を持っていても、描画の際にはSpriteBatchというクラスを用いた「スプライト」という用語を用います。


CSにマップを追加する方法

 3Dモデル表示をメインとしたゲームを作成する場合、(設計次第ではありますが)スプライトの情報というのは、基本的にステータス情報の表示等が主で、ゲーム上の自機や弾等の衝突が行われるようなオブジェクトとしては実装されません。これは基本的にスプライトには奥行情報が無いためで、3次元キャラクターと2次元キャラクターでは同じ次元で存在させて衝突させることが、困難とされているためです。
(これを実現した場合、大抵3次元座標の方が2次元座標の情報に合せる表現が多々見受けられます。例としては3Dの表現をしている2Dタイプのシューティングゲームなどがその例となっています)

 本サンプルの設計では、2Dはあくまでステータス情報� �みという考えで設計しています。

 次回からはこれを踏まえて、描画の設計について説明して行きたいと思います。

       ◇       ◇       ◇


 ちなみに上述の例の逆応用で、2次元ビットマップを3次元空間で表現する方法があり、これは「ビルボード」と呼ばれる手法となります。古くからはFPSでDOOMが、RPGではゼノギアス等がこのような処理を行っているように見受けられます。ポリゴン描画のオーベーヘッドに比べ、高速で処理できますし、アニメ調のキャラクターを表現するゲーム設計には有効な手法と思います。



These are our most popular posts:

スプライトとは

一部のゲーム (特に古いゲーム) は、全体がスプライトで構成されています。 [概要]( Overview) ... スプライトを描画するには、各スプライトに対して SpriteBatch オブジェクト を作成し、Begin を呼び出して初期化してから、Draw を呼び出します。スプライトの ビット ... read more

スプライトを表示させる - XNA - ソーサリーフォース

2010年11月20日 ... スプライトとは. 画像をスクリーン上に描画するための矩形領域です。2Dゲームではこの 機能がよく使われていますが、3Dでも擬似的に2D画像描画として ... プロジェクトに 画像ファイルを入れる方法については下記のページを参照してください。 read more

マスクしたスプライトの背景への描画

前景スプライトと背景スプライトを描画するには. ゲーム クラスを作成し、「スプライトの 描画」の手順で説明されている方法でコンテンツを読み込みます。 C#. コピー. private Vector2 ViperPos; Position of foreground sprite on screen private int ScrollHeight; ... read more

XNA Framework/画像ファイルの読み込みと描画 - WisdomSoft

2012年3月10日 ... スプライトは 3D ではなく、画面に直接描画されるビットマップです。スプライトの機能 だけを使えば、2D だけのゲームを作成することも可能です。スプライトを描画するには Microsoft.Xna.Framework.Graphics.SpriteBatch クラスを使います。 read more

Related Posts



0 コメント:

コメントを投稿