Garry's Mod Wiki

Revision Difference

util.GetModelMeshes#512329

<function name="GetModelMeshes" parent="util" type="libraryfunc">⤶ <description>⤶ Returns a table of visual meshes of given model.⤶ ⤶ <note>This does not work on brush models (***&amp;lt;number&amp;gt;** models)</note>⤶ ⤶ See also <page>ENTITY:GetRenderMesh</page>.⤶ </description>⤶ <realm>Client</realm>⤶ <args>⤶ <arg name="model" type="string">The full path to a model to get the visual meshes of.</arg>⤶ <arg name="lod" type="number" default="0"></arg>⤶ <arg name="bodygroupMask" type="number" default="0"></arg>⤶ </args>⤶ <rets>⤶ <ret name="" type="table">A table of tables with the following format:⤶ * <page>string</page> material - The material of the specific mesh⤶ * <page>table</page> triangles - A table of <page>MeshVertexs ready to be fed into <page>IMesh:BuildFromTriangles</page></page>⤶ * <page>table</page> verticies - A table of <page>MeshVertexs representing all the vertexes of the mesh. This table is used internally to generate the "triangles" table.</page>⤶ ⤶ Each <page>MeshVertex</page> returned also has an extra table of tables field called "weights" with the following data:⤶ * <page>number</page> boneID - The bone this vertex is attached to⤶ * <page>number</page> weight - How "strong" this vertex is attached to the bone. A vertex can be attached to multiple bones at once.</ret>⤶ </rets>⤶ </function>⤶ ⤶ <example>⤶ <description>Simple example usage on a Scripted Entity.</description>⤶ <code>⤶ -- The default material to render with in case we for some reason don't have one⤶ local myMaterial = Material( "models/wireframe" ) -- models/debug/debugwhite⤶ ⤶ function ENT:CreateMesh()⤶ -- Destroy any previous meshes⤶ if ( self.Mesh ) then self.Mesh:Destroy() end⤶ ⤶ -- Get a list of all meshes of a model⤶ local visualMeshes = util.GetModelMeshes( "models/combine_helicopter/helicopter_bomb01.mdl" )⤶ ⤶ -- Check if the model even exists⤶ if ( !visualMeshes ) then return end⤶ ⤶ -- Select the first mesh⤶ local visualMesh = visualMeshes[ 1 ]⤶ ⤶ -- Set the material to draw the mesh with from the model data⤶ myMaterial = Material( visualMesh.material )⤶ ⤶ -- You can apply any changes to visualMesh.trianges table here, distorting the mesh⤶ -- or any other changes you can come up with⤶ ⤶ -- Create and build the mesh⤶ self.Mesh = Mesh()⤶ self.Mesh:BuildFromTriangles( visualMesh.triangles )⤶ end⤶ ⤶ -- A special hook to override the normal mesh for rendering⤶ function ENT:GetRenderMesh()⤶ -- If the mesh doesn't exist, create it!⤶ if ( !self.Mesh ) then return self:CreateMesh() end⤶ ⤶ return { Mesh = self.Mesh, Material = myMaterial }⤶ end⤶ ⤶ function ENT:Draw()⤶ -- Draw the entity's model normally, this calls GetRenderMesh at some point⤶ self:DrawModel()⤶ end⤶ </code>⤶ ⤶ </example>