Javascript 用铯画几个三角形
我试着在一个例子中用铯画几个三角形。我的代码只用于绘制一个三角形,但当我扩展位置(对于两个或多个三角形)时,会出现错误Javascript 用铯画几个三角形,javascript,cesium,Javascript,Cesium,我试着在一个例子中用铯画几个三角形。我的代码只用于绘制一个三角形,但当我扩展位置(对于两个或多个三角形)时,会出现错误 var extent = Cesium.Rectangle.fromDegrees(100, 30, 108, 36); Cesium.Camera.DEFAULT_VIEW_RECTANGLE = extent; Cesium.Camera.DEFAULT_VIEW_FACTOR = 0.5; var viewer = new Cesium.
var extent = Cesium.Rectangle.fromDegrees(100, 30, 108, 36);
Cesium.Camera.DEFAULT_VIEW_RECTANGLE = extent;
Cesium.Camera.DEFAULT_VIEW_FACTOR = 0.5;
var viewer = new Cesium.Viewer('cesiumContainer', {
navigationHelpButton: false, animation: false, timeline: false
});
// original sample begins here
var mypositions = Cesium.Cartesian3.fromDegreesArrayHeights([
-94.6714,35.9641,322.543,
-94.6717,35.9642,325.51,
-94.6717, 35.9639, 324.724,
-94.6717,35.9639,324.717,
-94.6717,35.9639,324.724,
-94.6717,35.9639,324.719 ]);
// unroll 'mypositions' into a flat array here
var numPositions = mypositions.length;
var pos = new Float64Array(numPositions * 3);
for (var i = 0; i < numPositions; ++i) {
pos[i * 3] = mypositions[i].x;
pos[i * 3 + 1] = mypositions[i].y;
pos[i * 3 + 2] = mypositions[i].z;
}
var geometry = new Cesium.Geometry({
attributes: {
position: new Cesium.GeometryAttribute({
componentDatatype: Cesium.ComponentDatatype.DOUBLE, // not FLOAT
componentsPerAttribute: 3,
values: pos
}),
normal: new Cesium.GeometryAttribute({
componentDatatype: Cesium.ComponentDatatype.FLOAT,
componentsPerAttribute: 3,
values: new Float32Array([255.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 255.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],
asynchronous: false,
appearance: new Cesium.PerInstanceColorAppearance({
closed: true,
translucent: false
})
}));
var范围=铯。矩形。从度(100,30,108,36);
Cesium.Camera.DEFAULT_VIEW_矩形=范围;
铯.Camera.DEFAULT_VIEW_因子=0.5;
var viewer=新铯.viewer('cesiumContainer'{
navigationHelpButton:false,动画:false,时间线:false
});
//原始样本从这里开始
var mypositions=Ce.Cartesian3.FromDegrees ArrayHeights([
-94.6714,35.9641,322.543,
-94.6717,35.9642,325.51,
-94.6717, 35.9639, 324.724,
-94.6717,35.9639,324.717,
-94.6717,35.9639,324.724,
-94.6717,35.9639,324.719 ]);
//将“我的位置”展开成一个平面阵列
var numPositions=mypositions.length;
var pos=新的Float64Array(numPositions*3);
对于(变量i=0;i
我得到的错误是:
所有属性列表必须具有相同数量的属性
如何扩展此代码以绘制多个三角形 此错误告诉您,位置、法线和索引(如果存在)必须在总点数上一致。在上面的例子中,您只为两个三角形中的一个提供了法向量和索引 实际上,如果三角形在任何地方都不共享顶点,则不需要提供索引。所以,我在下面的代码中注释了这条线,并为所有三角形编写了法向量 请注意,这是在铯中创建几何体的最低级别的方法,在较高级别有更简单的方法,例如或 不过,这里有一份您的代码副本,其中一些问题已经解决:
var范围=铯。矩形。从度(-98,30,-90,39);
Cesium.Camera.DEFAULT_VIEW_矩形=范围;
铯.Camera.DEFAULT_VIEW_因子=0.5;
var viewer=新铯.viewer('cesiumContainer'{
navigationHelpButton:false,动画:false,时间线:false
});
var mypositions=Ce.Cartesian3.FromDegrees ArrayHeights([
//三角形A
-90.6714, 35.9641, 322.543,
-94.6717, 38.9642, 325.51,
-97.6717, 35.9639, 324.724,
//三角形B
-94.6717, 30.9639, 324.717,
-90.6717, 32.9639, 324.724,
-94.6717, 34.9639, 324.719 ]);
//将“我的位置”展开成一个平面阵列
var numPositions=mypositions.length;
var pos=新的Float64Array(numPositions*3);
var normals=新的Float32Array(numPositions*3);
对于(变量i=0;i
html,body,#cesiumContainer{
宽度:100%;高度:100%;边距:0;填充:0;溢出:隐藏;
字体系列:无衬线;
}
非常感谢!但是如果三角形共享顶点,这个索引有什么作用呢。根据铯元素,它确实存在:确定几何体中基本体的可选索引数据。但这意味着什么?试着从三角形B中删除最后一个位置(-94.6717,34.9639,324.719)。该三角形将消失,因为它不再有3个点。接下来,添加索引:新的uint32数组([0,1,2,3,4,0])
并出现一个类似的三角形!三角形A和以前一样使用点0、1、2,但现在三角形B使用点3、4和0,重新使用