# EllipsoidSurfaceAppearance

#### new Cesium.EllipsoidSurfaceAppearance(options)
engine/Source/Scene/EllipsoidSurfaceAppearance.js 44

An appearance for geometry on the surface of the ellipsoid like `PolygonGeometry` and `RectangleGeometry`, which supports all materials like `MaterialAppearance` with `MaterialAppearance.MaterialSupport.ALL`. However, this appearance requires fewer vertex attributes since the fragment shader can procedurally compute `normal`, `tangent`, and `bitangent`.

Name | Type | Description
--- | --- | ---
`options` | object | optional Object with the following properties:
Name | Type | Default | Description
--- | --- | --- | ---
`flat` | boolean | `false` | optional When `true`, flat shading is used in the fragment shader, which means lighting is not taking into account.
`faceForward` | boolean | `options.aboveGround` | optional When `true`, the fragment shader flips the surface normal as needed to ensure that the normal faces the viewer to avoid dark spots. This is useful when both sides of a geometry should be shaded like `WallGeometry`.
`translucent` | boolean | `true` | optional When `true`, the geometry is expected to appear translucent so `EllipsoidSurfaceAppearance#renderState` has alpha blending enabled.
`aboveGround` | boolean | `false` | optional When `true`, the geometry is expected to be on the ellipsoid's surface - not at a constant height above it - so `EllipsoidSurfaceAppearance#renderState` has backface culling enabled.
`material` | Material | `Material.ColorType` | optional The material used to determine the fragment color.
`vertexShaderSource` | string |  | optional Optional GLSL vertex shader source to override the default vertex shader.
`fragmentShaderSource` | string |  | optional Optional GLSL fragment shader source to override the default fragment shader.
`renderState` | object |  | optional Optional render state to override the default render state.

##### Example:

    const primitive = new Cesium.Primitive({
      geometryInstances : new Cesium.GeometryInstance({
        geometry : new Cesium.PolygonGeometry({
          vertexFormat : Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT,
          // ...
        })
      }),
      appearance : new Cesium.EllipsoidSurfaceAppearance({
        material : Cesium.Material.fromType('Stripe')
      })
    });

##### See:

- Fabric

### Members

#### static constant Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT : VertexFormat
engine/Source/Scene/EllipsoidSurfaceAppearance.js 243

The `VertexFormat` that all `EllipsoidSurfaceAppearance` instances are compatible with, which requires only `position` and `st` attributes. Other attributes are procedurally computed in the fragment shader.

#### readonly aboveGround : boolean
engine/Source/Scene/EllipsoidSurfaceAppearance.js 227

When `true`, the geometry is expected to be on the ellipsoid's surface - not at a constant height above it - so `EllipsoidSurfaceAppearance#renderState` has backface culling enabled.

Default Value: `false`

#### readonly closed : boolean
engine/Source/Scene/EllipsoidSurfaceAppearance.js 154

When `true`, the geometry is expected to be closed so `EllipsoidSurfaceAppearance#renderState` has backface culling enabled. If the viewer enters the geometry, it will not be visible.

Default Value: `false`

#### readonly faceForward : boolean
engine/Source/Scene/EllipsoidSurfaceAppearance.js 208

When `true`, the fragment shader flips the surface normal as needed to ensure that the normal faces the viewer to avoid dark spots. This is useful when both sides of a geometry should be shaded like `WallGeometry`.

Default Value: `true`

#### readonly flat : boolean
engine/Source/Scene/EllipsoidSurfaceAppearance.js 189

When `true`, flat shading is used in the fragment shader, which means lighting is not taking into account.

Default Value: `false`

#### readonly fragmentShaderSource : string
engine/Source/Scene/EllipsoidSurfaceAppearance.js 117

The GLSL source code for the fragment shader. The full fragment shader source is built procedurally taking into account `EllipsoidSurfaceAppearance#material`, `EllipsoidSurfaceAppearance#flat`, and `EllipsoidSurfaceAppearance#faceForward`. Use `EllipsoidSurfaceAppearance#getFragmentShaderSource` to get the full source.

#### material : Material
engine/Source/Scene/EllipsoidSurfaceAppearance.js 60

The material used to determine the fragment color. Unlike other `EllipsoidSurfaceAppearance` properties, this is not read-only, so an appearance's material can change on the fly.

Default Value: ``Material.ColorType``

##### See:

- Fabric

#### readonly renderState : object
engine/Source/Scene/EllipsoidSurfaceAppearance.js 136

The WebGL fixed-function state to use when rendering the geometry.

The render state can be explicitly defined when constructing a `EllipsoidSurfaceAppearance` instance, or it is set implicitly via `EllipsoidSurfaceAppearance#translucent` and `EllipsoidSurfaceAppearance#aboveGround`.

#### translucent : boolean
engine/Source/Scene/EllipsoidSurfaceAppearance.js 71

When `true`, the geometry is expected to appear translucent.

Default Value: `true`

#### readonly vertexFormat : VertexFormat
engine/Source/Scene/EllipsoidSurfaceAppearance.js 172

The `VertexFormat` that this appearance instance is compatible with. A geometry can have more vertex attributes and still be compatible - at a potential performance cost - but it can't have less.

Default Value: ``EllipsoidSurfaceAppearance.VERTEX_FORMAT``

#### readonly vertexShaderSource : string
engine/Source/Scene/EllipsoidSurfaceAppearance.js 100

The GLSL source code for the vertex shader.

### Methods

#### getFragmentShaderSource() → string
engine/Source/Scene/EllipsoidSurfaceAppearance.js 254

Procedurally creates the full GLSL fragment shader source. For `EllipsoidSurfaceAppearance`, this is derived from `EllipsoidSurfaceAppearance#fragmentShaderSource`, `EllipsoidSurfaceAppearance#flat`, and `EllipsoidSurfaceAppearance#faceForward`.

##### Returns:

The full GLSL fragment shader source.

#### getRenderState() → object
engine/Source/Scene/EllipsoidSurfaceAppearance.js 276

Creates a render state. This is not the final render state instance; instead, it can contain a subset of render state properties identical to the render state created in the context.

##### Returns:

The render state.

#### isTranslucent() → boolean
engine/Source/Scene/EllipsoidSurfaceAppearance.js 264

Determines if the geometry is translucent based on `EllipsoidSurfaceAppearance#translucent` and `Material#isTranslucent`.

##### Returns:

`true` if the appearance is translucent.

Need help? The fastest way to get answers is from the community and team on the Cesium Forum.