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,重新使用