123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- /* 引入Cesium */
- // import * as Cesium from 'Cesium';
- import SkyBoxOnGround from "../../Core/SkyBoxOnGround.js";
- /**
- * 天空盒子
- */
- class SkyBox {
- /**
- * 默认初始化
- * @param {Object} viewer 三维场景
- */
- constructor(viewer) {
- if (!viewer) throw new Cesium.DeveloperError('no viewer object!');
- this._viewer = viewer;
- this._farSkyBox = viewer.scene.skyBox; //默认天空盒子,即远景天空盒子
- }
- }
- /**
- * 通用对外公开函数
- */
- Object.assign(SkyBox.prototype, /** @lends SkyBox.prototype */ {
- /**
- * 自定义天空盒子
- * @param {Object} options 具有以下属性:
- * @param {Object} [options.type="蓝天"] 默认蓝天,晚霞,阴天,紫色星空,蓝色星空
- * @param {Object} [options.sources] 天空盒子6个方向的图片地址(立方体全景图片)
- * @param {String} [options.sources.positiveX]
- * @param {String} [options.sources.negativeX]
- * @param {String} [options.sources.positiveY]
- * @param {String} [options.sources.negativeY]
- * @param {String} [options.sources.positiveZ]
- * @param {String} [options.sources.negativeZ]
- * @param {Number} [options.height=200000] 开始显示自定义天空盒子高度,默认=200000
- *
- * @example
- * setGroundSkyBox({
- * type:"蓝天",
- * height:200000,
- * sources: { //蓝天
- * positiveX: 'http://support.supermap.com.cn:8090/webgl/examples/webgl/imgs/SkyBox/bluesky/Right.jpg',
- * negativeX: 'http://support.supermap.com.cn:8090/webgl/examples/webgl/imgs/SkyBox/bluesky/Left.jpg',
- * positiveY: 'http://support.supermap.com.cn:8090/webgl/examples/webgl/imgs/SkyBox/bluesky/Front.jpg',
- * negativeY: 'http://support.supermap.com.cn:8090/webgl/examples/webgl/imgs/SkyBox/bluesky/Back.jpg',
- * positiveZ: 'http://support.supermap.com.cn:8090/webgl/examples/webgl/imgs/SkyBox/bluesky/Up.jpg',
- * negativeZ: 'http://support.supermap.com.cn:8090/webgl/examples/webgl/imgs/SkyBox/bluesky/Down.jpg',
- * },
- * });
- */
- setGroundSkyBox(options) {
- options = options || {};
- options.height = options.height || 200000;
- options.type = options.type || "蓝天";
- if (!options.sources) {
- switch (options.type) {
- case "晚霞":
- options.sources = {
- positiveX: 'jt3dSDK/imgs/skybox/01/px.png',
- negativeX: 'jt3dSDK/imgs/skybox/01/nx.png',
- positiveY: 'jt3dSDK/imgs/skybox/01/py.png',
- negativeY: 'jt3dSDK/imgs/skybox/01/ny.png',
- positiveZ: 'jt3dSDK/imgs/skybox/01/pz.png',
- negativeZ: 'jt3dSDK/imgs/skybox/01/nz.png',
- }
- break;
- case "阴天":
- options.sources = {
- positiveX: 'jt3dSDK/imgs/skybox/02/px.jpg',
- negativeX: 'jt3dSDK/imgs/skybox/02/nx.jpg',
- positiveY: 'jt3dSDK/imgs/skybox/02/py.jpg',
- negativeY: 'jt3dSDK/imgs/skybox/02/ny.jpg',
- positiveZ: 'jt3dSDK/imgs/skybox/02/pz.jpg',
- negativeZ: 'jt3dSDK/imgs/skybox/02/nz.jpg',
- }
- break;
- case "蓝天":
- options.sources = {
- positiveX: 'jt3dSDK/imgs/skybox/03/px.jpg',
- negativeX: 'jt3dSDK/imgs/skybox/03/nx.jpg',
- positiveY: 'jt3dSDK/imgs/skybox/03/py.jpg',
- negativeY: 'jt3dSDK/imgs/skybox/03/ny.jpg',
- positiveZ: 'jt3dSDK/imgs/skybox/03/pz.jpg',
- negativeZ: 'jt3dSDK/imgs/skybox/03/nz.jpg',
- }
- break;
- case "紫色星空":
- options.sources = {
- positiveX: 'jt3dSDK/imgs/skybox/04/px.jpg',
- negativeX: 'jt3dSDK/imgs/skybox/04/nx.jpg',
- positiveY: 'jt3dSDK/imgs/skybox/04/py.jpg',
- negativeY: 'jt3dSDK/imgs/skybox/04/ny.jpg',
- positiveZ: 'jt3dSDK/imgs/skybox/04/pz.jpg',
- negativeZ: 'jt3dSDK/imgs/skybox/04/nz.jpg',
- }
- break;
- case "蓝色星空":
- options.sources = {
- positiveX: 'jt3dSDK/imgs/skybox/05/px.jpg',
- negativeX: 'jt3dSDK/imgs/skybox/05/nx.jpg',
- positiveY: 'jt3dSDK/imgs/skybox/05/py.jpg',
- negativeY: 'jt3dSDK/imgs/skybox/05/ny.jpg',
- positiveZ: 'jt3dSDK/imgs/skybox/05/pz.jpg',
- negativeZ: 'jt3dSDK/imgs/skybox/05/nz.jpg',
- }
- break;
- }
- } else if (!Cesium.defined(options.sources.positiveX) ||
- !Cesium.defined(options.sources.negativeX) ||
- !Cesium.defined(options.sources.positiveY) ||
- !Cesium.defined(options.sources.negativeY) ||
- !Cesium.defined(options.sources.positiveZ) ||
- !Cesium.defined(options.sources.negativeZ)
- ) {
- throw new Cesium.DeveloperError(
- "options.sources is required and must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties."
- );
- }
- let _self = this;
- //自定义天空盒子(天空盒子需要显示)
- // let groundSkyBox = new Cesium.SkyBox({//自带的有bug,天空效果出现倾斜
- // sources: options.sources,
- // show: true
- // });
- let groundSkyBox = new SkyBoxOnGround({ //在源码基础上修改后的
- sources: options.sources,
- show: true
- });
- //如果高度小于某个值 显示近景天空盒 否则显示远景天空盒
- _self._viewer.scene.postRender.addEventListener(() => {
- var e = _self._viewer.camera.position;
- if (Cesium.Cartographic.fromCartesian(e).height < options.height) {
- _self._viewer.scene.skyBox = groundSkyBox; // 显示自定义的天空盒
- } else {
- _self._viewer.scene.skyBox = _self._defaultSkyBox; // 显示原始的天空盒
- }
- });
- }
- });
- export default SkyBox;
|