Garry's Mod Wiki

Revision Difference

render.SetLightmapTexture#513033

<function name="SetLightmapTexture" parent="render" type="libraryfunc">⤶ <description>⤶ Sets the texture to be used as the lightmap in upcoming rendering operations. This is required when rendering meshes using a material with a lightmapped shader such as LightmappedGeneric.⤶ ⤶ <rendercontext hook="false" type="3D"/>⤶ <rendercontext hook="false" type="2D"/>⤶ </description>⤶ <realm>Client</realm>⤶ <args>⤶ <arg name="tex" type="ITexture">The texture to be used as the lightmap.</arg>⤶ </args>⤶ </function>⤶ ⤶ <example>⤶ <description>Creates a mesh with LightmappedGeneric material on it</description>⤶ <code>⤶ -- LightmappedGeneric material that we'll use for our mesh⤶ local meshMat = Material( "concrete/concretefloor001a" )⤶ ⤶ -- Mesh vertices (notice that it's not MeshVertex structure format, just something similar)⤶ -- Notice that we have 2 UV coordinates channels, one for texture, one for lightmap⤶ local meshVertices = {⤶ ⤶ { pos = Vector( 0, 0, 0 ), u0 = 0, v0 = 0, u1 = 0, v1 = 0, n = Vector( 1, 0, 0 ) },⤶ { pos = Vector( 0, 100, 0 ), u0 = 1, v0 = 0, u1 = 3, v1 = 0, n = Vector( 1, 0, 0 ) },⤶ { pos = Vector( 0, 100, -100 ), u0 = 1, v0 = 1, u1 = 3, v1 = 3, n = Vector( 1, 0, 0 ) },⤶ { pos = Vector( 0, 0, -100 ), u0 = 0, v0 = 1, u1 = 0, v1 = 3, n = Vector( 1, 0, 0 ) },⤶ }⤶ ⤶ -- Run this command while ingame to create the mesh at map origin⤶ concommand.Add( "meshtest", function()⤶ ⤶ -- Creating a render target to be used as lightmap texture⤶ meshLightmap = GetRenderTarget( "test_mesh_lightmap", 128, 128, false )⤶ ⤶ -- Filling the lightmap texture with some stuff for visualization⤶ render.PushRenderTarget( meshLightmap )⤶ ⤶ cam.Start2D()⤶ ⤶ -- Resetting lightmap to be monotone gray⤶ render.Clear( 128, 128, 128, 255 )⤶ ⤶ -- Drawing a dark rectangle⤶ render.SetColorMaterial()⤶ surface.SetDrawColor( 80, 80, 80, 255 )⤶ surface.DrawRect( 32, 32, 64, 64 )⤶ ⤶ -- And some color text, why not! Lightmaps support RGB color⤶ draw.SimpleText( "This is lightmap", "DermaDefault", 64, 64, Color( 255, 0, 0, 255 ), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER )⤶ ⤶ cam.End2D()⤶ ⤶ render.PopRenderTarget()⤶ ⤶ -- Creating the mesh. Don't forget to pass the material you're gonna use with it!⤶ -- Shader of the material defines some features of the mesh, vertex structure⤶ -- specifically (LightmappedGeneric requires each vertex to store 2 UV channels,⤶ -- for instance. This is important in this case)⤶ myTestMesh = Mesh( meshMat )⤶ ⤶ -- Creating the mesh⤶ mesh.Begin( myTestMesh, MATERIAL_QUADS, 1 )⤶ ⤶ for i, vertex in pairs( meshVertices ) do⤶ ⤶ mesh.Position( vertex.pos )⤶ ⤶ -- Texture coordinates go to channel 0⤶ mesh.TexCoord( 0, vertex.u0, vertex.v0 )⤶ ⤶ -- Lightmap texture coordinates go to channel 1⤶ mesh.TexCoord( 1, vertex.u1, vertex.v1 )⤶ ⤶ mesh.Normal( vertex.n )⤶ mesh.AdvanceVertex()⤶ end⤶ ⤶ mesh.End()⤶ end )⤶ ⤶ hook.Add( "PostDrawOpaqueRenderables", "LightmappedMeshTest", function()⤶ ⤶ if myTestMesh and myTestMesh ~= NULL then⤶ ⤶ render.SetMaterial( meshMat )⤶ render.SetLightmapTexture( meshLightmap )⤶ ⤶ myTestMesh:Draw()⤶ end⤶ end )⤶ </code>⤶ <output></output>⤶ ⤶ </example>