トップ «前の日記(2006-06-16 [金]) 最新 次の日記(2006-06-18 [日])» 編集

SewiGの日記

2004|01|04|05|06|07|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|

2006-06-17 [土] [長年日記]

[Programming][C#] C#で2D Programming on Direct3D (2)

次は、画像を表示する方法。DirectDrawを使用すれば、2D描画は可能ですが、Direct3Dの使用が推奨されているので、Direct3Dを使用しましょう。

考え方としては、ポリゴンにテクスチャを貼り付けたものディスプレイの四角形にあわせて表示することで二次元を表現します。

→ ソースコード (csmdx_3dpc.zip, 2006/06/20 微修正)

前回とのソースコードとは、TextureImageクラスが増えている点、Windowクラスが以下のようになっている点が異なります。

フルスクリーンにしてカーソルを消してみました。

pp.Windowed = false;
System.Windows.Forms.Cursor.Hide();

画像の描画関連。

Bitmap bitmap = new Bitmap("hello.bmp");
image = new TextureImage(device, width, height, bitmap);

image.drawTexture();

TextureImageは、画像を読み込んで描画するクラスです。コンストラクタの以下の部分ではポリゴンの頂点情報を管理する頂点バッファを作成しています。頂点が6個あるのは、三角形を2枚あわせて四角形を表現しているからです。

vertex = new VertexBuffer(typeof(CustomVertex.TransformedTextured), 6, device, Usage.None, CustomVertex.TransformedTextured.Format, Pool.Managed);
Array array = vertex.Lock(0, LockFlags.None);
array.SetValue(new CustomVertex.TransformedTextured(0, 0, 0, 1, 0, 0), 0);
array.SetValue(new CustomVertex.TransformedTextured(width, 0, 0, 1, 1, 0), 1);
array.SetValue(new CustomVertex.TransformedTextured(0, height, 0, 1, 0, 1), 2);
array.SetValue(new CustomVertex.TransformedTextured(width, 0, 0, 1, 1, 0), 3);
array.SetValue(new CustomVertex.TransformedTextured(width, height, 0, 1, 1, 1), 4);
array.SetValue(new CustomVertex.TransformedTextured(0, height, 0, 1, 0, 1), 5);
vertex.Unlock();

インスタンスを作成したら、あとはDrawTexture()で描画するだけ。

device.SetTexture(0, texture);
device.SetStreamSource(0, vertex, 0);
device.VertexFormat = CustomVertex.TransformedTextured.Format;
device.DrawPrimitives(PrimitiveType.TriangleList, 0, 2);

サンプルプログラムは、hello.bmpを読み込んで表示する単純なものです。萌え画像でも何でもいいのでお気に入りの画像を用意して表示されれば成功です。


Copyright © 2004-2008 SewiG All rights reserved.