场景
中的几何。几何可以来自单个
GeometryInstance
如下面的示例1所示,或者来自实例数组,即使几何图形来自不同几何类型,例如
RectangleGeometry
和
EllipsoidGeometry
a>如代码示例2所示。
基本体将几何实例与描述完整阴影的
Appearance
组合在一起,包括
材料
和
RenderState
。大致而言,几何实例定义了结构和位置,外观定义了视觉特征。解耦的几何形状和外观使我们能够混合并匹配其中的大多数,并彼此独立地添加新的几何形状或外观。
将多个实例组合成一个原语称为批处理,可显着提高静态数据的性能。可以单独选择实例;
Scene#pick
返回其
GeometryInstance#id
。使用每个实例的外观,例如
PerInstanceColorAppearance
,每个实例也可以具有唯一的颜色。
几何
可以在网络工作者或主线程上创建和批处理。前两个例子显示将通过使用几何描述在Web工作者上创建的几何。第三个例子显示了如何通过显式调用
createGeometry
方法在主线程上创建几何的方法。
Name | Type | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
options
|
Object |
optional
Object with the following properties:
|
Examples:
// 1. Draw a translucent ellipse on the surface with a checkerboard pattern
var instance = new LSGlobe.GeometryInstance({
geometry : new LSGlobe.EllipseGeometry({
center : LSGlobe.Cartesian3.fromDegrees(-100.0, 20.0),
semiMinorAxis : 500000.0,
semiMajorAxis : 1000000.0,
rotation : LSGlobe.Math.PI_OVER_FOUR,
vertexFormat : LSGlobe.VertexFormat.POSITION_AND_ST
}),
id : 'object returned when this instance is picked and to get/set per-instance attributes'
});
scene.primitives.add(new LSGlobe.Primitive({
geometryInstances : instance,
appearance : new LSGlobe.EllipsoidSurfaceAppearance({
material : LSGlobe.Material.fromType('Checkerboard')
})
}));
// 2. Draw different instances each with a unique color
var rectangleInstance = new LSGlobe.GeometryInstance({
geometry : new LSGlobe.RectangleGeometry({
rectangle : LSGlobe.Rectangle.fromDegrees(-140.0, 30.0, -100.0, 40.0),
vertexFormat : LSGlobe.PerInstanceColorAppearance.VERTEX_FORMAT
}),
id : 'rectangle',
attributes : {
color : new LSGlobe.ColorGeometryInstanceAttribute(0.0, 1.0, 1.0, 0.5)
}
});
var ellipsoidInstance = new LSGlobe.GeometryInstance({
geometry : new LSGlobe.EllipsoidGeometry({
radii : new LSGlobe.Cartesian3(500000.0, 500000.0, 1000000.0),
vertexFormat : LSGlobe.VertexFormat.POSITION_AND_NORMAL
}),
modelMatrix : LSGlobe.Matrix4.multiplyByTranslation(LSGlobe.Transforms.eastNorthUpToFixedFrame(
LSGlobe.Cartesian3.fromDegrees(-95.59777, 40.03883)), new LSGlobe.Cartesian3(0.0, 0.0, 500000.0), new LSGlobe.Matrix4()),
id : 'ellipsoid',
attributes : {
color : LSGlobe.ColorGeometryInstanceAttribute.fromColor(LSGlobe.Color.AQUA)
}
});
scene.primitives.add(new LSGlobe.Primitive({
geometryInstances : [rectangleInstance, ellipsoidInstance],
appearance : new LSGlobe.PerInstanceColorAppearance()
}));
// 3. Create the geometry on the main thread.
scene.primitives.add(new LSGlobe.Primitive({
geometryInstances : new LSGlobe.GeometryInstance({
geometry : LSGlobe.EllipsoidGeometry.createGeometry(new LSGlobe.EllipsoidGeometry({
radii : new LSGlobe.Cartesian3(500000.0, 500000.0, 1000000.0),
vertexFormat : LSGlobe.VertexFormat.POSITION_AND_NORMAL
})),
modelMatrix : LSGlobe.Matrix4.multiplyByTranslation(LSGlobe.Transforms.eastNorthUpToFixedFrame(
LSGlobe.Cartesian3.fromDegrees(-95.59777, 40.03883)), new LSGlobe.Cartesian3(0.0, 0.0, 500000.0), new LSGlobe.Matrix4()),
id : 'ellipsoid',
attributes : {
color : LSGlobe.ColorGeometryInstanceAttribute.fromColor(LSGlobe.Color.AQUA)
}
}),
appearance : new LSGlobe.PerInstanceColorAppearance()
}));
See:
Members
-
Default Value:
true
appearance : Appearance
外观
用于为该原语着色。每个几何实例以相同的外观着色。一些外观,例如
PerInstanceColorAppearance
允许给每个实例唯一属性。
-
Default Value:
undefined
-
Default Value:
true
true
时,将压缩几何顶点,这将节省内存。
-
Default Value:
true
true
,则渲染器视锥体会剔除视域,而horizon会剔除图元的命令根据它们的边界体积。将此设置为
false
可获得较小的性能提升如果您要手动剔除原语。
-
Default Value:
true
为图元中的每个绘制命令绘制边界球。
-
Default Value:
false
depthFailAppearance : Appearance
Appearance
用于在深度测试失败时为其着色。每个几何实例以相同的外观着色。一些外观,例如
PerInstanceColorAppearance
允许给每个实例唯一属性。
当使用需要颜色属性的外观(例如PerInstanceColorAppearance)时,而是添加一个depthFailColor每个实例属性。
需要EXT_frag_depth WebGL扩展才能正确呈现。如果不支持扩展,可能有文物。
-
Default Value:
undefined
readonly geometryInstances : Array.< GeometryInstance >| GeometryInstance
options.releaseGeometryInstances
为
undefined
构造基元时为
true
。
渲染图元后更改此属性无效。
-
Default Value:
undefined
-
Default Value:
false
modelMatrix : Matrix4
Transforms.eastNorthUpToFixedFrame
。
仅在3D模式下支持此属性。
-
Default Value:
Matrix4.IDENTITY
Example:
var origin = LSGlobe.Cartesian3.fromDegrees(-95.0, 40.0, 200000.0);
p.modelMatrix = LSGlobe.Transforms.eastNorthUpToFixedFrame(origin);
Primitive#update
时将渲染图元。叫做。
readonly readyPromise : Promise.< Primitive >
true
,则该原语不保留对输入的
geometryInstances
的引用以节省内存。
-
Default Value:
true
shadows : ShadowMode
-
Default Value:
ShadowMode.DISABLED
-
Default Value:
true
true
,则为顶点着色器之前和之后的缓存优化几何顶点。
-
Default Value:
true
Methods
一旦物体被破坏,就不应使用。调用除
isDestroyed
将导致
DeveloperError
异常。因此,如示例中所述,将返回值(
undefined
)分配给对象。
Throws:
-
DeveloperError :此对象已销毁,即调用destroy()。
Example:
e = e && e.destroy();
See:
GeometryInstance
的每个实例的可修改属性。
Name | Type | Description |
---|---|---|
id
|
* |
GeometryInstance
的ID。
|
Returns:
Throws:
-
DeveloperError :必须在调用getGeometryInstanceAttributes之前调用update。
Example:
var attributes = primitive.getGeometryInstanceAttributes('an id');
attributes.color = LSGlobe.ColorGeometryInstanceAttribute.toValue(LSGlobe.Color.AQUA);
attributes.show = LSGlobe.ShowGeometryInstanceAttribute.toValue(true);
attributes.distanceDisplayCondition = LSGlobe.DistanceDisplayConditionGeometryInstanceAttribute.toValue(100.0, 10000.0);
attributes.offset = LSGlobe.OffsetGeometryInstanceAttribute.toValue(Cartesian3.IDENTITY);
如果该对象被破坏,则不应使用。调用除
isDestroyed
将导致
DeveloperError
异常。
Returns:
真正
该物体是否被破坏;除此以外,
假
。
See:
Throws:
-
DeveloperError :所有实例几何必须具有相同的primaryType。
-
DeveloperError :外观和材料具有相同名称的制服。
-
DeveloperError :Primitive.modelMatrix仅在3D模式下受支持。
-
RuntimeError :需要使用顶点纹理获取来渲染具有每个实例属性的图元。顶点纹理图像单元的最大数量必须大于零。