cesium 图层构建的那些事 (十五)

有了上一章说Primiteve图层 我们就可以定义丰富数据图层

比如我们定义水面 图层
先定义水面图层参数定义

export interface PWaterPrimitives{
id: string,
source: Array,
symbol?: {
url?: string,
height?: number,
baseWaterColor?: any, //rgba颜色对象的水的基本颜色。
blendColor?: any, //rgba颜色对象,当混合从水到非水区域
frequency?: number, //频率:控制波的数量。
animationSpeed?: number, //控制水的动画速度的数字
amplitude?: number, //振幅:控制水波振幅的数字
specularIntensity?: number, //镜面反射强度:控制镜面反射强度的数字
},
}
export interface PPrimitiveWaterLayer {
name: string,
primitives:Array
}
水面图层
``javascript import { PPrimitiveWaterLayer,PWaterPrimitives } from “./PPrimitiveWaterLayer”; import { PrimiteveLayer } from “./PrimiteveLayer”; const FS =varying vec3 v_positionMC;
varying vec3 v_positionEC;
varying vec2 v_st;
void main()
{
czm_materialInput materialInput;
vec3 normalEC = normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0)));
#ifdef FACE_FORWARD
normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);
#endif
materialInput.s = v_st.s;
materialInput.st = v_st;
materialInput.str = vec3(v_st, 0.0);
materialInput.normalEC = normalEC;
materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(v_positionMC, materialInput.normalEC);
vec3 positionToEyeEC = -v_positionEC;
materialInput.positionToEyeEC = positionToEyeEC;
czm_material material = czm_getMaterial(materialInput);
#ifdef FLAT
gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);
#else
gl_FragColor = czm_phong(normalize(positionToEyeEC), material,czm_lightDirectionEC);
gl_FragColor.a = 0.3;
#endif
}
`;
//水的图层
export class PrimitiveWaterLayer extends PrimiteveLayer {
private idMapPrimitive = {};
constructor(option: PPrimitiveWaterLayer) {
super(option.name);
this.cesiumObj = new Cesium.PrimitiveCollection();
for (let primitive of option.primitives) {
this.add(primitive);
}

更多参考 https://xiaozhuanlan.com/topic/6541387092

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值