• Using render targets to make part of a SWEP's model be see-through?
    0 replies, posted
Hey there. Anyone who's used FA:S 2.0 or CW 2.0 probably knows what I'm talking about, scoped weapons that upon zooming in make part of the scope invisible, so you can see through it and shoot. In FA:S 2.0 the code for this is as follows(though I have no idea where I would put this, as DrawRenderTarget isn't an actual SWEP hook but was made so you wouldn't have to override the drawing hook it's used in): [lua] local x, y, old, ang local sight = surface.GetTextureID("sprites/scope_pso_illum") local sight2 = surface.GetTextureID("sprites/scope_pso") local lens = surface.GetTextureID("VGUI/fas2/lense") local lensring = surface.GetTextureID("VGUI/fas2/lensring") local cd, alpha = {}, 0.5 local Ini = true function SWEP:DrawRenderTarget() if self.AimPos != self.PSO1Pos then return end if self.dt.Status == FAS_STAT_ADS and not self.Peeking then alpha = math.Approach(alpha, 0, FrameTime() * 5) else alpha = math.Approach(alpha, 1, FrameTime() * 5) end x, y = ScrW(), ScrH() old = render.GetRenderTarget() ang = self.Wep:GetAttachment(self.Wep:LookupAttachment("muzzle")).Ang ang:RotateAroundAxis(ang:Forward(), -90) cd.angles = ang cd.origin = self.Owner:GetShootPos() cd.x = 0 cd.y = 0 cd.w = 512 cd.h = 512 cd.fov = 4 cd.drawviewmodel = false cd.drawhud = false render.SetRenderTarget(self.ScopeRT) render.SetViewPort(0, 0, 512, 512) if alpha < 1 or Ini then render.RenderView(cd) Ini = false end ang = self.Owner:EyeAngles() ang.p = ang.p + self.BlendAng.x ang.y = ang.y + self.BlendAng.y ang.r = ang.r + self.BlendAng.z ang = -ang:Forward() local light = render.ComputeLighting(self.Owner:GetShootPos(), ang) cam.Start2D() surface.SetDrawColor(255, 255, 255, 255) surface.SetTexture(lensring) surface.DrawTexturedRect(0, 0, 512, 512) surface.SetTexture(sight2) surface.DrawTexturedRect(1, 1, 512, 512) surface.SetDrawColor(255, 255, 255, 255) surface.SetTexture(sight) surface.DrawTexturedRect(0, 0, 512, 512) surface.SetDrawColor(150 * light[1], 150 * light[2], 150 * light[3], 255 * alpha) surface.SetTexture(lens) surface.DrawTexturedRect(0, 0, 512, 512) cam.End2D() render.SetViewPort(0, 0, x, y) render.SetRenderTarget(old) if self.PSO1Glass then self.PSO1Glass:SetTexture("$basetexture", self.ScopeRT) end end end[/lua] Which hook would this be used in? I want to take a similar approach with rendertargets for a CS:S AUG.
Sorry, you need to Log In to post a reply to this thread.