6 #include "IRenderableFilter.h"
9 #include "RoadNamesFadeController.h"
10 #include "VectorMath.h"
11 #include "EnvironmentFlatteningService.h"
12 #include "RenderContext.h"
13 #include "ISceneElementSource.h"
14 #include "TextRenderable.h"
15 #include "SceneElement.h"
16 #include "RenderQueue.h"
17 #include "RenderCamera.h"
27 const float FadeOffsetHeight = 5.0f;
37 : m_sceneElementsSource(sceneElementsSource)
38 , m_environmentFlatteningService(environmentFlatteningService)
39 , m_roadNamesFadeController(roadNamesFadeController)
49 const float fadeParam = m_roadNamesFadeController.GetFadeParam();
53 const float environmentFlatteningScale = m_environmentFlatteningService.GetCurrentScale();
54 const float fadeOffsetMagnitude = FadeOffsetHeight * (1.0f - fadeParam);
59 const dv3& ecefCameraPosition = renderCamera.GetEcefLocation();
60 const m44& viewProjection = renderCamera.GetViewProjectionMatrix();
63 typedef std::vector<TSceneElement*> TSceneElementPtrVec;
64 TSceneElementPtrVec sceneElements;
65 m_sceneElementsSource.GetSceneElements(sceneElements);
67 for (TSceneElementPtrVec::const_iterator it = sceneElements.begin(); it != sceneElements.end(); ++it)
69 const TSceneElement* pSceneElement = (*it);
71 if(pSceneElement->IsInSceneGraph())
75 Eegeo::v3 up = renderable.GetEcefPosition().ToSingle().Norm();
78 const v3 flattening = up * (environmentFlatteningScale - 1.f);
79 renderable.SetScale(flattening);
81 const v3 fadeOffset = up*fadeOffsetMagnitude;
83 const m44& mvp = CalcMVP(renderable.GetEcefPosition(), ecefCameraPosition, viewProjection, fadeOffset);
85 renderable.SetModelViewProjection(mvp);
86 renderable.SetAlpha(fadeParam);
88 renderQueue.EnqueueRenderable(&renderable);
94 void SetEnabled(
bool enabled) { m_enabled = enabled;}
97 Eegeo::m44 CalcMVP(
const dv3& ecefPosition,
const dv3& ecefCameraPosition,
const m44& viewProjection,
const v3& fadeOffset)
const
99 v3 cameraLocalPos = (ecefPosition - ecefCameraPosition).ToSingle();
100 cameraLocalPos += fadeOffset;
103 model.SetRow(3,
Eegeo::v4(cameraLocalPos, 1));
104 Eegeo::m44::Mul(mvp, viewProjection, model);