Пример #1
0
CScalableMatrix CSPCharacter::GetScalableRenderTransform() const
{
	CSPCharacter* pCharacter = SPGame()->GetLocalPlayerCharacter();
	CScalableVector vecCharacterOrigin = pCharacter->GetGlobalOrigin();

	CScalableMatrix mTransform = GetGlobalTransform();
	mTransform.SetTranslation(mTransform.GetTranslation() - vecCharacterOrigin);

	return mTransform;
}
Пример #2
0
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);
}