私はdirectXに精通していませんが、説明するために最善を尽くします。まず、複数のモデルオブジェクト(頂点データを持つカスタムオブジェクト)があります。現時点では、私のコード(以下を参照)は、そのモデルのvertexBufferとindexBufferを使用して、シーン内の単一のモデルをレンダリングできます。私がやりたいのは、一連のモデルです。それらすべてを1つのシーンでレンダリングします。これが私の現在のコードです。
private void Render()
{
device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.White, 1.0f, 0);
device.BeginScene();
float x = (float)Math.Cos(0);
float z = (float)Math.Sin(0);
device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 1f, 50f);
device.Transform.View = Matrix.LookAtLH(new Vector3(x, 6, z), new Vector3(0, 0, 0), new Vector3(0, 1, 0));
device.RenderState.Lighting = true;
device.Lights[0].Type = LightType.Directional;
device.Lights[0].Diffuse = Color.White;
device.Lights[0].Direction = new Vector3(-x, -6, -z);
device.Lights[0].Position = new Vector3(x, 6, z);
device.Lights[0].Enabled = true;
device.Transform.World = model.transform;
device.VertexFormat = CustomVertex.PositionNormalColored.Format;
device.SetStreamSource(0, vertexBuffer, 0);
device.Indices = indexBuffer;
device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, model.getVertices().Length, 0, model.getIndices().Length / 3);
device.EndScene();
device.Present();
}
public void RenderModel(Model model)
{
this.model = model;
vertexBuffer = new VertexBuffer(typeof(CustomVertex.PositionNormalColored), model.getVertices().Length,
device, Usage.Dynamic | Usage.WriteOnly, CustomVertex.PositionNormalColored.Format, Pool.Default);
vertexBuffer.SetData(model.getVertices(), 0, LockFlags.None);
indexBuffer = new IndexBuffer(typeof(ushort), model.getIndices().Length, device, Usage.WriteOnly, Pool.Default);
indexBuffer.SetData(model.getIndices(), 0, LockFlags.None);
Render();
}