Javascript 使用铯绘制三角形时出错
我想用铯绘制三角形,其中每个顶点都是一个具有(lon、lat、alt)的地质点,每个顶点都有不同的颜色。但是我有错误。我是铯的新手,我想我要做的是定义一个几何体实例并将其附加到场景中。我的代码是:Javascript 使用铯绘制三角形时出错,javascript,cesium,Javascript,Cesium,我想用铯绘制三角形,其中每个顶点都是一个具有(lon、lat、alt)的地质点,每个顶点都有不同的颜色。但是我有错误。我是铯的新手,我想我要做的是定义一个几何体实例并将其附加到场景中。我的代码是: var viewer = new Cesium.Viewer('cesiumContainer'); var mypositions = Cesium.Cartesian3.fromDegreesArrayHeights([104.317776, 31.59491, 10, 105.317776,
var viewer = new Cesium.Viewer('cesiumContainer');
var mypositions = Cesium.Cartesian3.fromDegreesArrayHeights([104.317776, 31.59491, 10,
105.317776, 32.59491, 20,
106.317776, 33.59491, 30]);
var pos = new Float64Array(mypositions);
var geometry = new Cesium.Geometry({
attributes: {
position: new Cesium.GeometryAttribute({
componentDatatype: Cesium.ComponentDatatype.FLOAT,
componentsPerAttribute: 3,
values: pos
}),
normal: new Cesium.GeometryAttribute({
componentDatatype: Cesium.ComponentDatatype.FLOAT,
componentsPerAttribute: 3,
values: new Float32Array([0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0])
})
},
indices: new Uint32Array([0, 1, 2]),
primitiveType: Cesium.PrimitiveType.TRIANGLES,
boundingSphere: Cesium.BoundingSphere.fromVertices(pos)
});
var myInstance = new Cesium.GeometryInstance({
geometry: geometry,
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.RED)
},
show : new Cesium.ShowGeometryInstanceAttribute(true)
});
viewer.scene.primitives.add(new Cesium.Primitive({
geometryInstances: [myInstance],
appearance: new Cesium.PerInstanceColorAppearance({
closed: true,
translucent: false
})
}));
但我的网页上出现了以下错误:
DeveloperError:所有属性列表必须具有相同数量的属性
我想知道我做错了什么,如何解决这个问题 我不知道Cesium中是否有用于逐顶点颜色的选项,但我至少可以修复示例代码中的错误,使其正确运行。具体而言:
- 将
添加到asynchronous:false
选项中,因为我们没有为此使用web工作程序原语
- 对于
使用位置
而不是Cesium.ComponentDatatype.DOUBLE
,因为它是FLOAT
,不同于float64数组
的法线float32数组
- 最大的问题是
是一个mypositions
数组,而不是一个平面数组,因此不能用于本机初始化Cartesian3
。必须将其展开为x、y、z值的平面数组Float64Array
//为清晰起见添加了默认摄影机视图
变量范围=铯。矩形。从度(100,30108,36);
Cesium.Camera.DEFAULT_VIEW_矩形=范围;
铯.Camera.DEFAULT_VIEW_因子=0.5;
var viewer=新铯.viewer('cesiumContainer'{
navigationHelpButton:false,动画:false,时间线:false
});
//原始样本从这里开始
var mypositions=Ce.Cartesian3.FromDegrees ArrayHeights([
104.317776, 31.59491, 10,
105.317776, 32.59491, 20,
102.317776, 33.59491, 30]);
//将“我的位置”展开成一个平面阵列
var numPositions=mypositions.length;
var pos=新的Float64Array(numPositions*3);
对于(变量i=0;i
html,body,#cesiumContainer{
宽度:100%;高度:100%;边距:0;填充:0;溢出:隐藏;
字体系列:无衬线;
}
我不知道Cesium中是否有逐顶点颜色的选项,但我至少可以修复示例代码中的错误,使其正确运行。具体而言:
- 将
asynchronous:false
添加到原语
选项中,因为我们没有为此使用web工作程序
- 对于
位置
使用Cesium.ComponentDatatype.DOUBLE
而不是FLOAT
,因为它是float64数组
,不同于float32数组
的法线
- 最大的问题是
mypositions
是一个Cartesian3
数组,而不是一个平面数组,因此不能用于本机初始化Float64Array
。必须将其展开为x、y、z值的平面数组
下面是应用这些更改的示例。单击底部的“RunCodeSnippet”以查看出现的红色三角形
//为清晰起见添加了默认摄影机视图
变量范围=铯。矩形。从度(100,30108,36);
Cesium.Camera.DEFAULT_VIEW_矩形=范围;
铯.Camera.DEFAULT_VIEW_因子=0.5;
var viewer=新铯.viewer('cesiumContainer'{
navigationHelpButton:false,动画:false,时间线:false
});
//原始样本从这里开始
var mypositions=Ce.Cartesian3.FromDegrees ArrayHeights([
104.317776, 31.59491, 10,
105.317776, 32.59491, 20,
102.317776, 33.59491, 30]);
//将“我的位置”展开成一个平面阵列
var numPositions=mypositions.length;
var pos=新的Float64Array(numPositions*3);
对于(变量i=0;i