mirror of
				https://github.com/jiawanlong/Cesium-Examples.git
				synced 2025-11-04 01:04:17 +00:00 
			
		
		
		
	
		
			
	
	
		
			129 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
		
		
			
		
	
	
			129 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| 
								 | 
							
								<!--********************************************************************
							 | 
						||
| 
								 | 
							
								* by jiawanlong
							 | 
						||
| 
								 | 
							
								*********************************************************************-->
							 | 
						||
| 
								 | 
							
								<!DOCTYPE html>
							 | 
						||
| 
								 | 
							
								<html>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<head>
							 | 
						||
| 
								 | 
							
								    <meta charset="UTF-8" />
							 | 
						||
| 
								 | 
							
								    <link rel="stylesheet" href="./../../libs/cesium/Cesium1.98/Widgets/widgets.css">
							 | 
						||
| 
								 | 
							
								    <script type="text/javascript" src="./../../libs/cesium/Cesium1.98/Cesium.js"></script>
							 | 
						||
| 
								 | 
							
								</head>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<body style="margin: 0; overflow: hidden; background: #fff; width: 100%; height: 100%; position: absolute; top: 0">
							 | 
						||
| 
								 | 
							
								    <div id="map" style="margin: 0 auto; width: 100%; height: 100%"></div>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    <script>
							 | 
						||
| 
								 | 
							
								        window.viewer = new Cesium.Viewer('map', {
							 | 
						||
| 
								 | 
							
								            imageryProvider: false,
							 | 
						||
| 
								 | 
							
								            baseLayerPicker: false,
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								        var xyz = new Cesium.UrlTemplateImageryProvider({
							 | 
						||
| 
								 | 
							
								            "credit": "安徽",
							 | 
						||
| 
								 | 
							
								            "url": '///data.mars3d.cn/tile/img/{z}/{x}/{y}.jpg'
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								        viewer.imageryLayers.addImageryProvider(xyz)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        const modelCenter = Cesium.Cartesian3.fromDegrees(112, 23, 0)
							 | 
						||
| 
								 | 
							
								        const modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(modelCenter)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 4. 创建着色器程序
							 | 
						||
| 
								 | 
							
								        const vertexShaderText = `
							 | 
						||
| 
								 | 
							
								                    in vec3 position;
							 | 
						||
| 
								 | 
							
								                    void main() {
							 | 
						||
| 
								 | 
							
								                        gl_Position = czm_projection * czm_modelView * vec4(position, 1.0);
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                `;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        const fragmentShaderText = `
							 | 
						||
| 
								 | 
							
								                    out vec4 fragColor;
							 | 
						||
| 
								 | 
							
								                    void main() {
							 | 
						||
| 
								 | 
							
								                        fragColor = vec4(1.0, 0.0, 0.0, 1.0); // 红色
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                `;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        const createCommand = (frameState, matrix) => {
							 | 
						||
| 
								 | 
							
								            const attributeLocations = {
							 | 
						||
| 
								 | 
							
								                "position": 0,
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            const uniformMap = {
							 | 
						||
| 
								 | 
							
								                u_color() {
							 | 
						||
| 
								 | 
							
								                    return Cesium.Color.HONEYDEW
							 | 
						||
| 
								 | 
							
								                },
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            const positionBuffer = Cesium.Buffer.createVertexBuffer({
							 | 
						||
| 
								 | 
							
								                usage: Cesium.BufferUsage.STATIC_DRAW,
							 | 
						||
| 
								 | 
							
								                typedArray: new Float32Array([
							 | 
						||
| 
								 | 
							
								                    0.0, 0.0, 0.0,
							 | 
						||
| 
								 | 
							
								                    1000.0, 0.0, 0.0,
							 | 
						||
| 
								 | 
							
								                    0.0, 1000.0, 0.0,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    0.0, 0.0, 0.0,
							 | 
						||
| 
								 | 
							
								                    1000.0, 0.0, 0.0,
							 | 
						||
| 
								 | 
							
								                    0.0, 0, 1000.0
							 | 
						||
| 
								 | 
							
								                ]),
							 | 
						||
| 
								 | 
							
								                context: frameState.context,
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								            const vertexArray = new Cesium.VertexArray({
							 | 
						||
| 
								 | 
							
								                context: frameState.context,
							 | 
						||
| 
								 | 
							
								                attributes: [{
							 | 
						||
| 
								 | 
							
								                    indices: new Uint16Array([0, 1, 2, 3, 4, 5, 0, 5, 2]),
							 | 
						||
| 
								 | 
							
								                    vertexBuffer: positionBuffer,
							 | 
						||
| 
								 | 
							
								                    componentsPerAttribute: 3,
							 | 
						||
| 
								 | 
							
								                    componentDatatype: Cesium.ComponentDatatype.FLOAT
							 | 
						||
| 
								 | 
							
								                }]
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								            const program = Cesium.ShaderProgram.fromCache({
							 | 
						||
| 
								 | 
							
								                context: frameState.context,
							 | 
						||
| 
								 | 
							
								                vertexShaderSource: vertexShaderText,
							 | 
						||
| 
								 | 
							
								                fragmentShaderSource: fragmentShaderText,
							 | 
						||
| 
								 | 
							
								                attributeLocations: attributeLocations,
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								            const renderState = Cesium.RenderState.fromCache({
							 | 
						||
| 
								 | 
							
								                depthTest: {
							 | 
						||
| 
								 | 
							
								                    enabled: true
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								            return new Cesium.DrawCommand({
							 | 
						||
| 
								 | 
							
								                modelMatrix: matrix,
							 | 
						||
| 
								 | 
							
								                vertexArray: vertexArray,
							 | 
						||
| 
								 | 
							
								                shaderProgram: program,
							 | 
						||
| 
								 | 
							
								                uniformMap: uniformMap,
							 | 
						||
| 
								 | 
							
								                renderState: renderState,
							 | 
						||
| 
								 | 
							
								                pass: Cesium.Pass.OPAQUE,
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /* ----- See Here ↓ ------ */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        class StaticTrianglePrimitive {
							 | 
						||
| 
								 | 
							
								            /**
							 | 
						||
| 
								 | 
							
								             * @param {Matrix4} modelMatrix matrix to WorldCoordinateSystem
							 | 
						||
| 
								 | 
							
								             */
							 | 
						||
| 
								 | 
							
								            constructor(modelMatrix) {
							 | 
						||
| 
								 | 
							
								                this._modelMatrix = modelMatrix
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            /**
							 | 
						||
| 
								 | 
							
								             * @param {FrameState} frameState
							 | 
						||
| 
								 | 
							
								             */
							 | 
						||
| 
								 | 
							
								            update(frameState) {
							 | 
						||
| 
								 | 
							
								                const command = createCommand(frameState, this._modelMatrix)
							 | 
						||
| 
								 | 
							
								                frameState.commandList.push(command)
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        viewer.scene.globe.depthTestAgainstTerrain = true
							 | 
						||
| 
								 | 
							
								        viewer.scene.primitives.add(new StaticTrianglePrimitive(modelMatrix))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 设置相机位置以查看三角形
							 | 
						||
| 
								 | 
							
								        viewer.camera.setView({
							 | 
						||
| 
								 | 
							
								            destination: Cesium.Cartesian3.fromDegrees(112, 23, 5000.0)
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    </script>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</body>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</html>
							 |