跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScript大前端

Cesium 绘制自定义多面几何体

基于 Cesium 引擎,通过顶点、索引及颜色数组构建自定义多面几何体,实现灵活三维模型渲染。核心在于利用 Primitive 接口加载自定义缓冲区数据,替代标准图元以适配特殊场景需求。示例演示了如何手动构造位置与索引信息,并绑定材质完成绘制。

GRACE Grace发布于 2023/7/28更新于 2026/6/1520 浏览
Cesium 绘制自定义多面几何体

在三维可视化开发中,标准图元往往无法满足特定业务需求。当需要渲染非规则形状或动态生成的模型时,基于顶点、索引和颜色数组构建自定义多面几何体是更灵活的选择。

核心思路

Cesium 的 Primitive 接口允许我们加载自定义缓冲区数据。通过手动构造位置、法线、纹理坐标等属性,我们可以精确控制每个顶点的渲染效果。这种方式比加载外部模型文件更轻量,适合实时计算的场景。

关键步骤

  1. 准备数据:整理顶点坐标(x, y, z)、索引(三角形连接关系)以及对应的颜色值(r, g, b, a)。
  2. 创建 Geometry:使用 Cesium.Geometry 将数组转换为 GPU 可识别的格式。
  3. 实例化 Primitive:绑定材质和几何体,添加到场景管理器。

代码实现

下面是一个完整的 HTML 示例,展示了如何初始化 Cesium 并绘制一个自定义的多面体。注意,实际项目中请确保引入正确的 Cesium JS 库。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Cesium Custom Geometry</title>
    <style>
        body { margin: 0; overflow: hidden; }
        #cesiumContainer { width: 100%; height: 100vh; }
    </style>
    <!-- 请替换为实际的 Cesium.js 路径 -->
    <script src="https://cesium.com/downloads/cesiumjs/releases/1.109/Build/Cesium/Cesium.js"></script>
    <link href="https://cesium.com/downloads/cesiumjs/releases/1.109/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
</head>
<body>
    <div id="cesiumContainer"></div>
    <script>
        const viewer = new Cesium.Viewer('cesiumContainer', {
            terrainProvider: undefined,
            imageryProvider: undefined,
            baseLayerPicker: false,
            geocoder: false,
            homeButton: false,
            sceneModePicker: false,
            navigationHelpButton: false,
            animation: false,
            timeline: false,
            fullscreenButton: false,
            infoBox: false,
            selectionIndicator: false
        });

        // 定义一个简单的立方体数据
        const positions = [
            -1.0, -1.0,  1.0,
             1.0, -1.0,  1.0,
             1.0,  1.0,  1.0,
            -1.0,  1.0,  1.0,
            -1.0, -1.0, -1.0,
             1.0, -1.0, -1.0,
             1.0,  1.0, -1.0,
            -1.0,  1.0, -1.0
        ];

        const indices = [
            0, 1, 2,   0, 2, 3,
            4, 5, 6,   4, 6, 7,
            0, 1, 5,   0, 5, 4,
            2, 3, 7,   2, 7, 6,
            0, 3, 7,   0, 7, 4,
            1, 2, 6,   1, 6, 5
        ];

        const colors = [];
        for (let i = 0; i < positions.length / 3; i++) {
            colors.push(1.0, 0.0, 0.0, 1.0); // 红色
        }

        const geometry = new Cesium.Geometry({
            attributes: {
                position: new Cesium.Cartesian3Array(positions),
                color: new Cesium.ColorGeometryInstanceAttribute(colors)
            },
            indices: new Uint16Array(indices),
            vertexCount: positions.length / 3
        });

        const primitive = new Cesium.Primitive({
            geometry: geometry,
            appearance: new Cesium.PerInstanceColorAppearance()
        });

        viewer.scene.primitives.add(primitive);

        // 调整视角
        viewer.camera.setView({
            destination: Cesium.Cartesian3.fromDegrees(0, 0, 5)
        });
    </script>
</body>
</html>

注意事项

  • 性能优化:如果顶点数量巨大,建议合并多个几何体为一个 Primitive,减少 Draw Call。
  • 坐标系:Cesium 默认使用 WGS84 地理坐标系,本地建模时需注意单位转换,通常建议使用笛卡尔坐标系配合 ModelMatrix 进行定位。
  • 光照影响:自定义几何体若未正确设置法线,可能无法响应场景光照,需补充法线数据或使用 PerInstanceColorAppearance。

通过这种方式,你可以完全掌控模型的几何结构,实现高度定制化的三维展示效果。

目录

  1. 核心思路
  2. 关键步骤
  3. 代码实现
  4. 注意事项
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • CentOS 7 忘记 root 密码的重置方法
  • HivisionIDPhotos 开源 AI 证件照工具功能解析与部署指南
  • Ollama Windows 安装与使用指南:本地运行 Llama、DeepSeek 大模型
  • PyCharm 破解安全风险与开源 GLM 模型替代方案
  • CentOS 7 系统镜像下载与版本选择指南
  • Bashtop:一款基于 Bash 的 Linux 资源监视器
  • Vue3 Vuex 入门实战:手写迷你 Vuex 解析状态管理原理
  • OpenClaw 多机器人协作方案:组建虚拟员工团队
  • OpenClaw 新手入门:环境搭建、模型配置与 WebUI 远程访问
  • Docker 运行 hello-world 镜像失败或超时问题解决方案
  • CentOS 7 安装 Nginx
  • Web 项目自动化测试实战:从零搭建博客系统 UI 框架
  • Web 项目 UI 自动化测试实战:从零搭建博客系统框架
  • WebGL 模型查看器:支持魔兽争霸与星际争霸模型预览
  • 【测试理论与实践】(十)Web 项目自动化测试实战:从 0 到 1 搭建博客系统 UI 自动化框架
  • Linux 服务器上部署 OpenClaw 完整教程
  • Dify 平台集成 OCR:低代码构建智能表单识别系统
  • Web 项目 UI 自动化测试实战:搭建博客系统测试框架
  • Git Cherry-Pick 命令用法与场景
  • MySQL 核心技术详解:架构、索引与高可用实战

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online