Revision Difference
ENTITY:GetRenderMesh#565083
<function name="GetRenderMesh" parent="ENTITY" type="hook">
	<description>Specify a mesh that should be rendered instead of this SENT's model.</description>⤶
	<description>Specify a mesh that should be rendered instead of this SENT's model. ⤶
<note>You should not be creating or modifying an <page>IMesh</page> in this hook. [Reference](https://github.com/Facepunch/garrysmod-issues/issues/6411#issuecomment-3070608549)</note> ⤶
</description>⤶
    ⤶
	<realm>Client</realm>
	<rets>
		<ret name="" type="table">A table containing the following keys:
* <page>IMesh</page> Mesh - (Required) The mesh to render instead of the default model
* <page>IMaterial</page> Material - (Required) The material to render the mesh with.
* <page>VMatrix</page> Matrix - (Optional) - Render matrix override (mesh position, angles, etc)</ret>
	</rets>
</function>
<example>
	<description>A box that renders nicely with ambient lighting, projected textures, and bumpmaps. Performed in the most lines of code possible.</description>
	<code>
AddCSLuaFile()
DEFINE_BASECLASS( "base_anim" )
ENT.PrintName = "Other Cube"
ENT.Spawnable = true
ENT.Mins = Vector( -16, -16, -16 )
ENT.Maxs = Vector(  16,  16,  16 )
ENT.Material = Material( "hunter/myplastic" )
function ENT:SpawnFunction( ply, tr, ClassName )
    local ent = ents.Create( ClassName )
    ent:SetPos( tr.HitPos + tr.HitNormal * 32 )
    ent:Spawn()
    return ent
end
function ENT:Initialize()
    if CLIENT then
        self:CreateMesh()
        self:SetRenderBounds( self.Mins, self.Maxs )
    end
    self:DrawShadow( false )
end
function ENT:GetRenderMesh()
    return { Mesh = self.Mesh, Material = self.Material }
end
function ENT:CreateMesh()
    self.Mesh = Mesh()
    local positions = {
        Vector( -0.5, -0.5, -0.5 ),
        Vector(  0.5, -0.5, -0.5 ),
        Vector( -0.5,  0.5, -0.5 ),
        Vector(  0.5,  0.5, -0.5 ),
        Vector( -0.5, -0.5,  0.5 ),
        Vector(  0.5, -0.5,  0.5 ),
        Vector( -0.5,  0.5,  0.5 ),
        Vector(  0.5,  0.5,  0.5 ),
    };
    local indices = {
        1, 7, 5,
        1, 3, 7,
        6, 4, 2,
        6, 8, 4,
        1, 6, 2,
        1, 5, 6,
        3, 8, 7,
        3, 4, 8,
        1, 4, 3,
        1, 2, 4,
        5, 8, 6,
        5, 7, 8,
    }
    local normals = {
       Vector( -1,  0,  0 ),
       Vector(  1,  0,  0 ),
       Vector(  0, -1,  0 ),
       Vector(  0,  1,  0 ),
       Vector(  0,  0, -1 ),
       Vector(  0,  0,  1 ),
    }
    local tangents = {
        { 0, 1, 0, -1 },
        { 0, 1, 0, -1 },
        { 0, 0, 1, -1 },
        { 1, 0, 0, -1 },
        { 1, 0, 0, -1 },
        { 0, 1, 0, -1 },
    }
    local uCoords = {
       0, 1, 0,
       0, 1, 1,
       0, 1, 0,
       0, 1, 1,
       0, 1, 0,
       0, 1, 1,
       0, 1, 0,
       0, 1, 1,
       0, 1, 0,
       0, 1, 1,
       0, 1, 0,
       0, 1, 1,
    }
    local vCoords = {
       0, 1, 1,
       0, 0, 1,
       0, 1, 1,
       0, 0, 1,
       0, 1, 1,
       0, 0, 1,
       0, 1, 1,
       0, 0, 1,
       0, 1, 1,
       0, 0, 1,
       0, 1, 1,
       0, 0, 1,
    }
    local verts = {}
    local scale = self.Maxs - self.Mins
    for vert_i = 1, #indices do
        local face_i = math.ceil( vert_i / 6 )
        verts[vert_i] = {
            pos = positions[indices[vert_i]] * scale,
            normal = normals[face_i],
            u = uCoords[vert_i],
            v = vCoords[vert_i],
            userdata = tangents[face_i]
        }
    end
    
    self.Mesh:BuildFromTriangles( verts )
end
	</code>
</example>
 Garry's Mod
			Garry's Mod 
		 Rust
			Rust 
		 Steamworks
			Steamworks 
		 Wiki Help
			Wiki Help