Garry's Mod Wiki

Revision Difference

cam.PushModelMatrix#524933

<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>⤶ ⤶ <note>This does not work with <page>cam.Start3D2D</page> if `multiply` is false.</note>⤶ </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 (<page>cam.GetModelMatrix</page>) 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>