使用cesium和threejs加载3d模型,详细源码
时间: 2024-03-02 17:50:06 浏览: 235
以下是一个使用Cesium和Three.js加载3D模型的示例代码:
```javascript
// 创建Cesium Viewer
var viewer = new Cesium.Viewer("cesiumContainer");
// 创建Three.js场景
var scene = new THREE.Scene();
// 创建Three.js渲染器
var renderer = new THREE.WebGLRenderer({
alpha: true,
antialias: true,
});
renderer.setSize(viewer.canvas.clientWidth, viewer.canvas.clientHeight);
renderer.setPixelRatio(window.devicePixelRatio);
renderer.gammaInput = true;
renderer.gammaOutput = true;
renderer.gammaFactor = 2.2;
renderer.shadowMap.enabled = true;
// 将Three.js渲染器添加到Cesium场景中
var csRenderer = new THREE.CSS3DRenderer();
csRenderer.setSize(viewer.canvas.clientWidth, viewer.canvas.clientHeight);
csRenderer.domElement.style.position = "absolute";
csRenderer.domElement.style.top = 0;
document.getElementById("cesiumContainer").appendChild(csRenderer.domElement);
// 创建Three.js相机并将其添加到Cesium场景中
var camera = new THREE.PerspectiveCamera(
45,
viewer.canvas.clientWidth / viewer.canvas.clientHeight,
0.1,
1000
);
var csCamera = new THREE.PerspectiveCamera(
45,
viewer.canvas.clientWidth / viewer.canvas.clientHeight,
0.1,
1000
);
viewer.scene.primitives.add(new Cesium.Primitive({}));
// 创建Three.js灯光并将其添加到Cesium场景中
var light = new THREE.DirectionalLight(0xffffff, 1);
light.position.set(0, 1, 1);
scene.add(light);
// 加载模型
var loader = new THREE.GLTFLoader();
loader.load(
"models/model.gltf",
function (gltf) {
// 获取模型并将其添加到Three.js场景中
var model = gltf.scene;
model.scale.set(0.5, 0.5, 0.5);
scene.add(model);
// 将模型添加到Cesium场景中
var csModel = new THREE.CSS3DObject(model);
csModel.position.set(0, 0, 0);
csRenderer.render(scene, camera);
viewer.scene.primitives.add(csModel);
// 监听Cesium相机变化并更新Three.js相机
viewer.camera.changed.addEventListener(function () {
camera.position.copy(viewer.camera.position);
camera.position.y += 15;
camera.lookAt(scene.position);
renderer.render(scene, camera);
csCamera.position.copy(viewer.camera.position);
csCamera.position.y += 15;
csCamera.lookAt(scene.position);
csRenderer.render(scene, csCamera);
});
},
undefined,
function (error) {
console.error(error);
}
);
```
这段代码首先创建了一个Cesium Viewer,然后创建了一个Three.js场景和一个Three.js渲染器。接着将Three.js渲染器添加到Cesium场景中,并创建了一个Three.js相机并将其添加到Cesium场景中。然后创建了一个Three.js灯光并将其添加到Cesium场景中。最后加载了一个模型,并将其添加到Three.js场景中和Cesium场景中。监听了Cesium相机的变化,并更新了Three.js相机的位置和方向。
阅读全文
相关推荐


















