GeometryPipeline
Content pipeline functions for geometries.
See:
Methods
-
staticGeometryPipeline.combine(instances) → Geometry
-
Combines geometry from several
GeometryInstance
objects into one geometry. This concatenates the attributes, concatenates and adjusts the indices, and creates a bounding sphere encompassing all instances.If the instances do not have the same attributes, a subset of attributes common to all instances is used, and the others are ignored.
This is used by
Primitive
to efficiently render a large amount of static data.Name Type Description instances
GeometryInstance[] optional The array of GeometryInstance
objects whose geometry will be combined.Returns:
A single geometry created from the provided geometry instances.Throws:
-
DeveloperError : All instances must have the same modelMatrix.
-
DeveloperError : All instance geometries must have an indices or not have one.
-
DeveloperError : All instance geometries must have the same primitiveType.
Example:
for (var i = 0; i < instances.length; ++i) { Cesium.GeometryPipeline.transformToWorldCoordinates(instances[i]); } var geometry = Cesium.GeometryPipeline.combine(instances);
See:
-
-
staticGeometryPipeline.computeBinormalAndTangent(geometry) → Geometry
-
Computes per-vertex binormals and tangents for a geometry containing
TRIANGLES
. The result is newbinormal
andtangent
attributes added to the geometry. This assumes a counter-clockwise winding order.Based on Computing Tangent Space Basis Vectors for an Arbitrary Mesh by Eric Lengyel.
Name Type Description geometry
Geometry The geometry to modify. Returns:
The modifiedgeometry
argument with the computedbinormal
andtangent
attributes.Throws:
-
DeveloperError : geometry.indices length must be greater than 0 and be a multiple of 3.
-
DeveloperError : geometry.primitiveType must be
PrimitiveType.TRIANGLES
.
Example:
Cesium.GeometryPipeline.computeBinormalAndTangent(geometry);
-
-
staticGeometryPipeline.computeNormal(geometry) → Geometry
-
Computes per-vertex normals for a geometry containing
TRIANGLES
by averaging the normals of all triangles incident to the vertex. The result is a newnormal
attribute added to the geometry. This assumes a counter-clockwise winding order.Name Type Description geometry
Geometry The geometry to modify. Returns:
The modifiedgeometry
argument with the computednormal
attribute.Throws:
-
DeveloperError : geometry.indices length must be greater than 0 and be a multiple of 3.
-
DeveloperError : geometry.primitiveType must be
PrimitiveType.TRIANGLES
.
Example:
Cesium.GeometryPipeline.computeNormal(geometry);
-
-
staticGeometryPipeline.createAttributeLocations(geometry) → Object
-
Creates an object that maps attribute names to unique locations (indices) for matching vertex attributes and shader programs.
Name Type Description geometry
Geometry The geometry, which is not modified, to create the object for. Returns:
An object with attribute name / index pairs.Example:
var attributeLocations = Cesium.GeometryPipeline.createAttributeLocations(geometry); // Example output // { // 'position' : 0, // 'normal' : 1 // }
-
staticGeometryPipeline.createLineSegmentsForVectors(geometry, attributeName, length) → Geometry
-
Creates a new
Geometry
withLINES
representing the provided attribute (attributeName
) for the provided geometry. This is used to visualize vector attributes like normals, binormals, and tangents.Name Type Default Description geometry
Geometry The Geometry
instance with the attribute.attributeName
String 'normal'
optional The name of the attribute. length
Number 10000.0
optional The length of each line segment in meters. This can be negative to point the vector in the opposite direction. Returns:
A newGeometry
instance with line segments for the vector.
Throws:
-
DeveloperError : geometry.attributes must have an attribute with the same name as the attributeName parameter.
Example:
var geometry = Cesium.GeometryPipeline.createLineSegmentsForVectors(instance.geometry, 'binormal', 100000.0),
-
-
staticGeometryPipeline.encodeAttribute(geometry, attributeName, attributeHighName, attributeLowName) → Geometry
-
Encodes floating-point geometry attribute values as two separate attributes to improve rendering precision using the same encoding as
EncodedCartesian3
.This is commonly used to create high-precision position vertex attributes.
Name Type Description geometry
Geometry The geometry to modify. attributeName
String The name of the attribute. attributeHighName
String The name of the attribute for the encoded high bits. attributeLowName
String The name of the attribute for the encoded low bits. Returns:
The modifiedgeometry
argument, with its encoded attribute.Throws:
-
DeveloperError : geometry must have attribute matching the attributeName argument.
-
DeveloperError : The attribute componentDatatype must be ComponentDatatype.DOUBLE.
Example:
geometry = Cesium.GeometryPipeline.encodeAttribute(geometry, 'position3D', 'position3DHigh', 'position3DLow');
See:
-
-
staticGeometryPipeline.fitToUnsignedShortIndices(geometry) → Geometry[]
-
Splits a geometry into multiple geometries, if necessary, to ensure that indices in the
indices
fit into unsigned shorts. This is used to meet the WebGL requirements when unsigned int indices are not supported.If the geometry does not have any
indices
, this function has no effect.Name Type Description geometry
Geometry The geometry to be split into multiple geometries. Returns:
An array of geometries, each with indices that fit into unsigned shorts.Throws:
-
DeveloperError : geometry.primitiveType must equal to PrimitiveType.TRIANGLES, PrimitiveType.LINES, or PrimitiveType.POINTS
-
DeveloperError : All geometry attribute lists must have the same number of attributes.
Example:
var geometries = Cesium.GeometryPipeline.fitToUnsignedShortIndices(geometry);
-
-
staticGeometryPipeline.projectTo2D(geometry, attributeName, attributeName3D, attributeName2D, projection) → Geometry
-
Projects a geometry's 3D
position
attribute to 2D, replacing theposition
attribute with separateposition3D
andposition2D
attributes.If the geometry does not have a
position
, this function has no effect.Name Type Default Description geometry
Geometry The geometry to modify. attributeName
String The name of the attribute. attributeName3D
String The name of the attribute in 3D. attributeName2D
String The name of the attribute in 2D. projection
Object new GeographicProjection()
optional The projection to use. Returns:
The modifiedgeometry
argument withposition3D
andposition2D
attributes.Throws:
-
DeveloperError : geometry must have attribute matching the attributeName argument.
-
DeveloperError : The attribute componentDatatype must be ComponentDatatype.DOUBLE.
-
DeveloperError : Could not project a point to 2D.
Example:
geometry = Cesium.GeometryPipeline.projectTo2D(geometry, 'position', 'position3D', 'position2D');
-
-
staticGeometryPipeline.reorderForPostVertexCache(geometry, cacheCapacity) → Geometry
-
Reorders a geometry's
indices
to achieve better performance from the GPU's post vertex-shader cache by using the Tipsify algorithm. If the geometryprimitiveType
is notTRIANGLES
or the geometry does not have anindices
, this function has no effect.Name Type Default Description geometry
Geometry The geometry to modify. cacheCapacity
Number 24
optional The number of vertices that can be held in the GPU's vertex cache. Returns:
The modifiedgeometry
argument, with its indices reordered for the post-vertex-shader cache.Throws:
-
DeveloperError : cacheCapacity must be greater than two.
- GeometryPipeline.reorderForPreVertexCache
- Fast Triangle Reordering for Vertex Locality and Reduced Overdraw by Sander, Nehab, and Barczak
Example:
geometry = Cesium.GeometryPipeline.reorderForPostVertexCache(geometry);
See:
-
-
staticGeometryPipeline.reorderForPreVertexCache(geometry) → Geometry
-
Reorders a geometry's attributes and
indices
to achieve better performance from the GPU's pre-vertex-shader cache.Name Type Description geometry
Geometry The geometry to modify. Returns:
The modifiedgeometry
argument, with its attributes and indices reordered for the GPU's pre-vertex-shader cache.Throws:
-
DeveloperError : Each attribute array in geometry.attributes must have the same number of attributes.
Example:
geometry = Cesium.GeometryPipeline.reorderForPreVertexCache(geometry);
See:
-
-
staticGeometryPipeline.toWireframe(geometry) → Geometry
-
Converts a geometry's triangle indices to line indices. If the geometry has an
indices
and itsprimitiveType
isTRIANGLES
,TRIANGLE_STRIP
,TRIANGLE_FAN
, it is converted toLINES
; otherwise, the geometry is not changed.This is commonly used to create a wireframe geometry for visual debugging.
Name Type Description geometry
Geometry The geometry to modify. Returns:
The modifiedgeometry
argument, with its triangle indices converted to lines.Throws:
-
DeveloperError : geometry.primitiveType must be TRIANGLES, TRIANGLE_STRIP, or TRIANGLE_FAN.
Example:
geometry = Cesium.GeometryPipeline.toWireframe(geometry);
-
-
staticGeometryPipeline.transformToWorldCoordinates(instance) → GeometryInstance
-
Transforms a geometry instance to world coordinates. This is used as a prerequisite to batch together several instances with
GeometryPipeline.combine
. This changes the instance'smodelMatrix
toMatrix4.IDENTITY
and transforms the following attributes if they are present:position
,normal
,binormal
, andtangent
.Name Type Description instance
GeometryInstance The geometry instance to modify. Returns:
The modifiedinstance
argument, with its attributes transforms to world coordinates.Example:
for (var i = 0; i < instances.length; ++i) { Cesium.GeometryPipeline.transformToWorldCoordinates(instances[i]); } var geometry = Cesium.GeometryPipeline.combine(instances);
See:
-
staticGeometryPipeline.wrapLongitude(geometry) → Geometry
-
Splits the geometry's primitives, by introducing new vertices and indices,that intersect the International Date Line so that no primitives cross longitude -180/180 degrees. This is not required for 3D drawing, but is required for correcting drawing in 2D and Columbus view.
Name Type Description geometry
Geometry The geometry to modify. Returns:
The modifiedgeometry
argument, with it's primitives split at the International Date Line.Example:
geometry = Cesium.GeometryPipeline.wrapLongitude(geometry);