CustomRenderMethodInput
定义于: src/style/style_layer/custom_style_layer.ts:10
CustomRenderMethodInput =
object
自定义渲染函数的输入参数;
属性
defaultProjectionData
defaultProjectionData: ProjectionData
定义于: src/style/style_layer/custom_style_layer.ts:107
如果使用MapLibre的投影代码,应传递给顶点着色器的统一变量。有关此对象内部结构的更多详细信息,请参阅src/geo/projection/projection_data.ts
中的文档注释。
这些统一变量的设置使得着色器中的projectTile
接受范围为0..1的web墨卡托坐标中的vec2。使用map.transform.getProjectionData({overscaledTileID: tileID})
获取给定瓦片的统一变量,并传递瓦片本地范围0..EXTENT内的vec2。
对于投影3D特性,在着色器中使用projectTileFor3D
。
如果只需要投影矩阵,请使用defaultProjectionData.projectionMatrix
。对于仅支持墨卡托投影的简单自定义图层来说,投影矩阵就足够了。
在墨卡托投影下,使用这些统一变量时,着色器的projectTile
函数将球形墨卡托坐标投影到gl裁剪空间坐标。球形墨卡托坐标[0, 0]
表示墨卡托世界的左上角,[1, 1]
表示右下角。当renderingMode
为"3d"
时,z坐标是共形的。墨卡托单位中具有相同x、y和z长度的盒子将被渲染为立方体。可以使用MercatorCoordinate.fromLngLat将LngLat
投影到墨卡托坐标。
在球形投影下,使用这些统一变量时,在着色器中传递给projectTileFor3D
的elevation
参数是"海平面"以上的高度(以米为单位),或者更准确地说,对于球体来说,是渲染行星时使用的完美球体表面上的高度。
farZ
farZ:
number
定义于: src/style/style_layer/custom_style_layer.ts:16
此值表示从相机到远裁剪平面的距离。它用于计算投影矩阵以确定哪些对象可见。farZ应大于nearZ。
fov
fov:
number
定义于: src/style/style_layer/custom_style_layer.ts:26
以弧度表示的垂直视场角。
modelViewProjectionMatrix
modelViewProjectionMatrix:
mat4
定义于: src/style/style_layer/custom_style_layer.ts:32
模型视图投影矩阵表示从世界空间转换到裁剪空间的矩阵 https://learnopengl.com/Getting-started/Coordinate-Systems *
nearZ
nearZ:
number
定义于: src/style/style_layer/custom_style_layer.ts:22
此值表示从相机到近裁剪平面的距离。它用于计算投影矩阵以确定哪些对象可见。nearZ应小于farZ。
projectionMatrix
projectionMatrix:
mat4
定义于: src/style/style_layer/custom_style_layer.ts:38
投影矩阵表示从视图空间转换到裁剪空间的矩阵 https://learnopengl.com/Getting-started/Coordinate-Systems
shaderData
shaderData:
object
定义于: src/style/style_layer/custom_style_layer.ts:42
用于选择和编译当前投影的自定义着色器所需的数据。
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 // 执行特定于球体的操作 #endif }`;
variantName
variantName:
string
应使用的着色器变体名称。取决于当前投影。每当其他着色器属性发生变化时,此字符串也会变化,可用作缓存已编译着色器的键。
vertexShaderPrelude
vertexShaderPrelude:
string
要添加到顶点着色器的前导代码,以访问MapLibre的projectTile
投影函数。取决于当前投影。
示例
const vertexSource = `#version 300 es ${shaderData.vertexShaderPrelude} ${shaderData.define} in vec2 a_pos; void main() { gl_Position = projectTile(a_pos); }`;