Garry's Mod Wiki

mesh.Begin

  mesh.Begin( number primitiveType, number primitiveCount )
  mesh.Begin( IMesh mesh, number primitiveType, number primitiveCount )

Description

Starts constructing a new 3D mesh constructed from a given number of primitives in a given primitive format.

The resulting mesh can be stored in an IMesh if it is intended to be drawn multiple times or on multiple frames.

Default Arguments

1 number primitiveType
An enum that indicates what the format of the mesh's primitives will be.
For a full list of the available options, see the MATERIAL enum.
2 number primitiveCount
The quantity of primitives this mesh will contain as a whole integer number.

Argument Overload: Building an IMesh

1 IMesh mesh
The IMesh that the created mesh will be stored in.
2 number primitiveType
An enum that indicates what the format of the mesh's primitives will be.
For a full list of the available options, see the MATERIAL enum.
3 number primitiveCount
The quantity of primitives this mesh will contain, as a whole integer number.

Example

Draws a triangle near Vector( 0, 0, 0 ) in the map using a dynamic mesh, a dynamic mesh is good for animated meshes, or otherwise frequently changed rendered meshes.

local mat = Material( "editor/wireframe" ) -- The material (a wireframe) local verts = { -- A table of 3 vertices that form a triangle { pos = Vector( 0, 0, 0 ), u = 0, v = 0 }, -- Vertex 1 { pos = Vector( 10, 0, 0 ), u = 1, v = 0 }, -- Vertex 2 { pos = Vector( 10, 10, 0 ), u = 1, v = 1 }, -- Vertex 3 } hook.Add( "PostDrawOpaqueRenderables", "MeshLibTest", function() render.SetMaterial( mat ) -- Apply the material mesh.Begin( MATERIAL_TRIANGLES, 1 ) -- Begin writing to the dynamic mesh for i = 1, #verts do mesh.Position( verts[i].pos ) -- Set the position mesh.TexCoord( 0, verts[i].u, verts[i].v ) -- Set the texture UV coordinates mesh.AdvanceVertex() -- Write the vertex end mesh.End() -- Finish writing the mesh and draw it end )

Example

Draws a triangle near Vector( 0, 0, 0 ) in the map using a static mesh, that is, a mesh that is only created once, which is good for performance.

local mat = Material( "editor/wireframe" ) -- The material (a wireframe) local obj = Mesh() -- Create the IMesh object local verts = { -- A table of 3 vertices that form a triangle { pos = Vector( 0, 0, 0 ), u = 0, v = 0 }, -- Vertex 1 { pos = Vector( 10, 0, 0 ), u = 1, v = 0 }, -- Vertex 2 { pos = Vector( 10, 10, 0 ), u = 1, v = 1 }, -- Vertex 3 } mesh.Begin( obj, MATERIAL_TRIANGLES, 1 ) -- Begin writing to the static mesh for i = 1, #verts do mesh.Position( verts[i].pos ) -- Set the position mesh.TexCoord( 0, verts[i].u, verts[i].v ) -- Set the texture UV coordinates mesh.AdvanceVertex() -- Write the vertex end mesh.End() -- Finish writing to the IMesh hook.Add( "PostDrawOpaqueRenderables", "MeshLibTest", function() render.SetMaterial( mat ) -- Apply the material obj:Draw() -- Draw the mesh end )