⚠ Preview docs — built from the develop branch and may be unstable. Go to the stable docs.

Mesh.SetData

void SetData(T[] vertices, UInt32[] indices, bool calculateBounds)

Assigns vertices with a custom vertex format along with face indices for this Mesh in a single call! The format is derived from T’s [VertComponent] tagged fields, see SetVerts for details.

Calling SetData is slightly more efficient than calling SetVerts and SetInds separately.

   
T[] vertices An array of vertices to add to the mesh.
UInt32[] indices A list of face indices, must be a multiple of 3. Each index represents a vertex from the provided vertex array.
bool calculateBounds If true, this will also update the Mesh’s bounds based on the vertices provided. This requires the format to contain a float3 position component.
void SetData(T[] vertices, UInt32[] indices, MeshData flags, int priority)

Assigns vertices with a custom vertex format along with face indices for this Mesh in a single call, with control over upload behavior via flags! Upload is synchronous by default — pass MeshData.Async for background upload. The format is derived from T’s [VertComponent] tagged fields, see SetVerts for details.

   
T[] vertices An array of vertices to add to the mesh.
UInt32[] indices A list of face indices, must be a multiple of 3. Each index represents a vertex from the provided vertex array.
MeshData flags Flags controlling upload behavior. See MeshData for options.
int priority Loading priority for async upload. Lower values load sooner.

Examples

Procedurally generating a wavy grid

Wavy Grid

Here, we’ll generate a grid mesh using Mesh.SetVerts and Mesh.SetInds! This is a common example of creating a grid using code, we’re using a sin wave to make it more visually interesting, but you could also substitute this for something like sampling a heightmap, or a more interesting mathematical formula!

Note: x+y*gridSize is the formula for 2D (x,y) access of a 1D array that represents a grid.

const int   gridSize = 8;
const float gridMaxF = gridSize-1;
Vertex[] verts = new Vertex[gridSize*gridSize];
uint  [] inds  = new uint  [gridSize*gridSize*6];

for (int y = 0; y < gridSize; y++) {
for (int x = 0; x < gridSize; x++) {
	// Create a vertex on a grid, centered about the origin. The dimensions extends
	// from -0.5 to +0.5 on the X and Z axes. The Y value is then sampled from 
	// a sin wave using the x and y values.
	//
	// The normal of the vertex is then calculated from the derivative of the Y 
	// value!
	verts[x+y*gridSize] = new Vertex(
		new Vec3(
			x/gridMaxF-0.5f,
			SKMath.Sin((x+y) * 0.7f)*0.1f,
			y/gridMaxF-0.5f),
		new Vec3(
			-SKMath.Cos((x+y) * 0.7f),
			1,
			-SKMath.Cos((x+y) * 0.7f)).Normalized,
		new Vec2(
			x / gridMaxF,
			y / gridMaxF));

	// Create triangle face indices from the current vertex, and the vertices
	// on the next row and column! Since there is no 'next' row and column on
	// the last row and column, we guard this with a check for size-1.
	if (x<gridSize-1 && y<gridSize-1)
	{
		int ind = (x+y*gridSize)*6;
		inds[ind  ] = (uint)((x+1)+(y+1)*gridSize);
		inds[ind+1] = (uint)((x+1)+(y  )*gridSize);
		inds[ind+2] = (uint)((x  )+(y+1)*gridSize);

		inds[ind+3] = (uint)((x  )+(y+1)*gridSize);
		inds[ind+4] = (uint)((x+1)+(y  )*gridSize);
		inds[ind+5] = (uint)((x  )+(y  )*gridSize);
	}
} }
demoProcMesh = new Mesh(verts, inds);




Found an issue with these docs, or have some additional questions? Create an Issue on Github!