类: MeshVisualizer

Cesium. MeshVisualizer

new MeshVisualizer(options)

Parameters:
Name Type Description
options Object
Properties
Name Type Attributes Default Description
modelMatrix Cesium.Matrix4 <optional>
Cesium.Matrix4.IDENTITY
up Cesium.Cartesian3 <optional>
Cesium.Cartesian3.UNIT_Z
position Cesium.Cartesian3 <optional>
Cesium.Cartesian3.ZERO
scale Cesium.Cartesian3 <optional>
new Cartesian3(1, 1, 1)
rotation Cesium.Rotation <optional>
show Boolean <optional>
true
showReference Boolean <optional>
true
referenceAxisParameter Cesium.ArrowGeometry <optional>
Properties:
Name Type Description
modelMatrix Cesium.Matrix4
up Cesium.Cartesian3
position Cesium.Cartesian3
scale Cesium.Cartesian3
rotation Cesium.Rotation
show Boolean
showReference Boolean
modelMatrixNeedsUpdate Boolean
beforeUpate Cesium.Event
Source:
Example
MeshVisualizer = Cesium.MeshVisualizer;
        Mesh = Cesium.Mesh;
        MeshMaterial = Cesium.MeshMaterial; 
        FramebufferTexture = Cesium.FramebufferTexture;

        var center = Cesium.Cartesian3.fromDegrees(homePosition[0], homePosition[1], 50000);
        var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(center);

        var meshVisualizer = new MeshVisualizer({
            modelMatrix: modelMatrix,
        });
        viewer.scene.primitives.add(meshVisualizer);


        //示例1:Cesium.Geometry+Cesium.MeshMaterial组合
        var box = Cesium.BoxGeometry.createGeometry(Cesium.BoxGeometry.fromDimensions({
            dimensions: new Cesium.Cartesian3(100000, 50000, 50000),
            vertexFormat: Cesium.VertexFormat.POSITION_ONLY
        }));
        
        var material = new MeshMaterial({
            defaultColor: "rgba(255,0,0,1.0)",
            wireframe: false,
            side: MeshMaterial.Sides.DOUBLE
        });
        var boxMesh = new Mesh(box, material);

        meshVisualizer.add(boxMesh);

        //示例2:Cesium.CSG+Cesium.MeshMaterial组合,可以用Cesium.CSG做布尔运算并渲染运算结果

        //首先使用Cesium创建球体
         var sphere = new Cesium.SphereGeometry({
             radius: 50000.0,
             vertexFormat: Cesium.VertexFormat.POSITION_ONLY
         });
         sphere = Cesium.SphereGeometry.createGeometry(sphere);
        
         var sphereMesh = new Mesh(sphere, material);
         sphereMesh.position = new Cesium.Cartesian3(100000, 0, 0)
         meshVisualizer.add(sphereMesh);

         //将球体对象Cesium.SphereGeometry转成Cesium.CSG实例
         sphere = CSG.toCSG(sphere);
         //将盒子对象转成Cesium.CSG实例
         box = CSG.toCSG(box);

          //做布尔运算
          var subResult = sphere.subtract(box);
          //渲染运算结果
          var subResultMesh = new Mesh(subResult, material);
          subResultMesh.position = new Cesium.Cartesian3(700000, 0, 0)
          meshVisualizer.add(subResultMesh);

          //示例3:使用帧缓存作纹理,实际应用中如体绘制,风场流场绘制等等都可以运用此技术

          function createGeometry() {
            var p1 = new Cesium.Cartesian3(-50000, 50000, 100);
            var p2 = new Cesium.Cartesian3(-50000, -50000, 100);
            var p3 = new Cesium.Cartesian3(50000, -50000, 100);
            var p4 = new Cesium.Cartesian3(50000, 50000, 100);

            var positions = new Float64Array([
              p1.x, p1.y, p1.z,
              p2.x, p2.y, p2.z,
              p3.x, p3.y, p3.z,
              p4.x, p4.y, p4.z
            ]);
            var indices = new Uint16Array([
              0, 1, 3,
              1, 2, 3,
            ]);
            var sts = new Float32Array([
              1, 1,
              1, 0,
              0, 0,
              0, 1
            ]);
            var geometry = new Cesium.Geometry({
                attributes: {
                    position: new Cesium.GeometryAttribute({
                        componentDatatype: Cesium.ComponentDatatype.DOUBLE,
                        componentsPerAttribute: 3,
                        values: positions
                    }),
                    st: new Cesium.GeometryAttribute({
                        componentDatatype: Cesium.ComponentDatatype.FLOAT,
                        componentsPerAttribute: 2,
                        values: sts
                    })
                },
                indices: indices,
                primitiveType: Cesium.PrimitiveType.TRIANGLES,
                boundingSphere: Cesium.BoundingSphere.fromVertices(positions)
            });

            return geometry;
        }
        //将上文中的盒子渲染到缓存,作为纹理参与createGeometry()方法创建的几何体渲染过程
        var framebufferTex = new FramebufferTexture(boxMesh);
        var geometry = createGeometry();
        var customMesh = new Mesh(geometry, new MeshMaterial({

            uniforms: {
                u_textureMap: framebufferTex//Cesium.buildModuleUrl('Widgets/Images/TerrainProviders/STK.png')
            },
            side: MeshMaterial.Sides.DOUBLE,
            vertexShader : "\n\
                \n\
                varying vec3 v_position;\n\
                varying vec2 v_st;\n\
                \n\
                void main(void) \n\
                {\n\
                vec4 pos = u_modelViewMatrix * vec4(position,1.0);\n\
                v_position = pos.xyz;\n\
                v_st=st;\n\
                gl_Position = u_projectionMatrix * pos;\n\
                }",
            fragmentShader : "varying vec2 v_st;\
                uniform sampler2D u_textureMap;\
                void main()\
                {\
                gl_FragColor = texture2D(u_textureMap,v_st);\n\
                \
                }\
                "
        }));
        customMesh.position = new Cesium.Cartesian3(100000, 0, 0);
        meshVisualizer.add(customMesh);

Extends

  • Cesium.Primitive

Methods

(static) traverse(root, traverseFunc, visibleOnly)

遍历节点
Parameters:
Name Type Description
root Cesium.MeshVisualizer | Cesium.Mesh
traverseFunc Boolean 访问每个节点时回调该函数,进行相关操作。回调函数包含一个参数,traverseArgs,其中封装了一个属性cancelCurrent,可以通过改变此属性达到终止遍历当前节点的子节点
visibleOnly Boolean visibleOnly为true时仅遍历可见的节点,如果父级节点不可见则不再访问其子节点
Source:

add(mesh)

Parameters:
Name Type Description
mesh Cesium.Mesh
Source:

destroy()

Source:

getPickRay(windowPosition, result) → {Cesium.Ray}

创建一条射线,用局部坐标系表达
Parameters:
Name Type Description
windowPosition Cesium.Cartesian2
result Cesium.Ray
Source:
Returns:
Type
Cesium.Ray

localToWorldCoordinates(localCoordinates, result) → {Cesium.Cartesian3}

局部坐标到世界坐标
Parameters:
Name Type Description
localCoordinates Cesium.Cartesian3
result Cesium.Cartesian3
Source:
Returns:
Type
Cesium.Cartesian3

pickPosition(windowPosition, result) → {Cesium.Cartesian3}

拾取点,用局部坐标系表达。内部使用Cesium.Scene.pickPosition和MeshVisualizer.worldCoordinatesToLocal实现。
Parameters:
Name Type Description
windowPosition Cesium.Cartesian2
result Cesium.Ray
Source:
Returns:
Type
Cesium.Cartesian3

remove(mesh)

Parameters:
Name Type Description
mesh Cesium.Mesh
Source:

setPosition(x, y, z)

Parameters:
Name Type Description
x Number
y Number
z Number
Source:

setScale(x, y, z)

Parameters:
Name Type Description
x Number
y Number
z Number
Source:

update(frameState)

Parameters:
Name Type Description
frameState Cesium.FrameState
Source:

worldCoordinatesToLocal(worldCoordinates, result) → {Cesium.Cartesian3}

世界坐标到局部坐标
Parameters:
Name Type Description
worldCoordinates Cesium.Cartesian3
result Cesium.Cartesian3
Source:
Returns:
Type
Cesium.Cartesian3