在 Mapbox 上旋转 Deck.gl 点云图层
rotating a Deck.gl point cloud layer on Mapbox
我正在尝试将 deck.gl PointCloud 图层与 Mapbox 上的某个位置对齐。我尝试修改位置值并且它正在工作,但我想知道是否有另一种更简单的方法来修改图层方向而不是修改数据。
我用这段代码来定义图层:
const pointsLayer = new deck.MapboxLayer({
id: 'points',
type: deck.PointCloudLayer,
data: dataArray,
pickable: false,
coordinateSystem: deck.COORDINATE_SYSTEM.METER_OFFSETS,
coordinateOrigin: [25, 55],
pointSize: 1,
getPosition: d => d.position,
getColor: d => d.color,
});
我在 documentation 中找不到任何实现该目标的 Prop
您应该在 Layer
基类上使用 modelMatrix
property。
transformation 是使用 3D space 的 4x4 变换矩阵完成的,它包括旋转和平移方面。如果你想沿着一个特定的轴旋转,你可以看下面的例子。
// No rotation and no translation
modelMatrix: [1,0,0,0,
0,1,0,0,
0,0,1,0,
0,0,0,1],
// Rotate X-axis theta degrees
modelMatrix: [1,0,0,0,
0,cos(theta),-sin(theta),0,
0,sin(theta),cos(theta),0,
0,0,0,1],
// Rotate Y-axis phi degrees
modelMatrix: [cos(phi),0,sin(phi),0,
0,1,0,0,
-sin(phi),0,cos(theta),0,
0,0,0,1],
// Rotate Z-axis omega degrees
modelMatrix: [cos(omega),-sin(omega),0,0,
sin(omega),cos(omega),0,0,
0,0,1,0,
0,0,0,1],
我正在尝试将 deck.gl PointCloud 图层与 Mapbox 上的某个位置对齐。我尝试修改位置值并且它正在工作,但我想知道是否有另一种更简单的方法来修改图层方向而不是修改数据。
我用这段代码来定义图层:
const pointsLayer = new deck.MapboxLayer({
id: 'points',
type: deck.PointCloudLayer,
data: dataArray,
pickable: false,
coordinateSystem: deck.COORDINATE_SYSTEM.METER_OFFSETS,
coordinateOrigin: [25, 55],
pointSize: 1,
getPosition: d => d.position,
getColor: d => d.color,
});
我在 documentation 中找不到任何实现该目标的 Prop
您应该在 Layer
基类上使用 modelMatrix
property。
transformation 是使用 3D space 的 4x4 变换矩阵完成的,它包括旋转和平移方面。如果你想沿着一个特定的轴旋转,你可以看下面的例子。
// No rotation and no translation
modelMatrix: [1,0,0,0,
0,1,0,0,
0,0,1,0,
0,0,0,1],
// Rotate X-axis theta degrees
modelMatrix: [1,0,0,0,
0,cos(theta),-sin(theta),0,
0,sin(theta),cos(theta),0,
0,0,0,1],
// Rotate Y-axis phi degrees
modelMatrix: [cos(phi),0,sin(phi),0,
0,1,0,0,
-sin(phi),0,cos(theta),0,
0,0,0,1],
// Rotate Z-axis omega degrees
modelMatrix: [cos(omega),-sin(omega),0,0,
sin(omega),cos(omega),0,0,
0,0,1,0,
0,0,0,1],