util.GetModelMeshes
Description
Returns a table of visual meshes of given model.
This does not work on brush models (
*number
models)See also ENTITY:GetRenderMesh.
Arguments
Returns
1 table
A table of tables with the following format:
- string material - The material of the specific mesh
- table triangles - A table of Structures/MeshVertexes ready to be fed into IMesh:BuildFromTriangles
- table verticies - A table of Structures/MeshVertexes representing all the vertices of the mesh. This table is used internally to generate the "triangles" table.
Each Structures/MeshVertex returned also has an extra table of tables field called "weights" with the following data:
Example
Simple example usage on a Scripted Entity.
-- 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