10.4 绘制地形
要绘制地形首先应调用SetEffectMaterial方法设置effect。然后设置顶点缓冲、索引缓冲和顶点声明。使用顶点声明告知device要使用的顶点格式,让它能正确地处理顶点:
// Set mesh vertex and index buffer GraphicsDevice.Vertices[0].SetSource(vb, 0, VertexPositionNormalTangentBinormal.SizeInBytes); GraphicsDevice.Indices = ib; // Set the vertex declaration GraphicsDevice.VertexDeclaration = new VertexDeclaration(GraphicsDevice, VertexPositionNormalTangentBinormal.VertexElements);
下一步开始effect和pass。要绘制地形网格,你使用了GraphicsDevice的DrawIndexedPrimitives方法,这个方法可以绘制带有索引信息的图元。下面是Terrain类中Draw方法的完整代码:
public override void Draw(GameTime time) { // Configure TerrainEffect SetEffectMaterial(); // Set mesh vertex and index buffer GraphicsDevice.Vertices[0].SetSource(vb, 0,VertexPositionNormalTangentBinormal.SizeInBytes); GraphicsDevice.Indices = ib; // Set the vertex declaration GraphicsDevice.VertexDeclaration = new VertexDeclaration(GraphicsDevice, VertexPositionNormalTangentBinormal.VertexElements); effect.Begin(); // Loop through all effect passes foreach (EffectPass pass in effect.CurrentTechniquePasses) { pass.Begin(); // Draw the mesh GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, numVertices, 0, numTriangles); pass.End(); } effect.End(); }
图10-10展示了地形渲染的最终结果。注意地形表面是平的,使用了法线贴图添加了石头图案的细节。
图10-10 地形渲染的最后结果
发布时间:2009/4/22 下午12:50:47 阅读次数:5540