ThreeJS教程:山脉地形高度可视化

news2024/12/23 18:52:49

推荐:将 NSDT场景编辑器加入你的3D工具链
3D工具集: NSDT简石数字孪生

山脉地形高度可视化

一个山脉地形的高度可视化,具体说就是地形不同的高度设置不同的颜色值。有多种方式,下面就举一个设置顶点颜色.attributes.color的例子

本节课算是一个练习题,用到的知识点前面几节都将讲解过,所以视频主要把思路给大家说一遍,然后大家根据课程课程思路自己手写一遍。

1. 山脉几何体y坐标范围

loader.load("../地形.glb", function (gltf) { 
    model.add(gltf.scene);
    const mesh = gltf.scene.children[0];
    const pos = mesh.geometry.attributes.position;
    const count = pos.count;

    // 1. 计算模型y坐标高度差
    const yArr = [];//顶点所有y坐标,也就是地形高度
    for (let i = 0; i < count; i++) {
        yArr.push(pos.getY(i));//获取顶点y坐标,也就是地形高度
    }
    yArr.sort();//数组元素排序,从小到大
    const miny = yArr[0];//y最小值
    const maxy = yArr[yArr.length - 1];//y最大值
    const height = maxy - miny; //山脉整体高度 
})

2.根据山脉顶点高度设置渐变颜色

借助颜色对象的颜色插值方法.lerp(),计算山脉不同高度位置点的颜色。

// 2. 计算每个顶点的颜色值
const colorsArr = [];
const c1 = new THREE.Color(0x0000ff);//山谷颜色
const c2 = new THREE.Color(0xff0000);//山顶颜色
for (let i = 0; i < count; i++) {
    //当前高度和整体高度比值
    const percent = (pos.getY(i) - miny) / height;
    const c = c1.clone().lerp(c2, percent);//颜色插值计算
    colorsArr.push(c.r, c.g, c.b); 
}
const colors = new Float32Array(colorsArr);
// 设置几何体attributes属性的颜色color属性
mesh.geometry.attributes.color = new THREE.BufferAttribute(colors, 3);

3. Mesh渲染山脉顶点颜色

// 3. 设置材质,使用顶点颜色渲染
mesh.material = new THREE.MeshLambertMaterial({
    vertexColors:true,
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/622833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

魏副业而战:夸克网盘拉新如何引流推广?3个方法,让你多赚5W+

我是魏哥&#xff0c;与其在家躺平&#xff0c;不如魏副业而战&#xff01; 夸克网盘拉新项目&#xff0c;相信大家都知道吧。 提到拉新&#xff0c;很多人不屑一顾&#xff0c;认为拉人头的项目&#xff0c;没什么前途。 这个想法&#xff0c;魏哥是反对的。 任何项目的存…

阿里巴巴 2023 版(Java 岗)面试突击手册,Github 已标星42K

程序员作为一个自带“高薪多金”标签的职业&#xff0c;收入要高于市场的平均薪资&#xff0c;即便是在 2023 年,程序员的薪资依然保持居高不下。 据拉勾发布的《2022 程序员群体职场洞察报告》显示计算机专业的应届本科生起薪普遍高于其他职业的平均薪资水平。77%的本科毕业生…

[数据库]数据库事务,管理等级,并发锁

1.数据库事务 数据库事务(transaction)是数据库的特性之一,在mysql数据库管理系统中,事务的管理是由引擎innordb实现的. 数据库事务可以理解为一个阶段中的活动,对于每一个窗口都有一个日志,日志中记录着本次事务中进行的改动(注意只是改动,查询不算).其中的两个指令commit,以…

ffplay设置延时

目录 理论 实验 不带参数 带参数 理论 使用ffplay播放视频源时&#xff0c;rtsp/rtmp等&#xff0c;会有一定的延时&#xff0c;这里我们可以通过设置ffplay播放参数将延时控制到最小。 ffplay.exe -i rtmp://xxxxxxx -fflags nobuffer 减少缓冲 也可以减少分析码流的时间…

chatgpt赋能python:Python就业岗位分析:机遇和挑战并存

Python就业岗位分析&#xff1a;机遇和挑战并存 Python是一种高级编程语言&#xff0c;它具有易于学习、易于阅读和维护的特点。自问世以来&#xff0c;Python一直是最受欢迎的编程语言之一&#xff0c;用于各种领域的开发、数据分析和科学计算等方面&#xff0c;因此Python岗…

【AI工具】 一款多SOTA模型集成的高精度自动标注工具(直接安装使用,附源码)

目录 高精度自动标注工具简介及其特性标注工具的安装开启自动标注 简介 X-AnyLabeling 是一款全新的交互式自动标注工具&#xff0c;其基于AnyLabeling进行构建和二次开发&#xff0c;在此基础上扩展并支持了许多的模型和功能&#xff0c;并借助Segment Anything和YOLO等主流…

Abp Vnext 搭建 ELK日志记录

ELK是三个开源软件的缩写&#xff0c;分别表示&#xff1a;Elasticsearch , Logstash, Kibana 安装 Elasticsearch Kibana 的方法我前面文章有写 Abp中加入Logstash Serilog.AspNetCore Serilog.Formatting.Elasticsearch Serilog.Sinks.Async Serilog.Sinks.Elasticsearchp…

算法与数据结构(四)

一、哈希表 1、哈希表在使用层面上可以理解为一种集合结构 2、如果只有key&#xff0c;没有伴随数据value&#xff0c;可以使用HashSet结构(C中叫UnOrderedSet) 3、如果既有key&#xff0c;又有伴随数据value&#xff0c;可以使用HashMap结构(C中叫UnOrderedMap) 4、有无伴随数…

【C++】4.多媒体库:SFML库入门

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍SFML库使用。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习知识&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&#…

新能源车加速内卷,下一程拼什么

近日&#xff0c;一则长城汽车举报比亚迪的消息&#xff0c;瞬间刷爆了整个汽车圈&#xff0c;行业外对于这个事情多少有点懵&#xff0c;但业内对此却并不感到意外。如果说去年前年国内新能源汽车的“较量”&#xff0c;还是争夺入选资格的话&#xff0c;如今这种级别的“较量…

TensorFlow2进行CIFAR-10数据集动物识别,保存模型并且进行外部下载图片测试

首先&#xff0c;你已经安装好anaconda3、创建好环境、下载好TensorFlow2模块并且下载好jupyter了&#xff0c;那么我们就直接打开jupyter开始进行CIFAR10数据集的训练。 第一步&#xff1a;下载CIFAR10数据集 下载网址&#xff1a;http://www.cs.toronto.edu/~kriz/cifar-10…

【Vue.js】对Vue-element-admin做代理网关转发proxy配置

文章目录 环境配置配置vue.config.js演示为啥要这么做呢&#xff1f; 环境配置 .env.development # 开发环境 .env.production # 生产环境我们需要在两个环境变量文件中配置 VUE_APP_BASE_API /dev # 这里配置全局的API前置标识 开发环境我使用的/dev 生产环境用的是/prod V…

Word控件Spire.Doc 【其他】教程(8):在 Word 中嵌入多媒体文件

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

物联网开发中常用的几款传感器

传感器是物联网中的关键部件&#xff0c;在物联网开发中发挥着重要作用。目前&#xff0c;市场上的传感器种类繁多&#xff0c;它们有许多用途。有些传感器可能主要用于测量温度、压力、流量等物理量&#xff0c;有些则用于测量位置、距离、速度和加速度等物理量&#xff0c;还…

干货第一弹!多组学联合分析之代谢组FAQ

代谢组是对生物体内代谢产物全谱分析的一种研究手段&#xff0c;代谢产物包括核酸、蛋白质、脂类生物大分子以及其他小分子物质&#xff0c;目前主要是检测1000Da以下的物质。代谢组研究具有高通量的检测能力、高灵敏度和准确度、非侵入性、非破坏性、全面性、数据资源整合等特…

DIY制作隔离信号注入变压器

最近在学习模电知识&#xff0c;接触到了测量运放环路增益&#xff0c;需要使用合适的注入变压器&#xff0c;查找资料发现商用信号注入变压器价格昂贵&#xff0c;不适合个人学习使用。看到LOTO使用普通音频变压器做测试&#xff0c;也跟技术群友做了交流&#xff0c;尝试使用…

企业构建高性能Web应用的重要组件

目 录 01 出现背景 ‍‍‍‍‍‍‍ 02 PrimetonLB、PrimetonMemDB在高性能Web应用中的作用 03 与PAS的集成‍‍ 04 优势体现 05 总结 01 出现背景‍ 随着互联网的快速发展和普及&#xff0c;各类Web应用已成为人们日常生活的重要组成&#xff0c;人们对Web应用的要求从过去的…

使用QMenu和mousePressEvent制作右键弹出菜单

我需要实现一个在QTextBrowser上邮件弹出菜单的效果&#xff0c;如下所示&#xff1a; 创建QTextBrowser的子类MyTextBrowser 首先创建一个QTextBrowser的子类&#xff0c;MyTextBrowser&#xff0c;如下所示&#xff1a;并定义一个QMenu指针 #ifndef MYTEXTBROWSER_H #defin…

webpack打包处理字体图标、map4、map3、avi资源

一、字体图标资源的下载&#xff08;阿里巴巴图标库&#xff09; iconfont官网&#xff1a;https://www.iconfont.cn/ 这里你可以搜索你想要的字体图标&#xff0c;或者选择官方的图标库中查找&#xff0c;我这里就以官方的图标库为例&#xff1a; 选择几个加入购物车 点…

关于libc++_shared.so 与libstdc++、libc++的链接关系

问题点1: -lstdc 与libc_shared.so的关联; 当在makefile中引入-lstdc时&#xff0c;其意味着调用动态库libstdc.so, Note&#xff1a;动态库libstdc.so 所对应的静态库是libstdc.a; Note&#xff1a;当前测试libstdc.so来自于Android12的./prebuilts/gcc/linux-x86/host/x8…