Cesium 可视域分析(未改源码)

嘿嘿嘿,出来了。

此功能未修改cesium的源码,可动态调节夹角、颜色及距离等因素。

一下晒出部分代码:

//创建一个点光源
    this._shadowMap = new Cesium.ShadowMap({
        context: this._scene.context,
        lightCamera: this._lightCamera,
        enabled: this._enabled,
        isPointLight: false,
        pointLightRadius: 100.0,
        cascadesEnabled: false,
        size: this._size,
        softShadows: this._softShadows,
        normalOffset: false,
        fromLightSource: false
    });
ViewShed.prototype._updateCamera = function () {
	//视锥体近平面
    this._lightCamera.frustum.near = .001 * this._bugDistance;
    //视锥体远平面
	this._lightCamera.frustum.far = this._bugDistance;
    //定义视锥体的视场角度为垂直方向角度
	this._lightCamera.frustum.fov = Cesium.Math.toRadians(this._verticalFov);
    
	var horizontalFovRadians = Cesium.Math.toRadians(this._horizontalFov);
    var verticalFovRadians = Cesium.Math.toRadians(this._verticalFov);
	//视锥体宽高比
    this._lightCamera.frustum.aspectRatio = (this._bugDistance * Math.tan(horizontalFovRadians * 0.5) * 2.0) / (this._bugDistance * Math.tan(verticalFovRadians * 0.5) * 2.0);
    
	//定义视锥体的视场角度为水平方向角度
	if(this._horizontalFov > this._verticalFov) {
        this._lightCamera.frustum.fov = Cesium.Math.toRadians(this._horizontalFov);
    }
	
	//透视投影矩阵 切换到相机的二维平面上
    var projectionMatrix = this._lightCamera.frustum.projectionMatrix;
    this._lightCamera.setView({
        destination: this._viewerPosition,
        orientation: {
            heading: Cesium.Math.toRadians(this._direction),
            pitch: Cesium.Math.toRadians(this._pitch)
        }
    });

    if (this._lightCameraPrimitive) {
        this._lightCameraPrimitive.destroy();
        this._lightCameraPrimitive = undefined;
    }
	
}

以上晒出了部分代码,希望能给各位学习的朋友带来帮助,如果有什么问题可以私信我。

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值