Garry's Mod Wiki

Revision Difference

cam.PushModelMatrix#514095

<function name="PushModelMatrix" parent="cam" type="libraryfunc">⤶ <description>⤶ Pushes the specified matrix onto the render matrix stack. Unlike opengl, this will replace the current model matrix.⤶ ⤶ <bug issue="1663">This does not work with <page>cam.Start3D2D</page> in certain hooks.</bug>⤶ </description>⤶ <realm>Client</realm>⤶ <args>⤶ <arg name="matrix" type="VMatrix">The matrix to push.</arg>⤶ <arg name="multiply" type="boolean" default="false">If set, multiplies given matrix with currently active matrix (&lt;page&gt;cam.GetModelMatrix&lt;/page&gt;) before pushing.</arg>⤶ </args>⤶ </function>⤶ ⤶ <example>⤶ <description>Rotates and scales text in the center of the screen.</description>⤶ <code>⤶ hook.Add("HUDPaint", "2d rotation test", function()⤶ local w, h = ScrW(), ScrH()⤶ local t = RealTime()*50⤶ ⤶ local mat = Matrix()⤶ ⤶ mat:Translate(Vector(w/2, h/2))⤶ mat:Rotate(Angle(0,t,0))⤶ mat:Scale(Vector(1,1,1) * math.sin(t/100) *10)⤶ mat:Translate(-Vector(w/2, h/2))⤶ ⤶ cam.PushModelMatrix(mat)⤶ surface.SetFont("DermaDefault")⤶ surface.SetTextColor(255, 255, 255, 255)⤶ surface.SetTextPos(w/2, h/2)⤶ surface.DrawText("LOLLOLOLOL")⤶ cam.PopModelMatrix() ⤶ end)⤶ </code>⤶ ⤶ </example>⤶ ⤶ ⤶ <example>⤶ <description>Simple function to draw rotated text</description>⤶ <code>⤶ function draw.TextRotated(text, x, y, color, font, ang)⤶ render.PushFilterMag(TEXFILTER.ANISOTROPIC)⤶ render.PushFilterMin(TEXFILTER.ANISOTROPIC)⤶ surface.SetFont(font)⤶ surface.SetTextColor(color)⤶ surface.SetTextPos(0, 0)⤶ local textWidth, textHeight = surface.GetTextSize( text )⤶ local rad = -math.rad( ang )⤶ x = x - ( math.cos( rad ) * textWidth / 2 + math.sin( rad ) * textHeight / 2 )⤶ y = y + ( math.sin( rad ) * textWidth / 2 + math.cos( rad ) * textHeight / 2 )⤶ local m = Matrix()⤶ m:SetAngles(Angle(0, ang, 0))⤶ m:SetTranslation(Vector(x, y, 0))⤶ cam.PushModelMatrix(m)⤶ surface.DrawText(text)⤶ cam.PopModelMatrix()⤶ render.PopFilterMag()⤶ render.PopFilterMin()⤶ end⤶ </code>⤶ ⤶ </example>