頂点バッファ(VertexBuffer)の製作

しまった、頂点バッファの作り方もまだ紹介してませんでした…ついでなので、簡単に例を紹介します。とりあえず、この前の日記で 「CustomVertex.PositionNormalTextured」の配列ができたので、そこから頂点バッファを作りましょう。

// VertsはCustomVertex.PositionNormalTexturedの配列
// devはDirect3D.Device

	VertexBuffer vertexBuffer = new VertexBuffer(typeof(CustomVertex.PositionNormalTextured), 
		Verts.Length, dev, 0, 
		CustomVertex.PositionNormalTextured.Format, Pool.Managed);
	GraphicsStream stm = vertexBuffer.Lock(0, 0, 0);
	stm.Write(Verts);
	vertexBuffer.Unlock();
	stm.Dispose();

こんな感じで作ります。多分、ネイティブのDirectXとは作り方がちょっと違うと思います。Managed DirectXでは、こういったバッファ系のものを作るのに「GrahicsStream」というクラスを使うようです。 まずは、VertexBufferオブジェクトを生成します。コンストラクタの引数には格納予定の頂点の型と数を渡してください。その他の引数は、書いてあるとおりです。オブジェクトを作ったら「Lock」メソッドを呼び出してGraphicsStreamを取得します。あとはそれを使ってバッファに頂点配列のデータを書き込んで、頂点バッファをUnlockして、GraphicsStreamを開放して完成です。ん…ネイティブよりも簡単なのかな?