# Geometry

#### new Cesium.Geometry(options)
Core/Geometry.js 66

  A geometry representation with attributes forming vertices and optional index data defining primitives. Geometries and an `Appearance`, which describes the shading, can be assigned to a `Primitive` for visualization. A `Primitive` can be created from many heterogeneous - in many cases - geometries for performance.

  Geometries can be transformed and optimized using functions in `GeometryPipeline`.

  Name | Type | Description
  --- | --- | ---

  `options`

  Object

  Object with the following properties:

  Name | Type | Default | Description
  --- | --- | --- | ---
  `attributes` | GeometryAttributes |  | Attributes, which make up the geometry's vertices.
  `primitiveType` | PrimitiveType | `PrimitiveType.TRIANGLES` | optional The type of primitives in the geometry.
  `indices` | Uint16Array | Uint32Array |  | optional Optional index data that determines the primitives in the geometry.
  `boundingSphere` | BoundingSphere |  | optional An optional bounding sphere that fully enclosed the geometry.

  ##### Example:

      // Create geometry with a position attribute and indexed lines.
      var positions = new Float64Array([
        0.0, 0.0, 0.0,
        7500000.0, 0.0, 0.0,
        0.0, 7500000.0, 0.0
      ]);

      var geometry = new Cesium.Geometry({
        attributes : {
          position : new Cesium.GeometryAttribute({
            componentDatatype : Cesium.ComponentDatatype.DOUBLE,
            componentsPerAttribute : 3,
            values : positions
          })
        },
        indices : new Uint16Array([0, 1, 1, 2, 2, 0]),
        primitiveType : Cesium.PrimitiveType.LINES,
        boundingSphere : Cesium.BoundingSphere.fromVertices(positions)
      });

  ##### Demo:

  - Geometry and Appearances Demo

  ##### See:

  - PolygonGeometry
  - RectangleGeometry
  - EllipseGeometry
  - CircleGeometry
  - WallGeometry
  - SimplePolylineGeometry
  - BoxGeometry
  - EllipsoidGeometry

### Members

#### attributes : GeometryAttributes
Core/Geometry.js 121

  Attributes, which make up the geometry's vertices. Each property in this object corresponds to a `GeometryAttribute` containing the attribute's data.

  Attributes are always stored non-interleaved in a Geometry.

  There are reserved attribute names with well-known semantics. The following attributes are created by a Geometry (depending on the provided `VertexFormat`.

  - `position` - 3D vertex position. 64-bit floating-point (for precision). 3 components per attribute. See `VertexFormat#position`.
  - `normal` - Normal (normalized), commonly used for lighting. 32-bit floating-point. 3 components per attribute. See `VertexFormat#normal`.
  - `st` - 2D texture coordinate. 32-bit floating-point. 2 components per attribute. See `VertexFormat#st`.
  - `binormal` - Binormal (normalized), used for tangent-space effects like bump mapping. 32-bit floating-point. 3 components per attribute. See `VertexFormat#binormal`.
  - `tangent` - Tangent (normalized), used for tangent-space effects like bump mapping. 32-bit floating-point. 3 components per attribute. See `VertexFormat#tangent`.

  The following attribute names are generally not created by a Geometry, but are added to a Geometry by a `Primitive` or `GeometryPipeline` functions to prepare the geometry for rendering.

  - `position3DHigh` - High 32 bits for encoded 64-bit position computed with `GeometryPipeline.encodeAttribute`. 32-bit floating-point. 4 components per attribute.
  - `position3DLow` - Low 32 bits for encoded 64-bit position computed with `GeometryPipeline.encodeAttribute`. 32-bit floating-point. 4 components per attribute.
  - `position3DHigh` - High 32 bits for encoded 64-bit 2D (Columbus view) position computed with `GeometryPipeline.encodeAttribute`. 32-bit floating-point. 4 components per attribute.
  - `position2DLow` - Low 32 bits for encoded 64-bit 2D (Columbus view) position computed with `GeometryPipeline.encodeAttribute`. 32-bit floating-point. 4 components per attribute.
  - `color` - RGBA color (normalized) usually from `GeometryInstance#color`. 32-bit floating-point. 4 components per attribute.
  - `pickColor` - RGBA color used for picking. 32-bit floating-point. 4 components per attribute.
  Default Value: `undefined`

  ##### Example:

      geometry.attributes.position = new Cesium.GeometryAttribute({
        componentDatatype : Cesium.ComponentDatatype.FLOAT,
        componentsPerAttribute : 3,
        values : new Float32Array(0)
      });

  ##### See:

  - GeometryAttribute
  - VertexFormat

#### boundingSphere : BoundingSphere
Core/Geometry.js 151

  An optional bounding sphere that fully encloses the geometry. This is commonly used for culling.
  Default Value: `undefined`

#### indices : Array
Core/Geometry.js 131

  Optional index data that - along with `Geometry#primitiveType` - determines the primitives in the geometry.
  Default Value: `undefined`

#### primitiveType : PrimitiveType
Core/Geometry.js 141

  The type of primitives in the geometry. This is most often `PrimitiveType.TRIANGLES`, but can varying based on the specific geometry.
  Default Value: `undefined`

### Methods

#### staticCesium.Geometry.computeNumberOfVertices(geometry) → Number
Core/Geometry.js 174

  Computes the number of vertices in a geometry. The runtime is linear with respect to the number of attributes in a vertex, not the number of vertices.

  Name | Type | Description
  --- | --- | ---
  `geometry` | Geometry | The geometry.

  ##### Returns:

  The number of vertices in the geometry.

  ##### Example:

      var numVertices = Cesium.Geometry.computeNumberOfVertices(geometry);