Revision Difference
cam.PushModelMatrix#514095
<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>⤶
</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>