使用cesium和threejs加载3d模型,详细源码
时间: 2024-03-02 13:50:06 浏览: 178
以下是一个使用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相机的位置和方向。
阅读全文
相关推荐
【资源说明】
基于cesium的3dtilset模型视频投放源码+使用说明(无需任何修改,直接引入即可).zip
在项目中引入Cesium.js
##### 然后引入 cesium-videoshed.js 即可
// 初始化
let viewer = new Cesium.Viewer("viewerContainer")
// 参数
let viewModel = { verticalAngle: 90, horizontalAngle: 120, distance: 10 };
let videoShed3DArr = [];
// 创建
let create = () => {
let videoShed3D = new Cesium.VideoShed3D(viewer, {
type: 'Video',
url: "src/cs.mp4",
alpha: 1,
debugFrustum: true,
horizontalAngle: Number(viewModel.horizontalAngle),
verticalAngle: Number(viewModel.verticalAngle),
distance: Number(viewModel.distance),
});
videoShed3DArr.push(videoShed3D)
}
// 销毁
let destroy = () => {
videoShed3DArr.forEach(video => video.destroy())
}
【备注】
1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。
2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。
3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。
4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。
欢迎下载,沟通交流,互相学习,共同进步!