CustomRenderMethodInput
CustomRenderMethodInput =
object
Входные аргументы, предоставляемые пользовательской функцией рендеринга.
Свойства
defaultProjectionData
defaultProjectionData:
CustomLayerProjectionData
Униформы, которые следует передать вершинному шейдеру, если используется код проекции MapLibre. Подробнее о внутреннем устройстве этого объекта см. в комментариях к документации в src/geo/projection/projection_data.ts.
Эти униформы настраиваются так, чтобы projectTile в шейдере принимал vec2 в диапазоне 0..1 в координатах Web Mercator. Используйте getProjectionData({overscaledTileID: tileID}), чтобы получить униформы для заданного тайла и передать vec2 в локальном диапазоне тайла 0..EXTENT.
Для 3D-функций проекции используйте в шейдере projectTileFor3D.
Если вам нужна только матрица проекции, используйте defaultProjectionData.mainMatrix. Матрицы проекции достаточно для простых пользовательских слоёв, поддерживающих только проекцию Меркатора.
При проекции Меркатора, если используются эти униформы, функция шейдера projectTile преобразует сферические координаты Меркатора в координаты пространства отсечения gl. Сферическая координата Меркатора [0, 0] обозначает верхний левый угол мира Меркатора, а [1, 1] — нижний правый угол. Когда renderingMode имеет значение "3d", координата z является конформной. Куб с одинаковыми длинами сторон x, y и z в единицах Меркатора будет отображён как куб. Для преобразования LngLat в координаты Меркатора можно использовать MercatorCoordinate.fromLngLat.
При проекции глобуса, если используются эти униформы, параметр elevation, передаваемый в projectTileFor3D в шейдере, задаёт высоту в метрах над «уровнем моря» или, точнее, для глобуса — высоту над поверхностью идеальной сферы, используемой для отображения планеты.
farZ
farZ:
number
Это значение обозначает расстояние от камеры до дальней плоскости отсечения. Оно используется при вычислении матрицы проекции для определения видимых объектов. farZ должно быть больше nearZ.
fov
fov:
number
Вертикальный угол обзора в радианах.
getProjectionData
getProjectionData: (
params:CustomLayerProjectionDataParams) =>RendererProjectionData
Создаёт экземпляр ProjectionData для использования при отрисовке заданного тайла. В пользовательских слоях эта функция нужна только при отрисовке тайлов полностью пользовательским способом с использованием шейдеров, совместимых с обеими проекциями.
Параметры
| Параметр | Тип | Описание |
|---|---|---|
params | CustomLayerProjectionDataParams | Параметры для генерации данных проекции. |
Возвращает
См. также
Добавление пользовательского слоя с тайлами на глобус
modelViewProjectionMatrix
modelViewProjectionMatrix:
mat4
Матрица model-view-projection. Представляет матрицу преобразования из мирового пространства в пространство отсечения. https://learnopengl.com/Getting-started/Coordinate-Systems *
nearZ
nearZ:
number
Это значение обозначает расстояние от камеры до ближней плоскости отсечения. Оно используется при вычислении матрицы проекции для определения видимых объектов. nearZ должно быть меньше farZ.
projectionMatrix
projectionMatrix:
mat4
Матрица проекции. Представляет матрицу преобразования из пространства вида в пространство отсечения. https://learnopengl.com/Getting-started/Coordinate-Systems
shaderData
shaderData:
object
Данные, необходимые для выбора и компиляции пользовательского шейдера для текущей проекции.
define
define:
string
Директивы, добавляемые в код шейдера. Зависит от текущей проекции.
Пример
const vertexSource = `#version 300 es
${shaderData.vertexShaderPrelude}
${shaderData.define}
in vec2 a_pos;
void main() {
gl_Position = projectTile(a_pos);
#ifdef GLOBE
// Do globe-specific things
#endif
}`;
variantName
variantName:
string
Имя варианта шейдера, который следует использовать. Зависит от текущей проекции. При изменении любого из других свойств шейдера эта строка также меняется и может использоваться в качестве ключа для кеширования скомпилированных шейдеров.
vertexShaderPrelude
vertexShaderPrelude:
string
Код прелюдии, добавляемый в вершинный шейдер для доступа к функции проекции projectTile в MapLibre. Зависит от текущей проекции.
Пример
const vertexSource = `#version 300 es
${shaderData.vertexShaderPrelude}
${shaderData.define}
in vec2 a_pos;
void main() {
gl_Position = projectTile(a_pos);
}`;
© MapLibre contributors
Licensed under the 3-Clause BSD License.
https://maplibre.org/maplibre-gl-js/docs/API/type-aliases/CustomRenderMethodInput/