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.

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.

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)

Example

Simple function to draw rotated text

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

Page Links


Special Pages


Wikis

?

Render Time: 33ms

DB GetPage 2
Generate Html 7
SaveChanges (1) 13
Render Body 0
Render Sidebar 9