Garry's Mod Wiki

Revision Difference

surface.DrawPoly#512072

<function name="DrawPoly" parent="surface" type="libraryfunc">⤶ <description>⤶ Draws a textured polygon (secretly a triangle fan) with a maximum of 256 vertices.⤶ Only works properly with convex polygons. You may try to render concave polygons, but there is no guarantee that things wont get messed up.⤶ ⤶ Unlike most surface library functions, non-integer coordinates are not rounded.⤶ ⤶ <warning>You must reset the drawing color and texture before calling the function to ensure consistent results. See examples below.</warning>⤶ ⤶ <rendercontext hook="false" type="2D"/>⤶ </description>⤶ <realm>Client and Menu</realm>⤶ <args>⤶ <arg name="vertices" type="table">A table containing integer vertices. See the &lt;page&gt;PolygonVertex&lt;/page&gt;.&#xA;&#xA;**The vertices must be in clockwise order.**</arg>⤶ </args>⤶ </function>⤶ ⤶ <example>⤶ <description>Draws a red triangle in the top left corner of the screen.</description>⤶ <code>⤶ local triangle = {⤶ { x = 100, y = 200 },⤶ { x = 150, y = 100 },⤶ { x = 200, y = 200 }⤶ }⤶ ⤶ hook.Add("HUDPaint", "PolygonTest", function()⤶ ⤶ surface.SetDrawColor( 255, 0, 0, 255 )⤶ draw.NoTexture()⤶ surface.DrawPoly( triangle )⤶ ⤶ end )⤶ </code>⤶ <output></output>⤶ ⤶ </example>⤶ ⤶ ⤶ <example>⤶ <description>A helper function to draw a circle using surface.DrawPoly.</description>⤶ <code>⤶ function draw.Circle( x, y, radius, seg )⤶ local cir = {}⤶ ⤶ table.insert( cir, { x = x, y = y, u = 0.5, v = 0.5 } )⤶ for i = 0, seg do⤶ local a = math.rad( ( i / seg ) * -360 )⤶ table.insert( cir, { x = x + math.sin( a ) * radius, y = y + math.cos( a ) * radius, u = math.sin( a ) / 2 + 0.5, v = math.cos( a ) / 2 + 0.5 } )⤶ end⤶ ⤶ local a = math.rad( 0 ) -- This is needed for non absolute segment counts⤶ table.insert( cir, { x = x + math.sin( a ) * radius, y = y + math.cos( a ) * radius, u = math.sin( a ) / 2 + 0.5, v = math.cos( a ) / 2 + 0.5 } )⤶ ⤶ surface.DrawPoly( cir )⤶ end⤶ ⤶ hook.Add("HUDPaint", "PolygonCircleTest", function()⤶ ⤶ surface.SetDrawColor( 0, 0, 0, 200)⤶ draw.NoTexture()⤶ draw.Circle( ScrW() / 2, ScrH() / 2, 200, math.sin( CurTime() ) * 20 + 25 )⤶ ⤶ --Usage:⤶ --draw.Circle( x, y, radius, segments )⤶ ⤶ end )⤶ </code>⤶ ⤶ </example>