CScalableMatrix CSPCharacter::GetScalableRenderTransform() const { CSPCharacter* pCharacter = SPGame()->GetLocalPlayerCharacter(); CScalableVector vecCharacterOrigin = pCharacter->GetGlobalOrigin(); CScalableMatrix mTransform = GetGlobalTransform(); mTransform.SetTranslation(mTransform.GetTranslation() - vecCharacterOrigin); return mTransform; }
void CStar::PostRender() const { BaseClass::PostRender(); if (GameServer()->GetRenderer()->IsRenderingTransparent()) return; CSPCharacter* pCharacter = SPGame()->GetLocalPlayerCharacter(); CPlanet* pNearestPlanet = pCharacter->GetNearestPlanet(); float flRadius = (float)(GetRadius()*2.0f).GetUnits(SPGame()->GetSPRenderer()->GetRenderingScale()); CScalableFloat flDistance; float flAtmosphere = 0; if (pNearestPlanet) { flDistance = (pNearestPlanet->GetGlobalOrigin() - pCharacter->GetGlobalOrigin()).Length() - pNearestPlanet->GetRadius(); flAtmosphere = (float)RemapValClamped(flDistance, CScalableFloat(1.0f, SCALE_KILOMETER), pNearestPlanet->GetAtmosphereThickness(), 1.0, 0.0); } CGameRenderingContext c(GameServer()->GetRenderer(), true); c.SetDepthMask(false); c.ResetTransformations(); c.Transform(BaseGetRenderTransform()); // Set material and uniform now so RenderBillboard doesn't overwrite the alpha value. c.UseMaterial("textures/star-yellow-atmosphere.mat"); c.SetUniform("flAlpha", flAtmosphere); c.RenderBillboard("textures/star-yellow-atmosphere.mat", flRadius); c.UseMaterial("textures/star-yellow-space.mat"); c.SetUniform("flAlpha", 1-flAtmosphere); c.RenderBillboard("textures/star-yellow-space.mat", flRadius); }