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 (***&lt;number&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>