【Cesium学习(七)】Cesium对模型各种属性设置和修改

时间:2025-05-12 11:11:32
<template> <div class="SetModelsColor"> <el-form ref="form" :model="form" label-width="100px"> <h3 style="margin: 5px">模型颜色设置</h3> <el-form-item label="渲染模式"> <el-select size="mini" v-model="" placeholder="请选择" @change="colorBlendModeChange"> <el-option v-for="item in colorBlendModes" :key="" :label="" :value=""> </el-option> </el-select> </el-form-item> <el-form-item label="颜色"> <el-select size="mini" v-model="" placeholder="请选择" @change="colorChange"> <el-option v-for="item in colors" :key="" :label="" :value=""> </el-option> </el-select> </el-form-item> <el-form-item label="颜色透明度"> <el-slider size="mini" v-model="" :show-tooltip="false" :min="0" :max="1" :step="0.01" show-input @input="alphaChange"></el-slider> </el-form-item> <el-form-item label="混合度"> <el-slider size="mini" :disabled=" != 'Mix'" v-model="" :show-tooltip="false" :min="0" :max="1" :step="0.01" show-input @input="colorBlendAmountChange"></el-slider> </el-form-item> <h3 style="margin: 5px">模型轮廓设置</h3> <el-form-item label="轮廓颜色"> <el-select size="mini" v-model="" placeholder="请选择" @change="silhouetteColorChange"> <el-option v-for="item in colors" :key="" :label="" :value=""> </el-option> </el-select> </el-form-item> <el-form-item label="轮廓透明度"> <el-slider size="mini" v-model="" :show-tooltip="false" :min="0" :max="1" :step="0.01" show-input @input="silhouetteAlphaChange"></el-slider> </el-form-item> <el-form-item label="轮廓大小"> <el-slider size="mini" v-model="" :show-tooltip="false" :min="0" :max="10" :step="0.01" show-input @input="silhouetteSizeChange"></el-slider> </el-form-item> </el-form> </div> </template> <script> let entity = null; export default { name: 'SetModelsColor', data() { return { form: { colorBlendMode: 'Highlight', color: 'Red', alpha: 1, colorBlendAmount: 0.5, silhouetteColor: 'Red', silhouetteAlpha: 1, silhouetteSize: 2, }, colorBlendModes: [ { value: 'Highlight', label: '颜色相乘', }, { value: 'Replace', label: '颜色替换', }, { value: 'Mix', label: '颜色混合', }, ], colors: [ { value: 'White', label: '白色', }, { value: 'Red', label: '红色', }, { value: 'Green', label: '绿色', }, { value: 'Blue', label: '蓝色', }, { value: 'Yellow', label: '黄色', }, { value: 'Gray', label: '灰色', }, ], }; }, mounted() { // ('../public/models/CesiumAir/Cesium_Air.glb', 5000.0); }, methods: { //> 初始化模型 url:模型地址 height:模型高度 createModel(url, height) { //> 创建一个模型位置 const position = Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706, height); //> 创建模型的航向 const heading = Cesium.Math.toRadians(135); const pitch = 0; //> 俯仰角 const roll = 0; //> 翻滚角 //> 创建出一个航向,俯仰,翻滚的实例 const hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll); //> 根据参考系计算四元数,其中参考系具有根据航向-俯仰-横滚角计算的轴以提供的原点为中心 const orientation = Cesium.Transforms.headingPitchRollQuaternion(position, hpr); //> 通过entities的add方法来添加一个模型 entity = window.viewer.entities.add({ name: '模型', position, orientation, model: { uri: url, minimumPixelSize: 128, maximumScale: 20000, color: this.getColor(this.form.color, this.form.alpha), //> 模型颜色与透明度 colorBlendMode: this.getColorBlendMode(this.form.colorBlendMode), //> 模型颜色模式 colorBlendAmount: parseFloat(this.form.colorBlendAmount), //> 模型混合度 silhouetteColor: this.getColor(this.form.color, this.form.silhouetteAlpha), //> 模型轮廓颜色 silhouetteSize: parseFloat(2), //> 模型轮廓大小 }, }); window.viewer.trackedEntity = entity; }, //> 获取模型颜色与透明度 getColor(colorName, alpha) { const color = Cesium.Color[colorName.toUpperCase()]; return Cesium.Color.fromAlpha(color, parseFloat(alpha)); }, //> 获取目标颜色和图元的源颜色之间混合的不同模式 HIGHLIGHT将源颜色乘以目标颜色 REPLACE将源颜色替换为目标颜色 MIX将源颜色和目标颜色混合在一起 getColorBlendMode(colorBlendMode) { return Cesium.ColorBlendMode[colorBlendMode.toUpperCase()]; }, //> 渲染模式选择 colorBlendModeChange(value) { entity.model.colorBlendMode = this.getColorBlendMode(value); }, //> 颜色选择 colorChange(value) { entity.model.color = this.getColor(value, this.form.alpha); }, //> 颜色透明度选择 alphaChange(value) { entity.model.color = this.getColor(this.form.color, value); }, //> 混合度选择 colorBlendAmountChange(value) { entity.model.colorBlendAmount = parseFloat(value); }, //> 轮廓颜色选择 silhouetteColorChange(value) { entity.model.silhouetteColor = this.getColor(value, this.form.silhouetteAlpha); }, //> 轮廓透明度选择 silhouetteAlphaChange(value) { entity.model.silhouetteColor = this.getColor(this.form.silhouetteColor, value); }, //> 轮廓大小选择 silhouetteSizeChange(value) { entity.model.silhouetteSize = parseFloat(value); }, }, }; </script> <style scoped lang="scss"> .SetModelsColor { width: 500px; position: absolute; top: 3%; left: 3%; border-radius: 5px; background-color: rgba(0, 0, 0, 0.5); color: #fff; } .el-form { padding: 5px; /deep/ .el-form-item__label { color: #fff; } } </style>