[xswiftbus] Set maximum draw distance for labels

This commit is contained in:
Mat Sutcliffe
2020-08-16 19:35:43 +01:00
parent 60c3e02598
commit e6d2bb152e
2 changed files with 14 additions and 0 deletions

View File

@@ -897,6 +897,7 @@ namespace XSwiftBus
void CTraffic::Labels::draw()
{
static const double maxRangeM = 10000;
static const double metersPerFt = 0.3048;
static float color[3]{ 1.0f, 0.75f, 0.0f };
std::array<float, 16> worldMat = m_worldMat.getAll();
@@ -915,6 +916,7 @@ namespace XSwiftBus
double localPos[4]{};
double windowPos[4]{};
XPLMWorldToLocal(planePos.lat, planePos.lon, planePos.elevation * metersPerFt, &worldPos[0], &worldPos[1], &worldPos[2]);
if (distanceSquared(worldPos) > maxRangeM * maxRangeM) { continue; }
matrixMultVec(localPos, worldMat.data(), worldPos);
matrixMultVec(windowPos, projMat.data(), localPos);
@@ -942,6 +944,14 @@ namespace XSwiftBus
out[3] = v[0] * m[3] + v[1] * m[7] + v[2] * m[11] + v[3] * m[15];
}
double CTraffic::Labels::distanceSquared(const double pos[3]) const
{
const double dx = m_viewX.get() - pos[0];
const double dy = m_viewY.get() - pos[1];
const double dz = m_viewZ.get() - pos[2];
return dx * dx + dy * dy + dz * dz;
}
int CTraffic::orbitPlaneFunc(XPLMCameraPosition_t *cameraPosition, int isLosingControl, void *refcon)
{
constexpr bool DEBUG = false;

View File

@@ -198,12 +198,16 @@ namespace XSwiftBus
virtual void draw() override;
private:
static void matrixMultVec(double out[4], const float m[16], const double v[4]);
double distanceSquared(const double pos[3]) const;
CTraffic *m_traffic = nullptr;
ArrayDataRef<xplane::data::sim::graphics::view::world_matrix> m_worldMat;
ArrayDataRef<xplane::data::sim::graphics::view::projection_matrix_3d> m_projMat;
DataRef<xplane::data::sim::graphics::view::window_width> m_windowWidth;
DataRef<xplane::data::sim::graphics::view::window_height> m_windowHeight;
DataRef<xplane::data::sim::graphics::view::visibility_effective_m> m_visibilityM;
DataRef<xplane::data::sim::graphics::view::view_x> m_viewX;
DataRef<xplane::data::sim::graphics::view::view_y> m_viewY;
DataRef<xplane::data::sim::graphics::view::view_z> m_viewZ;
};
Labels m_labels { this };