Garry's Mod Wiki

cam.PushModelMatrix

void 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 in certain hooks.

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: 35ms

Session 0
DB GetPage 2
Generate Html 8
SaveChanges 9
Render Body 0
Render Sidebar 14