こんにちは親愛なる友人。
繰り返しますが、多くの時間が経ちましたが、興味深い情報であなたを喜ばせませんでした
ゲームの開発について。 今日、私はこの記事を
WP7用のゲーム開発に捧げたいと思います
ここ 、
ここ 、
ここ 、
ここで書いたすばらしい
XNAフレームワーク。 具体的には、
シェーダーなしで美しいエフェクト
を作成する方法を説明します。 この記事では
、歪みの
影響について検討し
ます 。 残りはカットの下にあります。
理論
私がシェーダーについて書いた最後の2つの記事と、ゲームの視覚を改善する方法。 しかし、
Reachと
HiDef XNAプロファイルの比較を
見ると、恐ろしいことがあります
Reachは
Shader Modele 2.0をサポートしており、
WP7はそれをまったくサポートしていないことを確認してください。 そして、これからシェーダーなしでこれをすべて行う方法
を考え出し
、ヒットさせたいと思います。
もちろん、通常のマッピングを使用したクールな照明については説明していません(ただし、変質することはできます)
。BasicEffectを使用してピクセルを曲げる方法についてのみ説明しています。 この方法は狂気に単純ですが、非常に効果的です。
だから、あなた
が私が誰であり 、
私が書いたもの
を思い出すなら、私たちはそのアルゴリズムを思い出すことができます
シェーダーで使用:歪みマップとカラーマップがあります。 歪みマップに従って、カラーマップを曲げます。 ただ? 忘れて この方法は、GPUの介入なしに
WP7で実装することは非常に困難です(残念ながら、アクセスできません)。
-どうする?どのような原理で、たとえば普通の平らな正方形など、3Dで何かを描くのか覚えていますか? 2つの三角形を使用して描画されます。 これはどのように役立ちますか? シンプルで、たくさんの三角形を作成してから、テクスチャ座標を使用して、「kakbe」を三角形自体に移動して、歪み効果を作成します。
実際、画像があります-480x800、48x80のグリッドを作成します(美しい効果のために-ちょうどいい)。 グリッドは、3840要素の1次元配列です。 WP7では約
3〜4ミリ秒 、メッシュ品質は
1〜2ミリ秒で計算されます。 しかし、グリッドが小さすぎる場合、歪みがあると、三角形がまだ存在していることがわかります。 しかし、グリッドが10倍小さい場合、これは比較のために目立ちません-画面上のステップは3 mm = 10ピクセルです。 さて、大丈夫、私は会話に入ったもの。
-おいおい、それで十分な理論です、練習に行きます。練習する
プリミティブから画面に何かを描くには、
BasicEffectが必要
です 。 たとえば、
spriteBatchはあらゆる種類の
BasicEffectを目から隠す巨大なクラス
ですが、最終的にはプリミティブを描画し、テクスチャを適用することになります。 このケースでの
BasicEffectの使用について、さらに詳しく説明
しようと思います。
材料を探して、道路に行きます。
まず、曲げるテクスチャが必要です。愛する友人に会います。

そして、どういうわけか奇妙ですが、空のプロジェクトが必要なので、作成します。
WP7での
XNAの機能の1つは、デフォルトで
30 FPS (ネイティブ
60 FPSではなく)であることです。 しかし、何かがそれ以上のことが可能であることを教えてくれます。 一方、タイムキラーではなく、キラーバッテリーが必要なのは誰ですか? したがって、
30 FPSを使用します。
空のプロジェクトには次のものがあります。
FPSを担当する行-自分で推測します。
次のポイントはキーボードがないことです。すべてのアクションはマルチタッチを使用して実行されます。
インターセプトできる唯一のボタンは、デフォルトでは「戻る」ボタンです-アプリケーションを終了します。
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit();
したがって、空のプロジェクトでは何も触れず、プログラミングに進み、実際に練習します。 まず第一に
-Game1を意味
と愛で満たして
ください 。
変数を作成します。
Texture2D background; BasicEffect basicEffect;
background-テクスチャ、まあ、または何らかのRenderTarget。
BasicEffectは、プリミティブを描画するために必要なヒーローです。
コンテンツをロードします。
background = Content.Load<Texture2D>("distortion");
私はほとんど忘れていました、コンストラクタに入れてください:
graphics.PreferredBackBufferWidth = 480; graphics.PreferredBackBufferHeight = 800; graphics.IsFullScreen = true;
そのため、オリエンテーションが1つあり、ポジショニングに問題はありませんでした。
BasicEffectの初期化
(初期化中) :
basicEffect = new BasicEffect(GraphicsDevice); basicEffect.TextureEnabled = true;
投影-2次元平面(スクリーン)への3次元オブジェクトのマトリックス投影。
ビュー -必要に応じて、ビューのマトリックス、カメラ。
ワールド -ワールドマトリックス:回転、サイズ、位置。
ビューと
ワールド -単位行列を設定し
ます 。
そして、
射影は正
射影を定義します。 プリミティブがスクリーンに完全に投影されます。 説明しやすい場合は、画面の端にあるプリミティブの端。
それでは、
とりあえず 、
Game1で、新しいクラス
GridVertexPositionColorTextureを作成しましょう。ここにその完全なリストがあります(完全なものをお
aびしますが、コメント付きです)。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework; namespace GridDistortion { public class GridVertexPositionColorTexture { public VertexPositionColorTexture[] Vertices;
すべてが正常で、プリミティブの描画とグリッド自体を担当するクラスが作成されました。 次に、このグリッド用のコントローラーを考え出す必要があります。 この記事では、
SimpleGridと
ElasticGridの 2つのグリッドコントローラーについて
説明します。
まず、グリッドをリセットし、現在の歪みを適用します。
2番目はグリッドをゼリーに変えます。ゼリーはデフォルトの状態になるまで変動します。
最初のコントローラーを作成し、新しい
SimpleGridクラスとそのリストを作成します。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework; namespace GridDistortion { public class SimpleGrid { publicGridVertexPositionColorTexture grid;
コントローラーが作成され、
Game1に戻ります。2つの新しい変数:
GridVertexPositionColorTexture grid; SimpleGrid simpleGrid;
それらの初期化:
grid = new GridVertexPositionColorTexture(); grid.BuildGeometry(48, 80, new Vector2(10, 10)); simpleGrid = new SimpleGrid(grid);
自身を
更新する:
simpleGrid.Update();
そして最後に、図面:
GraphicsDevice.SamplerStates[0] = SamplerState.LinearClamp;
画面をタッチして、レンズの歪みや効果を確認します。
ただし、
SimpleGridから継承した
ElasticGridクラスのテクスチャからゼリーを作成して、楽しみましょう。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework; namespace GridDistortion { public class ElasticGrid : SimpleGrid { private Vector2[] Velocity;
Game1のグリッドコントローラーを変更し、歪みを楽しんでください。
以下に、このようなシンプルで興味深いアプローチを示します。 コントローラーの数は無制限です。たとえば、波
やand婦のあるシェーダーなしのリアルタイムのリアルな水です。
次回は、ゲームに美しさを追加する他の方法を説明しようとします。
また、XNAシリーズの3Dトピックに関する記事を書く予定です。
ボーナスとして、次の記事では、おそらくWP7でゲームを作成し、広告なしで無料で市場に投入し、貧困に陥る方法について説明します。
ソースは
ここからダウンロードでき
ます 。
実験、作成; じゃあまたね:-)