Garry's Mod Wiki

cam.PushModelMatrix

  cam.PushModelMatrix( VMatrix matrix, boolean multiply = false )

Description

Pushes the specified matrix onto the render matrix stack. Unlike opengl, this will replace the current model matrix.

This does not work with cam.Start3D2D if multiply is false.
When used in the Paint function of a panel, if you want to rely on the top-left position of the panel, you must use VMatrix:Translate with the (0, 0) position of the panel relative to the screen.

Arguments

1 VMatrix matrix
The matrix to push.
2 boolean multiply = false
If set, multiplies given matrix with currently active matrix (cam.GetModelMatrix) before pushing.

Example

Rotates and scales text in the center of the screen.

local custom_vector = Vector( 1, 1, 1 ) hook.Add("HUDPaint", "2d rotation test", function() local w, h = ScrW(), ScrH() local t = RealTime() * 50 local m = Matrix() local center = Vector( w / 2, h / 2 ) m:Translate( center ) m:Rotate( Angle( 0, t, 0 ) ) m:Scale( custom_vector * math.sin( t / 100 ) * 10 ) m:Translate( -center ) cam.PushModelMatrix( m ) surface.SetFont( "DermaDefault" ) surface.SetTextColor( 255, 255, 255, 255 ) surface.SetTextPos( w / 2, h / 2 ) surface.DrawText( "LOLLOLOLOL" ) cam.PopModelMatrix() end)

Example

Simple function to draw rotated text.

function draw.RotatedText( text, x, y, font, color, ang) render.PushFilterMag( TEXFILTER.ANISOTROPIC ) render.PushFilterMin( TEXFILTER.ANISOTROPIC ) local m = Matrix() m:Translate( Vector( x, y, 0 ) ) m:Rotate( Angle( 0, ang, 0 ) ) surface.SetFont( font ) local w, h = surface.GetTextSize( text ) m:Translate( -Vector( w / 2, h / 2, 0 ) ) cam.PushModelMatrix( m ) draw.DrawText( text, font, 0, 0, color ) cam.PopModelMatrix() render.PopFilterMag() render.PopFilterMin() end