cam.PushModelMatrix
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.Arguments
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