Archived

This topic is now archived and is closed to further replies.

koniosis

Creating a Mesh using Vertex Data

Recommended Posts

koniosis    122
Hey, I''ve been working on a terrain renderer based on height maps, I can get it to render the terrain if I create a vertex buffer and put all the triangles in it, but is there a way to put the triangles into a Mesh? I''m working in C# here with Managed DirectX, but normal DX advice also helps. I''ve looked at the mesh class and there are methods like "SetVertexBufferData" and "LockVertexBuffer" but i''ve tried setting the vertex buffer of the mesh to my vertex data, and when I tell the mesh to draw there is nothing on screen. Thanks, Chris

Share this post


Link to post
Share on other sites
koniosis    122
Ah HA! figured it out, for anyone that wants to know:


// C# Managed DirectX Code:

// Create a new new mesh:


Mesh mesh = new Mesh(number_of_triangles,number_of_verticies,MeshFlags.Dynamic, VertexFormats.Position,device);

// Set the vertex data:

mesh.SetVertexBufferData(verts,LockFlags.None);

// set the indicies data!! VERY IMPORTANT

mesh.SetIndexBufferData(indices,LockFlags.None);

// Generate Normals:

Mesh tempMesh = mesh.Clone(mesh.Options.Value,mesh.VertexFormat | VertexFormats.Normal,device);

tempMesh.ComputeNormals();

mesh.Dispose();
mesh = tempMesh;


Where I was going wrong was the indicies and not generating normal data. "verts" can be any object that contains an array of data, like an array of Vector3[]''s, indicies MUST be of type "short" or it won''t work.

Indicies connect verticies together, so if you make 10 triangles each made of 3 verticies you can just do:


short[] indices = new short[number_of_verticies];
for (short j=0; j < number_of_verticies; j++)
indices[j] = j;

Share this post


Link to post
Share on other sites