忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

XNA爆発チュートリアル その1


Xna Creators ClubのParticle 3D Sampleをもっとよく理解するために
1から爆発のパーティクルを作ってみようと思います。

ついでにこれをチュートリアルとしてブログの記事にしてしまおうという魂胆です。
火の玉の時には最後の結果だけでしたからね。




完成予想図(あくまでもイメージです)
3DParticlesExplosion2.jpg
(Particle 3D Sampleより)

いきなり爆発を描画するのはあまりにハードルが高すぎるので、
最初は簡単なやつからいきましょう。

爆発のパーティクルは結局のところ大きさを持った点に(幾何学的には矛盾のある表現です)
爆炎のテクスチャを貼って動かしているだけなので、
もっともシンプルなものは点を表示するだけプログラムであると言えるでしょう!

なので、もっともシンプルな頂点構造体であるVertexPositionColorを点のデータとして
使い、まずいくつか表示してみることにします。
必要なのは点の位置だけなのでVertexPositionColorではColorメンバが無駄になりますが、
一番シンプルなのはこれなのでこれが現状では最善なのです。

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;


public class ExplosionTest : Microsoft.Xna.Framework.Game
{
    private GraphicsDeviceManager graphics;

    private BasicEffect effect;
    private VertexPositionColor[] vertices = {
        new VertexPositionColor(new Vector3(0, 0.1f, 0), Color.White),
        new VertexPositionColor(new Vector3(0.1f, 0, 0), Color.White),
        new VertexPositionColor(new Vector3(-0.1f, 0, 0), Color.White)
    };


    public ExplosionTest()
    {
        graphics = new GraphicsDeviceManager(this);
    }

    protected override void LoadGraphicsContent(bool loadAllContent)
    {
        if (loadAllContent)
        {
            effect = new BasicEffect(graphics.GraphicsDevice, null);
            graphics.GraphicsDevice.VertexDeclaration = new VertexDeclaration(
                graphics.GraphicsDevice,
                VertexPositionColor.VertexElements
                );
        }
    }

    protected override void Draw(GameTime gameTime)
    {
        graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

        effect.Begin();

        foreach (EffectPass pass in effect.CurrentTechnique.Passes)
        {
            pass.Begin();

            graphics.GraphicsDevice.DrawUserPrimitives<VertexPositionColor>(
                PrimitiveType.PointList,
                vertices,
                0,
                vertices.Length
                );

            pass.End();
        }

        effect.End();
    }
}

explosionTutorialSimplePoint.jpg(クリックで拡大:白い点が中央に3つ表示されています。)

シンプルです。
自画自賛したくなるくらいのシンプルさです。

このプログラムはウィンドウのクライアント領域の中央に3つの白い点を表示するだけです。

シンプルすぎてこれが爆発とどう結びつくのかわかりにくいかもしれませんが、
この3つの白い点が、大きくなり、テクスチャが貼られ、数が多くなり、周りに向かって広がって動くようになり、
フェードするようになったり、その他いろいろなことをするようになって、
爆発しているように見えるようになるのです。
・・・・・と言うか、そうなる予定です。

拍手[0回]

PR