learning_cesium/加载primiive对象csdn.html

936 lines
29 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<script src="./Build/Cesium/Cesium.js"></script>
<link href="./Build/Cesium/Widgets/widgets.css" rel="stylesheet" />
<style>
@import url(./Build/Cesium/Widgets/widgets.css);
html,
body,
#cesiumContainer {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
</style>
</head>
<body>
<div id="cesiumContainer"></div>
<script>
Cesium.Ion.defaultAccessToken =
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI5ZjRjNTZkNC01NDYxLTRhMjQtOGEwZC1kZjA3YzQ5YTJlZDkiLCJpZCI6MjYwODQsInNjb3BlcyI6WyJhc3IiLCJnYyJdLCJpYXQiOjE1ODcxOTMwODN9.prGsSKyAW_9Ow5zHYPhbm3LsQL-ApQw5-5PNJkDaHi8";
var viewer = new Cesium.Viewer("cesiumContainer", {
// terrainProvider: Cesium.createWorldTerrain({
// requestVertexNormal: true, //添加地形光照
// requestWaterMask: true, //添加水面波浪效果
// }),
// baseLayerPicker: false, //底图选择器
// mapProjection : new Cesium.WebMercatorProjection(),
// geocoder:false,//位置查找
// homeButton:false,//视图返回初始位置
// sceneModePicker:false,//视角选择器
// navigationHelpButton:false,//导航帮助按钮
// animation:false,//动画控制器
// // creditContainer:"credit",//版权显示,指定dom对象的id,再通过id样式可以隐藏CESIUM 版本图标
// timeline:false,//时间线
// fullscreenButton:false,//全屏控件
// vrButton:false,
// infoBox:true ,
// shouldAnimate:true,
// scene3DOnly:true,//默认false若为true,所有几何体实例将仅会在3D模式中渲染(在GPU内存中)
// terrainProvider: Cesium.createWorldTerrain({
// requestVertexNormal: true, //添加地形光照
// requestWaterMask: true, //添加水面波浪效果
// }),
});
viewer.imageryLayers.removeAll();
// 添加 Mapbox tile provider
const mapboxAccess =
"pk.eyJ1IjoicWl1c2hpamllIiwiYSI6ImNsMDNvdDRybDEyc2YzZG9kbWZoY2FuOW0ifQ.4FH-BUupi46Z0zQ-CEm_Ig";
// 样式id查看https://docs.mapbox.com/api/maps/styles/
// URL格式的 mapbox://styles/:owner/:style 其中 :owner 是您的 Mapbox 账户名 :style 是样式 ID 。
// 可选值streets-v10、outdoors-v10 、light-v9、dark-v9、satellite-v9、satellite-streets-v10
const mapboxStyleImagery = new Cesium.MapboxStyleImageryProvider({
styleId: "dark-v9",
accessToken: mapboxAccess,
// proxy: new Cesium.DefaultProxy("http://127.0.0.1:8080/proxy/"),
});
viewer.imageryLayers.addImageryProvider(mapboxStyleImagery);
Cesium.Math.setRandomNumberSeed(1234);
var scene = viewer.scene;
var primitives = scene.primitives;
var solidWhite = Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.WHITE);
// Combine instances for a rectangle, polygon, ellipse, and circle into a single primitive.
var rectangle = Cesium.Rectangle.fromDegrees(-92.0, 20.0, -86.0, 27.0);
var rectangleInstance = new Cesium.GeometryInstance({
geometry: new Cesium.RectangleGeometry({
rectangle: rectangle,
vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT,
stRotation: Cesium.Math.toRadians(45)
})
});
var rectangleOutlineInstance = new Cesium.GeometryInstance({
geometry: new Cesium.RectangleOutlineGeometry({
rectangle: rectangle
}),
attributes: {
color: solidWhite
}
});
var positions = Cesium.Cartesian3.fromDegreesArray([-107.0, 27.0, -107.0, 22.0, -102.0, 23.0, -97.0, 21.0, -97.0, 25.0]);
var polygonInstance = new Cesium.GeometryInstance({
geometry: Cesium.PolygonGeometry.fromPositions({
positions: positions,
vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT
})
});
var polygonOutlineInstance = new Cesium.GeometryInstance({
geometry: Cesium.PolygonOutlineGeometry.fromPositions({
positions: positions
}),
attributes: {
color: solidWhite
}
});
var center = Cesium.Cartesian3.fromDegrees(-80.0, 25.0);
var semiMinorAxis = 300000.0;
var semiMajorAxis = 500000.0;
var rotation = Cesium.Math.toRadians(-40.0);
var ellipseInstance = new Cesium.GeometryInstance({
geometry: new Cesium.EllipseGeometry({
center: center,
semiMinorAxis: semiMinorAxis,
semiMajorAxis: semiMajorAxis,
rotation: rotation,
stRotation: Cesium.Math.toRadians(22),
vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT
})
});
var ellipseOutlineInstance = new Cesium.GeometryInstance({
geometry: new Cesium.EllipseOutlineGeometry({
center: center,
semiMinorAxis: semiMinorAxis,
semiMajorAxis: semiMajorAxis,
rotation: rotation
}),
attributes: {
color: solidWhite
}
});
center = Cesium.Cartesian3.fromDegrees(-72.0, 25.0);
var radius = 250000.0;
var circleInstance = new Cesium.GeometryInstance({
geometry: new Cesium.CircleGeometry({
center: center,
radius: radius,
stRotation: Cesium.Math.toRadians(90),
vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT
})
});
var circleOutlineInstance = new Cesium.GeometryInstance({
geometry: new Cesium.CircleOutlineGeometry({
center: center,
radius: radius
}),
attributes: {
color: solidWhite
}
});
primitives.add(new Cesium.Primitive({
geometryInstances: [rectangleInstance, polygonInstance, ellipseInstance, circleInstance],
appearance: new Cesium.EllipsoidSurfaceAppearance({
material: Cesium.Material.fromType('Stripe')
})
}));
primitives.add(new Cesium.Primitive({
geometryInstances: [rectangleOutlineInstance, polygonOutlineInstance, ellipseOutlineInstance, circleOutlineInstance],
appearance: new Cesium.PerInstanceColorAppearance({
flat: true,
translucent: false,
renderState: {
lineWidth: Math.min(4.0, scene.maximumAliasedLineWidth)
}
})
}));
// Create extruded rectangle
rectangle = Cesium.Rectangle.fromDegrees(-118.0, 38.0, -116.0, 40.0);
var extrudedHeight = 500000.0;
var extrudedRectangle = new Cesium.GeometryInstance({
geometry: new Cesium.RectangleGeometry({
rectangle: rectangle,
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
extrudedHeight: extrudedHeight
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 1.0
}))
}
});
var extrudedOutlineRectangle = new Cesium.GeometryInstance({
geometry: new Cesium.RectangleOutlineGeometry({
rectangle: rectangle,
extrudedHeight: extrudedHeight
}),
attributes: {
color: solidWhite
}
});
// Create extruded ellipse
center = Cesium.Cartesian3.fromDegrees(-117.0, 35.0);
semiMinorAxis = 100000.0;
semiMajorAxis = 200000.0;
rotation = Cesium.Math.toRadians(90);
var height = 100000.0;
extrudedHeight = 200000.0;
var extrudedEllipse = new Cesium.GeometryInstance({
geometry: new Cesium.EllipseGeometry({
center: center,
semiMinorAxis: semiMinorAxis,
semiMajorAxis: semiMajorAxis,
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
height: height,
rotation: rotation,
extrudedHeight: extrudedHeight
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 1.0
}))
}
});
var extrudedOutlineEllipse = new Cesium.GeometryInstance({
geometry: new Cesium.EllipseOutlineGeometry({
center: center,
semiMinorAxis: semiMinorAxis,
semiMajorAxis: semiMajorAxis,
height: height,
rotation: rotation,
extrudedHeight: extrudedHeight
}),
attributes: {
color: solidWhite
}
});
// Create extruded polygon
var polygonHierarchy = {
positions: Cesium.Cartesian3.fromDegreesArray([-118.0, 30.0, -115.0, 30.0, -117.1, 31.1, -118.0, 33.0])
};
height = 300000.0;
extrudedHeight = 700000.0;
var extrudedPolygon = new Cesium.GeometryInstance({
geometry: new Cesium.PolygonGeometry({
polygonHierarchy: polygonHierarchy,
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
extrudedHeight: extrudedHeight,
height: height
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 1.0
}))
}
});
var extrudedOutlinePolygon = new Cesium.GeometryInstance({
geometry: new Cesium.PolygonOutlineGeometry({
polygonHierarchy: polygonHierarchy,
extrudedHeight: extrudedHeight,
height: height
}),
attributes: {
color: solidWhite
}
});
// cylinder
var length = 200000.0;
var topRadius = 150000.0;
var bottomRadius = 150000.0;
var modelMatrix = Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(
Cesium.Cartesian3.fromDegrees(-70.0, 45.0)),
new Cesium.Cartesian3(0.0, 0.0, 100000.0), new Cesium.Matrix4());
var cylinderInstance = new Cesium.GeometryInstance({
geometry: new Cesium.CylinderGeometry({
length: length,
topRadius: topRadius,
bottomRadius: bottomRadius,
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT
}),
modelMatrix: modelMatrix,
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 1.0
}))
}
});
var cylinderOutlineInstance = new Cesium.GeometryInstance({
geometry: new Cesium.CylinderOutlineGeometry({
length: length,
topRadius: topRadius,
bottomRadius: bottomRadius
}),
modelMatrix: modelMatrix,
attributes: {
color: solidWhite
}
});
primitives.add(new Cesium.Primitive({
geometryInstances: [extrudedPolygon, extrudedRectangle, extrudedEllipse, cylinderInstance],
appearance: new Cesium.PerInstanceColorAppearance({
translucent: false,
closed: true
})
}));
primitives.add(new Cesium.Primitive({
geometryInstances: [extrudedOutlineRectangle, extrudedOutlineEllipse, extrudedOutlinePolygon, cylinderOutlineInstance],
appearance: new Cesium.PerInstanceColorAppearance({
flat: true,
translucent: false,
renderState: {
lineWidth: Math.min(4.0, scene.maximumAliasedLineWidth)
}
})
}));
// Create box and ellipsoid boxes, and use the instance's
// modelMatrix to scale and position them.
var dimensions = new Cesium.Cartesian3(1.0, 1.0, 1.0);
var boxGeometry = Cesium.BoxGeometry.fromDimensions({
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
dimensions: dimensions
});
var boxOutlineGeometry = Cesium.BoxOutlineGeometry.fromDimensions({
dimensions: dimensions
});
var radii = new Cesium.Cartesian3(0.5, 0.5, 1.0);
var ellipsoidGeometry = new Cesium.EllipsoidGeometry({
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
radii: radii
});
var ellipsoidOutlineGeometry = new Cesium.EllipsoidOutlineGeometry({
radii: radii,
stackPartitions: 6,
slicePartitions: 5
});
radius = 0.75;
var sphereGeometry = new Cesium.SphereGeometry({
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
radius: radius
});
var sphereOutlineGeometry = new Cesium.SphereOutlineGeometry({
radius: radius,
stackPartitions: 6,
slicePartitions: 5
});
var instances = [];
var outlineInstances = [];
var i;
var boxModelMatrix, ellipsoidModelMatrix, sphereModelMatrix;
for (i = 0; i < 5; ++i) {
height = 100000.0 + (200000.0 * i);
boxModelMatrix = Cesium.Matrix4.multiplyByUniformScale(Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(
Cesium.Cartesian3.fromDegrees(-106.0, 45.0)), new Cesium.Cartesian3(0.0, 0.0, height), new Cesium.Matrix4()), 90000.0, new Cesium.Matrix4());
ellipsoidModelMatrix = Cesium.Matrix4.multiplyByUniformScale(Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(
Cesium.Cartesian3.fromDegrees(-102.0, 45.0)), new Cesium.Cartesian3(0.0, 0.0, height), new Cesium.Matrix4()), 90000.0, new Cesium.Matrix4());
sphereModelMatrix = Cesium.Matrix4.multiplyByUniformScale(Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(
Cesium.Cartesian3.fromDegrees(-98.0, 45.0)), new Cesium.Cartesian3(0.0, 0.0, height), new Cesium.Matrix4()), 90000.0, new Cesium.Matrix4());
instances.push(new Cesium.GeometryInstance({
geometry: boxGeometry,
modelMatrix: boxModelMatrix,
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 1.0
}))
}
}));
outlineInstances.push(new Cesium.GeometryInstance({
geometry: boxOutlineGeometry,
modelMatrix: boxModelMatrix,
attributes: {
color: solidWhite
}
}));
instances.push(new Cesium.GeometryInstance({
geometry: ellipsoidGeometry,
modelMatrix: ellipsoidModelMatrix,
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 1.0
}))
}
}));
outlineInstances.push(new Cesium.GeometryInstance({
geometry: ellipsoidOutlineGeometry,
modelMatrix: ellipsoidModelMatrix,
attributes: {
color: solidWhite
}
}));
instances.push(new Cesium.GeometryInstance({
geometry: sphereGeometry,
modelMatrix: sphereModelMatrix,
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 1.0
}))
}
}));
outlineInstances.push(new Cesium.GeometryInstance({
geometry: sphereOutlineGeometry,
modelMatrix: sphereModelMatrix,
attributes: {
color: solidWhite
}
}));
}
primitives.add(new Cesium.Primitive({
geometryInstances: instances,
appearance: new Cesium.PerInstanceColorAppearance({
translucent: false,
closed: true
})
}));
primitives.add(new Cesium.Primitive({
geometryInstances: outlineInstances,
appearance: new Cesium.PerInstanceColorAppearance({
flat: true,
translucent: false,
renderState: {
lineWidth: Math.min(4.0, scene.maximumAliasedLineWidth)
}
})
}));
// Create a single wall
positions = Cesium.Cartesian3.fromDegreesArray([-95.0, 50.0, -85.0, 50.0, -75.0, 50.0]);
var maximumHeights = [500000, 1000000, 500000];
var minimumHeights = [0, 500000, 0];
var wallInstance = new Cesium.GeometryInstance({
geometry: new Cesium.WallGeometry({
positions: positions,
maximumHeights: maximumHeights,
minimumHeights: minimumHeights,
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 0.7
}))
}
});
var wallOutlineInstance = new Cesium.GeometryInstance({
geometry: new Cesium.WallOutlineGeometry({
positions: positions,
maximumHeights: maximumHeights,
minimumHeights: minimumHeights
}),
attributes: {
color: new Cesium.ColorGeometryInstanceAttribute(0.7, 0.7, 0.7, 1.0)
}
});
primitives.add(new Cesium.Primitive({
geometryInstances: wallInstance,
appearance: new Cesium.PerInstanceColorAppearance()
}));
primitives.add(new Cesium.Primitive({
geometryInstances: wallOutlineInstance,
appearance: new Cesium.PerInstanceColorAppearance({
flat: true,
translucent: false,
renderState: {
lineWidth: Math.min(4.0, scene.maximumAliasedLineWidth)
}
})
}));
rectangle = Cesium.Rectangle.fromDegrees(-92.0, 30.0, -85.0, 40.0);
rectangleInstance = new Cesium.GeometryInstance({
geometry: new Cesium.RectangleGeometry({
rectangle: rectangle,
vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT
})
});
polygonHierarchy = {
positions: Cesium.Cartesian3.fromDegreesArray([-109.0, 30.0, -95.0, 30.0, -95.0, 40.0, -109.0, 40.0]),
holes: [{
positions: Cesium.Cartesian3.fromDegreesArray([-107.0, 31.0, -107.0, 39.0, -97.0, 39.0, -97.0, 31.0]),
holes: [{
positions: Cesium.Cartesian3.fromDegreesArray([-105.0, 33.0, -99.0, 33.0, -99.0, 37.0, -105.0, 37.0]),
holes: [{
positions: Cesium.Cartesian3.fromDegreesArray([-103.0, 34.0, -101.0, 34.0, -101.0, 36.0, -103.0, 36.0])
}]
}]
}]
};
polygonInstance = new Cesium.GeometryInstance({
geometry: new Cesium.PolygonGeometry({
polygonHierarchy: polygonHierarchy,
vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT
})
});
center = Cesium.Cartesian3.fromDegrees(-80.0, 35.0);
semiMinorAxis = 200000.0;
semiMajorAxis = 500000.0;
rotation = Cesium.Math.toRadians(30.0);
ellipseInstance = new Cesium.GeometryInstance({
geometry: new Cesium.EllipseGeometry({
center: center,
semiMinorAxis: semiMinorAxis,
semiMajorAxis: semiMajorAxis,
rotation: rotation,
vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT
})
});
center = Cesium.Cartesian3.fromDegrees(-72.0, 35.0);
radius = 200000.0;
circleInstance = new Cesium.GeometryInstance({
geometry: new Cesium.CircleGeometry({
center: center,
radius: radius,
vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT
})
});
primitives.add(new Cesium.Primitive({
geometryInstances: [rectangleInstance, polygonInstance, ellipseInstance, circleInstance],
appearance: new Cesium.EllipsoidSurfaceAppearance({
material: Cesium.Material.fromType('Stripe')
})
}));
// Create extruded rectangle
rectangle = Cesium.Rectangle.fromDegrees(-110.0, 38.0, -107.0, 40.0);
height = 700000.0;
extrudedHeight = 1000000.0;
rotation = Cesium.Math.toRadians(45.0);
extrudedRectangle = new Cesium.GeometryInstance({
geometry: new Cesium.RectangleGeometry({
rectangle: rectangle,
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
height: height,
rotation: rotation,
extrudedHeight: extrudedHeight
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 1.0
}))
}
});
// Create extruded ellipse
center = Cesium.Cartesian3.fromDegrees(-110.0, 35.0);
semiMinorAxis = 100000.0;
semiMajorAxis = 200000.0;
rotation = Cesium.Math.toRadians(-40.0);
height = 300000.0;
extrudedHeight = 700000.0;
extrudedEllipse = new Cesium.GeometryInstance({
geometry: new Cesium.EllipseGeometry({
center: center,
semiMinorAxis: semiMinorAxis,
semiMajorAxis: semiMajorAxis,
rotation: rotation,
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
height: height,
extrudedHeight: extrudedHeight
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 1.0
}))
}
});
// Create extruded polygon
polygonHierarchy = {
positions: Cesium.Cartesian3.fromDegreesArray([-113.0, 30.0, -110.0, 30.0, -110.0, 33.0, -111.5, 31.0, -113.0, 33.0])
};
extrudedHeight = 300000.0;
extrudedPolygon = new Cesium.GeometryInstance({
geometry: new Cesium.PolygonGeometry({
polygonHierarchy: polygonHierarchy,
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
extrudedHeight: extrudedHeight
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 1.0
}))
}
});
// cylinder
length = 400000.0;
topRadius = 0.0;
bottomRadius = 200000.0;
modelMatrix = Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(
Cesium.Cartesian3.fromDegrees(-70.0, 40.0)), new Cesium.Cartesian3(0.0, 0.0, 200000.0), new Cesium.Matrix4());
cylinderInstance = new Cesium.GeometryInstance({
geometry: new Cesium.CylinderGeometry({
length: length,
topRadius: topRadius,
bottomRadius: bottomRadius,
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT
}),
modelMatrix: modelMatrix,
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 1.0
}))
}
});
primitives.add(new Cesium.Primitive({
geometryInstances: [extrudedPolygon, extrudedRectangle, extrudedEllipse, cylinderInstance],
appearance: new Cesium.PerInstanceColorAppearance({
translucent: false,
closed: true
})
}));
// Combine instances each with a unique color.
// We can combine heterogeneous geometries as we
// do here as long as vertex formats match.
instances = [];
center = Cesium.Cartesian3.fromDegrees(-65.0, 35.0);
radius = 200000.0;
rectangle = Cesium.Rectangle.fromDegrees(-67.0, 27.0, -63.0, 32.0);
for (i = 0; i < 5; ++i) {
height = 200000.0 * i;
instances.push(new Cesium.GeometryInstance({
geometry: new Cesium.CircleGeometry({
center: center,
radius: radius,
height: height,
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 0.5
}))
}
}));
instances.push(new Cesium.GeometryInstance({
geometry: new Cesium.RectangleGeometry({
rectangle: rectangle,
height: height,
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 0.5
}))
}
}));
}
primitives.add(new Cesium.Primitive({
geometryInstances: instances,
appearance: new Cesium.PerInstanceColorAppearance()
}));
// Create box and ellipsoid boxes, and use the instance's
// modelMatrix to scale and position them.
dimensions = new Cesium.Cartesian3(1.0, 1.0, 1.0);
boxGeometry = Cesium.BoxGeometry.fromDimensions({
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
dimensions: dimensions
});
radii = new Cesium.Cartesian3(0.5, 0.5, 1.0);
ellipsoidGeometry = new Cesium.EllipsoidGeometry({
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
radii: radii
});
radius = 0.75;
sphereGeometry = new Cesium.SphereGeometry({
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
radius: radius
});
instances = [];
outlineInstances = [];
for (i = 0; i < 5; ++i) {
height = 100000.0 + (200000.0 * i);
boxModelMatrix = Cesium.Matrix4.multiplyByUniformScale(Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(
Cesium.Cartesian3.fromDegrees(-108.0, 45.0)), new Cesium.Cartesian3(0.0, 0.0, height), new Cesium.Matrix4()), 90000.0, new Cesium.Matrix4());
ellipsoidModelMatrix = Cesium.Matrix4.multiplyByUniformScale(Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(
Cesium.Cartesian3.fromDegrees(-104.0, 45.0)), new Cesium.Cartesian3(0.0, 0.0, height), new Cesium.Matrix4()), 90000.0, new Cesium.Matrix4());
sphereModelMatrix = Cesium.Matrix4.multiplyByUniformScale(Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(
Cesium.Cartesian3.fromDegrees(-100.0, 45.0)), new Cesium.Cartesian3(0.0, 0.0, height), new Cesium.Matrix4()), 90000.0, new Cesium.Matrix4());
instances.push(new Cesium.GeometryInstance({
geometry: boxGeometry,
modelMatrix: boxModelMatrix,
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 0.5
}))
}
}));
instances.push(new Cesium.GeometryInstance({
geometry: ellipsoidGeometry,
modelMatrix: ellipsoidModelMatrix,
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 0.5
}))
}
}));
instances.push(new Cesium.GeometryInstance({
geometry: sphereGeometry,
modelMatrix: sphereModelMatrix,
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 0.5
}))
}
}));
}
primitives.add(new Cesium.Primitive({
geometryInstances: instances,
appearance: new Cesium.PerInstanceColorAppearance({
translucent: true,
closed: true
})
}));
positions = [];
var colors = [];
for (i = 0; i < 40; ++i) {
positions.push(Cesium.Cartesian3.fromDegrees(-100.0 + i, 48.0));
colors.push(Cesium.Color.fromRandom({
alpha: 1.0
}));
}
primitives.add(new Cesium.Primitive({
geometryInstances: new Cesium.GeometryInstance({
geometry: new Cesium.SimplePolylineGeometry({
positions: positions,
colors: colors
})
}),
appearance: new Cesium.PerInstanceColorAppearance({
flat: true,
renderState: {
// Override the appearance render state to change the
// line width on system's that support it (Linx/Mac).
lineWidth: Math.min(4.0, scene.maximumAliasedLineWidth)
}
})
}));
// create a polyline with a material
positions = [];
for (i = 0; i < 40; ++i) {
positions.push(Cesium.Cartesian3.fromDegrees(-100.0 + i, 15.0));
}
primitives.add(new Cesium.Primitive({
geometryInstances: new Cesium.GeometryInstance({
geometry: new Cesium.PolylineGeometry({
positions: positions,
width: 10.0,
vertexFormat: Cesium.PolylineMaterialAppearance.VERTEX_FORMAT
})
}),
appearance: new Cesium.PolylineMaterialAppearance({
material: Cesium.Material.fromType(Cesium.Material.PolylineGlowType)
})
}));
// create a polyline with per segment colors
positions = [];
colors = [];
for (i = 0; i < 40; ++i) {
positions.push(Cesium.Cartesian3.fromDegrees(-100.0 + i, 12.0));
colors.push(Cesium.Color.fromRandom({
alpha: 1.0
}));
}
primitives.add(new Cesium.Primitive({
geometryInstances: new Cesium.GeometryInstance({
geometry: new Cesium.PolylineGeometry({
positions: positions,
width: 10.0,
vertexFormat: Cesium.PolylineColorAppearance.VERTEX_FORMAT,
colors: colors
})
}),
appearance: new Cesium.PolylineColorAppearance()
}));
// create a polyline with per vertex colors
positions = [];
colors = [];
for (i = 0; i < 40; ++i) {
positions.push(Cesium.Cartesian3.fromDegrees(-100.0 + i, 9.0));
colors.push(Cesium.Color.fromRandom({
alpha: 1.0
}));
}
primitives.add(new Cesium.Primitive({
geometryInstances: new Cesium.GeometryInstance({
geometry: new Cesium.PolylineGeometry({
positions: positions,
width: 10.0,
vertexFormat: Cesium.PolylineColorAppearance.VERTEX_FORMAT,
colors: colors,
colorsPerVertex: true
})
}),
appearance: new Cesium.PolylineColorAppearance()
}));
// Create a single wall
positions = Cesium.Cartesian3.fromDegreesArrayHeights([-90.0, 43.0, 100000.0, -87.5, 45.0, 100000.0, -85.0, 43.0, 100000.0, -87.5, 41.0, 100000.0, -90.0, 43.0, 100000.0]);
wallInstance = new Cesium.GeometryInstance({
geometry: new Cesium.WallGeometry({
positions: positions
})
});
primitives.add(new Cesium.Primitive({
geometryInstances: wallInstance,
appearance: new Cesium.MaterialAppearance({
material: Cesium.Material.fromType('Checkerboard', {
repeat: new Cesium.Cartesian2(20.0, 6.0)
})
})
}));
positions = Cesium.Cartesian3.fromDegreesArray([-120.0, 45.0, -125.0, 50.0, -125.0, 55.0]);
var width = 100000;
var corridor = new Cesium.GeometryInstance({
geometry: new Cesium.CorridorGeometry({
positions: positions,
width: width,
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 1.0
}))
}
});
var extrudedCorridor = new Cesium.GeometryInstance({
geometry: new Cesium.CorridorGeometry({
positions: positions,
width: width,
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
height: 300000,
extrudedHeight: 400000
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 0.7
}))
}
});
var corridorOutline = new Cesium.GeometryInstance({
geometry: new Cesium.CorridorOutlineGeometry({
positions: positions,
width: width,
height: 700000
}),
attributes: {
color: solidWhite
}
});
var corridorFill = new Cesium.GeometryInstance({
geometry: new Cesium.CorridorGeometry({
positions: positions,
width: width,
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
height: 700000
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 0.7
}))
}
});
primitives.add(new Cesium.Primitive({
geometryInstances: [corridor, extrudedCorridor, corridorFill],
appearance: new Cesium.PerInstanceColorAppearance({
translucent: true,
closed: true
})
}));
primitives.add(new Cesium.Primitive({
geometryInstances: corridorOutline,
appearance: new Cesium.PerInstanceColorAppearance({
flat: true,
translucent: false,
renderState: {
lineWidth: Math.min(4.0, scene.maximumAliasedLineWidth)
}
})
}));
function starPositions(arms, rOuter, rInner) {
var angle = Math.PI / arms;
var pos = [];
for (var i = 0; i < 2 * arms; i++) {
var r = (i % 2) === 0 ? rOuter : rInner;
var p = new Cesium.Cartesian2(Math.cos(i * angle) * r, Math.sin(i * angle) * r);
pos.push(p);
}
return pos;
}
positions = Cesium.Cartesian3.fromDegreesArrayHeights([-102.0, 15.0, 100000.0, -105.0, 20.0, 200000.0, -110.0, 20.0, 100000.0]);
var polylineVolumeFill = new Cesium.GeometryInstance({
geometry: new Cesium.PolylineVolumeGeometry({
polylinePositions: positions,
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
shapePositions: starPositions(7, 30000.0, 20000.0)
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 1.0
}))
}
});
var polylineVolumeOutline = new Cesium.GeometryInstance({
geometry: new Cesium.PolylineVolumeOutlineGeometry({
polylinePositions: positions,
shapePositions: starPositions(7, 30000.0, 20000.0)
}),
attributes: {
color: solidWhite
}
});
var polylineVolume = new Cesium.GeometryInstance({
geometry: new Cesium.PolylineVolumeGeometry({
polylinePositions: Cesium.Cartesian3.fromDegreesArray([-102.0, 15.0, -105.0, 20.0, -110.0, 20.0]),
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
shapePositions: starPositions(7, 30000, 20000)
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha: 1.0
}))
}
});
function computeCircle(radius) {
var positions = [];
for (var i = 0; i < 360; i++) {
var radians = Cesium.Math.toRadians(i);
positions.push(new Cesium.Cartesian2(radius * Math.cos(radians), radius * Math.sin(radians)));
}
return positions;
}
var tubeGeometry = new Cesium.GeometryInstance({
geometry: new Cesium.PolylineVolumeGeometry({
polylinePositions: Cesium.Cartesian3.fromDegreesArray([-104.0, 13.0, -107.0, 18.0, -112.0, 18.0]),
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
shapePositions: computeCircle(40000.0)
}),
attributes: {
color: solidWhite
}
});
primitives.add(new Cesium.Primitive({
geometryInstances: [tubeGeometry, polylineVolume, polylineVolumeFill],
appearance: new Cesium.PerInstanceColorAppearance({
translucent: false,
closed: true
})
}));
primitives.add(new Cesium.Primitive({
geometryInstances: polylineVolumeOutline,
appearance: new Cesium.PerInstanceColorAppearance({
flat: true,
translucent: false,
renderState: {
lineWidth: 1.0
}
})
}));
</script>
</body>
</html>