Визуализация точек в CesiumJS опирается на совокупность факторов: геометрическое положение объекта в мировых координатах, состояние камеры, правила отбраковки (culling), параметры рендеринга и взаимодействие с глубинным буфером. Видимость точки не является бинарной характеристикой «показать/скрыть» — она формируется динамически на каждом кадре.
Каждая точка в сцене CesiumJS задаётся в пространстве как позиция в системе координат WGS84, преобразуемая в Cartesian3.
const position = Cesium.Cartesian3.fromDegrees(
37.6173,
55.7558,
100.0
);
На этапе рендеринга происходит последовательное преобразование:
Видимость точки определяется уже на этапе clip space и после проекции на экран.
Первый уровень определения видимости — проверка попадания в усечённую пирамиду обзора камеры (view frustum).
Точка считается невидимой, если:
CesiumJS применяет аппаратное и программное отсечение ещё до этапа растеризации.
Расстояние до камеры напрямую влияет на пиксельный размер точки и её видимость.
const viewer = new Cesium.Viewer("cesiumContainer");
const point = viewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(10, 45, 0),
point: {
pixelSize: 10,
color: Cesium.Color.YELLOW
}
});
При увеличении расстояния:
Одним из ключевых механизмов управления видимостью является условие отображения по расстоянию.
point: {
pixelSize: 8,
distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
0.0,
5000.0
)
}
Поведение:
Это используется для оптимизации плотных облаков точек и LOD-логики.
Видимость точки зависит от глубинного теста (depth test). Даже если точка находится в пределах frustum, она может быть скрыта геометрией:
При включённом depth test точка сравнивается с глубиной сцены:
При работе с глобусом используется эллипсоидальная модель Земли. Точки могут:
viewer.scene.globe.depthTestAgainstTerrain = true;
Это критично для корректной визуализации объектов на поверхности.
При большом количестве точек CesiumJS использует батчинг через PointPrimitiveCollection.
const points = scene.primitives.add(new Cesium.PointPrimitiveCollection());
points.add({
position: Cesium.Cartesian3.fromDegrees(20, 50),
pixelSize: 5,
color: Cesium.Color.RED
});
Механизмы влияющие на видимость:
При работе с 3D Tiles точки могут быть частью:
Здесь применяется многоуровневый LOD:
const tileset = new Cesium.Cesium3DTileset({
url: "tileset.json"
});
viewer.scene.primitives.add(tileset);
Важным фактором является экранная значимость точки. Если объект занимает меньше одного пикселя:
Это особенно заметно при:
Хотя billboard не является точкой в строгом смысле, он часто используется как её визуальный аналог.
viewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(30, 60),
billboard: {
image: "marker.png",
scale: 1.0
}
});
Особенности:
CesiumJS поддерживает выражения времени и динамическое управление видимостью.
point: {
pixelSize: 6,
show: new Cesium.CallbackProperty(function (time) {
return time.secondsOfDay % 10 < 5;
}, false)
}
Поведение:
Хотя цвет не влияет напрямую на алгоритм culling, он влияет на восприятие:
color: Cesium.Color.RED.withAlpha(0.3)
Полупрозрачные точки могут казаться исчезающими при наложении:
Постобработка сцены влияет на итоговую видимость:
В условиях сильного атмосферного рассеяния дальние точки визуально исчезают, хотя формально остаются отрисованными.
CesiumJS оптимизирует повторную оценку видимости:
Это уменьшает стоимость пересчёта видимости при каждом кадре.
Каждая точка проходит последовательную цепочку фильтров:
Любой этап может привести к исключению точки из финального кадра, даже если она геометрически присутствует в сцене.