PerInstanceColorAppearance

An appearance for GeometryInstance instances with color attributes. This allows several geometry instances, each with a different color, to be drawn with the same Primitive as shown in the second example below.

// A solid white line segment
const primitive = new Primitive({
geometryInstances : new GeometryInstance({
geometry : new SimplePolylineGeometry({
positions : Cartesian3.fromDegreesArray([
0.0, 0.0,
5.0, 0.0
])
}),
attributes : {
color : ColorGeometryInstanceAttribute.fromColor(new Color(1.0, 1.0, 1.0, 1.0))
}
}),
appearance : new PerInstanceColorAppearance({
flat : true,
translucent : false
})
});

// Two rectangles in a primitive, each with a different color
const instance = new GeometryInstance({
geometry : new RectangleGeometry({
rectangle : Rectangle.fromDegrees(0.0, 20.0, 10.0, 30.0)
}),
attributes : {
color : new ColorGeometryInstanceAttribute(1.0, 0.0, 0.0, 0.5)
}
});

const anotherInstance = new GeometryInstance({
geometry : new RectangleGeometry({
rectangle : Rectangle.fromDegrees(0.0, 40.0, 10.0, 50.0)
}),
attributes : {
color : new ColorGeometryInstanceAttribute(0.0, 0.0, 1.0, 0.5)
}
});

const rectanglePrimitive = new Primitive({
geometryInstances : [instance, anotherInstance],
appearance : new PerInstanceColorAppearance()
});

See also

Constructors

Link copied to clipboard
constructor(options: PerInstanceColorAppearance.ConstructorOptions? = definedExternally)

Types

Link copied to clipboard
object Companion
Link copied to clipboard

Properties

Link copied to clipboard
open override val closed: Boolean

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

Link copied to clipboard

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.

Link copied to clipboard

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

Link copied to clipboard
open override val fragmentShaderSource: String

The GLSL source code for the fragment shader.

Link copied to clipboard
open override var material: Material

This property is part of the Appearance interface, but is not used by PerInstanceColorAppearance since a fully custom fragment shader is used.

Link copied to clipboard
open override val renderState: JsAny

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

Link copied to clipboard
open override var translucent: Boolean

When true, the geometry is expected to appear translucent so PerInstanceColorAppearance.renderState has alpha blending enabled.

Link copied to clipboard

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.

Link copied to clipboard
open override val vertexShaderSource: String

The GLSL source code for the vertex shader.

Functions

Link copied to clipboard
open override fun getFragmentShaderSource(): String

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

Link copied to clipboard
open override fun getRenderState(): JsAny

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.

Link copied to clipboard
open override fun isTranslucent(): Boolean

Determines if the geometry is translucent based on PerInstanceColorAppearance.translucent.