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

Cesium中文教程-3D模型(3D Models) 目录 3D模型(3D Models) (1)快速入门(Quick start) (2)动画(Animations) (3)各取所需(Picking) (4)转化COLLADA为glTF(Converting COLLADA to glTF) (5)故障排除(Troubleshooting) I Troubleshooting on Mac II Troubleshooting on Windows (6)资源(Resources) 3D模型(3D Models) 本章将介绍如何通过.. 阅读详情
AI摘要

本文详细介绍了如何使用Cesium库对模型进行属性设置,包括位置、方向、颜色、轮廓等,以及如何通过API修改这些属性。,

Cesium对模型各种属性设置和修改

在前面我们可以通过entites.add的方法来添加模型,现在我们来针对模型model的各个属性进行设置和修改!

创建一个模型

创建前先要初始化地图来获取viewer,这里不细展示,去看前面的文章初始化地图及封装链接
在前面我们学习到了通过entites的add方法来添加模型,我们再来看一看add方法的属性官方原文链接
在这里插入图片描述
在原文中我们看到有position(位置),orientation(方向)model(设置模型)等等属性!这里我们主要就是针对model这个属性进来设置

初始化模型

初始化一个模型最主要的就是需要position,orientaion,model,所以我们需要先设置这个三个属性
创建几个属性

// 创建一个模型位置
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);

这个看看model有哪些属性(原文链接)
在这里插入图片描述
上面有很多属性,具体自己看文档,这个我们就演示模型颜色和模型轮廓这个几个属性
创建模型

//> 通过entities的add方法来添加一个模型
entity = window.viewer.entities.add({
    name: '模型',
    position,
    orientation,
    model: {
        uri: require('../public/models/CesiumAir/Cesium_Air.glb'),
        minimumPixelSize: 128,
        maximumScale: 20000,
        color: this.getColor('Red', 1.0), //> 模型颜色与透明度
        colorBlendMode: this.getColorBlendMode('Highlight'), //> 模型颜色模式
        colorBlendAmount: parseFloat(0.5), //> 模型混合度
        silhouetteColor: this.getColor('Red', 1.0), //> 模型轮廓颜色
        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()];
},

运行如下图
在这里插入图片描述

修改属性

其实修改属性很简单,只需要拿到创建模型的entity,在entity.model中选择想要修改的属性,直接修改就ok了!
例如:
修改设置的模型颜色和透明度

entity.model.color = this.getColor('green', 0.5);

修改设置的模型轮廓大小

entity.model.silhouetteSize = parseFloat(5);

在这里可以通过elementUI来选择合适的组件来进行设置和修改
例如我设计的控制器:
在这里插入图片描述
这里就不多说了,各位自行设计,我直接贴我的组件代码

完整代码
<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="form.colorBlendMode" placeholder="请选择" @change="colorBlendModeChange">
                    <el-option v-for="item in colorBlendModes" :key="item.value" :label="item.label" :value="item.value"> </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="颜色">
                <el-select size="mini" v-model="form.color" placeholder="请选择" @change="colorChange">
                    <el-option v-for="item in colors" :key="item.value" :label="item.label" :value="item.value"> </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="颜色透明度">
                <el-slider size="mini" v-model="form.alpha" :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="form.colorBlendMode != 'Mix'" v-model="form.colorBlendAmount" :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="form.silhouetteColor" placeholder="请选择" @change="silhouetteColorChange">
                    <el-option v-for="item in colors" :key="item.value" :label="item.label" :value="item.value"> </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="轮廓透明度">
                <el-slider size="mini" v-model="form.silhouetteAlpha" :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="form.silhouetteSize" :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() {
        // this.createModel('../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>

基于GIS的轻量化BIM模型开发技术学习总结(一) GIS+BIM开发技术主要是运用Cesium开源框架和BimAngle框架,通过Cesium的Viewer进行地图影像的加载,通过Cesium3DTileset加载BIM模型的三维瓦片数据包,最后利用BimAngle对轻量化模型的构件进行交互操作。 阅读详情

相关推荐

UE5本地倾斜摄影加载与校准:从OSGB到Cesium的实战指南

三维地理空间可视化与数字孪生项目常面临大规模倾斜摄影模型的高效集成挑战。其核心原理在于处理不同坐标系(如WGS84地理坐标与UE5引擎坐标)间的精确转换,并实现海量数据的流式加载。这项技术的核心价值在于,它能将真实世界的高精度三维模型无缝嵌入虚拟仿真环境,为智慧城市、基础设施管理等应用场景提供逼真的空间基底。本文聚焦于UE5引擎,深入探讨如何通过数据预处理、格式转换(如将OSGB转为3DTiles)与Cesium for Unreal插件集成,解决本地倾斜摄影模型的加载性能与地理校准两大难题,并详细介绍了利

weixin_30411239的博客 383

Cesium相机系统

Cesium相机系统介绍

专注GIS开发 8253

手把手教你用Cesium加载glb模型:从下载到渲染的全流程

本文提供了一份详细的Cesium加载glb模型实战指南,涵盖从寻找高质量模型资源、进行必要的预处理(如坐标系调整和格式优化),到核心代码集成与高级性能优化的全流程。重点介绍了如何利用Cesium API高效加载和渲染glb模型,并探讨了使用3D Tiles处理大规模场景等进阶技巧,帮助开发者快速掌握三维地理可视化中的模型应用。

weixin_28363123的博客 168

Cesium 设置实体(模型、图片)的朝向

一、需求来源 在项目中,需要绘制汽车并且设置其朝向,原始方式是使用模型绘制,便可以很容易的通过设置orientation属性控制朝向,但是后期由于数量过大,要换成图片,于是探究乐y

志远的博客 1万+

数字孪生进阶:从可视化底座到智能体集群的架构演进与实践

数字孪生作为连接物理世界与数字空间的关键技术,其核心在于通过数据驱动与模型仿真,实现对实体对象的动态映射与深度分析。其技术原理融合了物联网数据采集、三维可视化、机理与数据模型构建,旨在突破静态展示,实现预测、优化与自主决策。这一技术为工业制造、智慧城市、能源管理等场景带来了显著的降本增效与风险预控价值。本文聚焦于数字孪生系统的核心演进路径,探讨如何从基础的**可视化底座**构建出发,逐步集成**模型驱动**的仿真能力,并最终迈向具备协同决策能力的**智能体集群**,为构建真正“可思考、可行动”的数字孪生系统

weixin_33895475的博客 387

Three.js原生支持Gaussian Splatting:从加载到渲染的完整实践指南

3D Gaussian Splatting作为新兴的三维重建渲染技术,通过大量带颜色与不透明度的三维高斯椭球表达场景,相比传统网格模型在真实感和渲染性能上具备显著优势。在Web端,将高斯泼溅模型接入浏览器场景常面临点云解析、格式转换和自定义着色器编写等复杂问题。Three.js在r16x版本中原生支持GaussianSplattingLoader,大幅简化了基于WebGL的3D渲染流程,开发者无需深入底层即可加载.splat或.ply模型并实现流畅交互。该能力广泛应用于实景三维展示、数字孪生、电商3D商品预

weixin_33868027的博客 366

【Cesium学习(八)】Cesium设置材质

今天我们将学习Cesium对entity实体设置材质,在Cesium中为实体及几何行状设置材质有多个方法。我们可以在创建实体的时候直接构件Cesium.Material对象,再通过设置Material的属性来进行各种材质的控制,具有实例和API我们可以看官网的描述。颜色材质是我们最常用到的材质,他可以将实体设置成不同的颜色,以到达实体醒目的作用及其他作用,通常和鼠标移动或者点击事件来联动展示。

HAI_GUI的博客 4291

UE5+CesiumForUnreal:基于GeoJson数据自动化生成三维建筑白模

在数字孪生与三维可视化领域,程序化建模技术是实现大规模场景快速构建的核心方法。其原理在于通过算法解析数据源(如地理信息数据),自动生成三维几何体,替代传统手工建模,从而大幅提升效率。这项技术的核心价值在于能够处理海量数据,实现动态、可交互的场景生成,尤其适用于智慧城市、城市规划、游戏开放世界等需要快速迭代与空间分析的场景。本文聚焦于利用UE5引擎与CesiumForUnreal插件,结合轻量级地理数据格式GeoJson,实现从二维建筑轮廓到三维白模的自动化生成流程。该方案通过解析轮廓坐标与属性数据,并利用C

weixin_29001655的博客 355

解锁Cesium可视化编辑新玩法:支持模型和点位拖拽、旋转、缩放,通通一键搞定!

在Cesium中实现对模型的拖拉拽旋转和缩放功能可以为许多应用场景增加交互性和用户体验地理信息系统:允许用户在三维地图中查看和操作模型,比如放大细节、旋转以获取不同角度的视图,或者拖拽以重新排列模型位置。虚拟仿真与培训:在虚拟现实或仿真环境中,用户可以通过拖拽、旋转和缩放模型来学习和训练特定任务,如操作机械设备或学习建筑结构。建筑与城市规划:建筑师和规划者可以使用这些功能来查看建筑物或城市布局的不同方面,进行实时调整和评估。

4323

【白话前端】数字孪生(web端)开发必备工具链全解析

本文全面解析了数字孪生Web端开发的核心工具链。从Blender、3ds Max等建模软件创建三维模型,到利用Three.js、Babylon.js等WebGL框架进行浏览器渲染,再到集成Cannon.js物理引擎实现真实交互,最后通过前后端技术实现数据驱动。文章为开发者梳理了从内容创建、渲染、物理模拟到数据联动的完整技术栈与高效工作流。

weixin_29021757的博客 429

84.(cesium篇)cesium模型在地形上运动

地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释

地图之家 726

WEBGIS开发 Cesium路径漫游 第一人称漫游 场景漫游 EarthSDK

三维GIS中场景漫游/第一人称漫游功能

qq_42164696的博客 4359

Cesium实体属性:定向(Orientation)

它提供了许多功能和组件,其中之一是实体(Entity),用于在地球上呈现各种地理要素。实体可以具有各种属性,包括位置、外观和定向(Orientation)等。在Cesium中,定向由两个主要属性定义:方向(orientation)和旋转(rotation)。方向属性定义了实体在三维空间中的朝向,而旋转属性定义了实体的自旋角度。为了使用定向属性,您需要创建一个包含方向和旋转信息的对象,并将其分配给实体的定向属性。在上面的代码中,我们首先创建了一个新的实体对象。接下来,我们将定向对象分配给实体的。

TqbcAbap的博客 1022

Three.js原生支持高斯溅射:Web端实景渲染与性能排查实战

Web3D渲染技术正从传统网格向实景重建方向演进,Gaussian Splatting(高斯溅射/高斯泼溅)凭借对照片级场景的高效表达,成为数字孪生、实景三维和在线预览领域的热门方案。其原理不同于三角面片模型,而是通过带颜色与协方差的三维高斯点进行光栅化合成,视觉上更贴近真实拍摄效果。Three.js近期将高斯溅射加载器纳入官方示例,开发者可直接通过SPLATLoader加载.splat或.ply格式数据,并集成到现有渲染循环中,大幅降低了Web端实景展示的接入门槛。在实际工程中,结合Cesium进行地理场

weixin_33978044的博客 425

Cesium 实战 - 模型亮度调整(解决模型非常暗的问题)

Cesium 实战 - 模型亮度调整(解决模型非常暗的问题)。

非科班Java出身GISer的博客 6987

别怕,“卷积”其实很简单

首先给大家讲一个关于卷积的小故事:小明是杭州某互联网大厂的员工,每天996十分辛苦,但小明最近爱上了打台球,经常不在工位。这天,小明的主管让小明改一个需求,小明却到楼下找产品部小丽打台球去了,被主管发现,他非常气愤,扇了小明一巴掌(注意,这就是输入信号,脉冲)。于是小明脸上会渐渐地(贱贱地)鼓起来一个包,小明的脸就是一个系统,而鼓起来的包就是小明的脸对巴掌的响应。好,这样就和信号系统建立起来意义对应的联系。

Machine Learning with Tutors 3181

simple-faster-rcnn-pytorch高级应用:自定义数据集训练与模型微调终极指南

想要将目标检测技术应用到自己的业务场景中吗?simple-faster-rcnn-pytorch项目为你提供了完美的解决方案。这个基于PyTorch的简化实现不仅代码清晰易懂,更支持自定义数据集训练和模型微调,让你能够快速构建专属的目标检测系统。🚀 ## 为什么选择simple-faster-rcnn-pytorch? simple-faster-rcnn-pytorch是一个轻量级但功能完

gitblog_00388的博客 747

手把手教你搞定EMC EFT测试:从电源线到信号线的完整整改实战(附常见失败原因)

本文详细解析了EMC EFT测试中的常见问题及整改措施,从电源线到信号线的完整实战方案。通过四步定位法和成本最优整改策略,帮助工程师有效应对电快速脉冲群干扰,提升产品通过率并降低成本。

weixin_30920597的博客 498

(功能安全六)硬件FMEDA计算

FMEDA(故障模式、影响与诊断分析)是功能安全验证的核心方法,通过量化分析硬件故障模式及其影响,计算SPFM、LFM、PMHF等关键指标。分析过程包含六大步骤:计算元器件失效率、识别故障模式、评估安全机制诊断覆盖率、分类计算各类失效率、量化指标计算及设计优化。输入需要系统架构图、硬件故障模式清单等资料,输出安全指标达标情况及改进建议,确保设计满足ASIL等级要求。该方法通过系统化的故障分类和量化评估,为硬件安全设计提供科学依据。

Dayongger的博客 1449

mpv 源码深度解析:从 MPlayer 遗产到现代媒体播放器架构

做减法优于做加法:不值得维护的功能就移除(DVD 菜单、流缓存等)单线程事件驱动:核心逻辑在单线程中运行,通过 dispatch 队列处理并发分离关注点:demuxer 线程、VO 线程、脚本线程各司其职质量优先:使用 GPU 着色器而非固定功能硬件,默认软件解码(更可靠)可嵌入性:libmpv API 让 mpv 可以作为库嵌入其他应用mpv 是一个用纯 C 实现的、工程质量极高的媒体播放器。它的代码库展示了一个事实:C 语言完全可以通过良好的架构设计来实现复杂的多媒体系统。

世界那么大,我想去看看~【随心更新,看世界去了😄】 89

2025年3D模型网站推荐:国内外平台深度评测与引擎适配指南

3D模型资源是游戏开发、数字孪生和工业可视化的核心资产,其获取效率与质量直接影响项目进度。理解模型资源的授权模式、拓扑规范和引擎兼容性,是确保实时渲染管线稳定运行的基础。在Unreal Engine和Unity等引擎推动实时渲染普及的背景下,高质量、可直接用于生产管线的模型资源成为刚需。从概念验证到商业项目落地,开发者需要系统掌握平台选择、格式转换、性能优化等关键环节。本文围绕3D模型网站推荐,深入解析国内外主流平台的生态差异、授权陷阱与实战避坑经验,帮助你在2025年高效构建可靠的模型资源工作流。

weixin_34013044的博客 288

GeoXCP:可解释人工智能中空间解释的不确定性量化

GeoXCP: uncertainty quantification of spatial explanations in explainable AI提出基于保形预测(conformal prediction)的不确定性量化框架——地理空间解释保形预测(GeoXCP),将空间依赖纳入建模过程,生成具有校准不确定性估计的空间自适应解释。通过大量模拟实验和真实世界数据集验证,GeoXCP在不同地理空间场景中能提供可靠解释并有效量化不确定性,推动可解释地理空间机器学习的发展,帮助决策者评估模型驱动洞察的可信度。

May the Force be with you 243
上一篇: 【Cesium学习(六)】Cesium加载3D模型(3D tiles和glTF模型)
下一篇: 【Cesium学习(八)】Cesium设置材质
龟中的程序员
博客等级 码龄7年 328粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龟中的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值