@deck.gl/core
Version:
deck.gl core library
78 lines (69 loc) • 2.55 kB
JavaScript
// deck.gl
// SPDX-License-Identifier: MIT
// Copyright (c) vis.gl contributors
import project from "../project/project.js";
const source = /* wgsl */ `\
// Define a structure to hold both the clip-space position and the common position.
struct ProjectResult {
clipPosition: vec4<f32>,
commonPosition: vec4<f32>,
};
// This function mimics the GLSL version with the 'out' parameter by returning both values.
fn project_position_to_clipspace_and_commonspace(
position: vec3<f32>,
position64Low: vec3<f32>,
offset: vec3<f32>
) -> ProjectResult {
// Compute the projected position.
let projectedPosition: vec3<f32> = project_position_vec3_f64(position, position64Low);
// Start with the provided offset.
var finalOffset: vec3<f32> = offset;
// Get whether a rotation is needed and the rotation matrix.
let rotationResult = project_needs_rotation(projectedPosition);
// If rotation is needed, update the offset.
if (rotationResult.needsRotation) {
finalOffset = rotationResult.transform * offset;
}
// Compute the common position.
let commonPosition: vec4<f32> = vec4<f32>(projectedPosition + finalOffset, 1.0);
// Convert to clip-space.
let clipPosition: vec4<f32> = project_common_position_to_clipspace(commonPosition);
return ProjectResult(clipPosition, commonPosition);
}
// A convenience overload that returns only the clip-space position.
fn project_position_to_clipspace(
position: vec3<f32>,
position64Low: vec3<f32>,
offset: vec3<f32>
) -> vec4<f32> {
return project_position_to_clipspace_and_commonspace(position, position64Low, offset).clipPosition;
}
`;
const vs = /* glsl */ `\
vec4 project_position_to_clipspace(
vec3 position, vec3 position64Low, vec3 offset, out vec4 commonPosition
) {
vec3 projectedPosition = project_position(position, position64Low);
mat3 rotation;
if (project_needs_rotation(projectedPosition, rotation)) {
// offset is specified as ENU
// when in globe projection, rotate offset so that the ground alighs with the surface of the globe
offset = rotation * offset;
}
commonPosition = vec4(projectedPosition + offset, 1.0);
return project_common_position_to_clipspace(commonPosition);
}
vec4 project_position_to_clipspace(
vec3 position, vec3 position64Low, vec3 offset
) {
vec4 commonPosition;
return project_position_to_clipspace(position, position64Low, offset, commonPosition);
}
`;
export default {
name: 'project32',
dependencies: [project],
source,
vs
};
//# sourceMappingURL=project32.js.map