Three.js中文网 Three.js中文网
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
Web3D系统课程视频
  • 0.学前说明

  • 1.Three.js快速入门

  • 2.几何体BufferGeometry

  • 3.模型对象、材质

  • 4.层级模型

  • 5.顶点UV坐标、纹理贴图

  • 6.加载外部三维模型(gltf)

  • 7.PBR材质与纹理贴图

  • 8.渲染器和前端UI界面

  • 9.生成曲线、几何体

    • 1. 生成圆弧顶点
    • 2. 几何体方法.setFromPoints()
    • 3. 曲线Curve简介
    • 4. 椭圆、圆
    • 5. 样条曲线
    • 6. 贝塞尔曲线
    • 7. 样条、贝塞尔曲线应用
    • 8. 组合曲线CurvePath拼接曲线
    • 9. 曲线路径管道TubeGeometry
    • 10. 旋转成型LatheGeometry
    • 11. 轮廓填充ShapeGeometry
    • 12. 拉伸ExtrudeGeometry
    • 13. 扫描ExtrudeGeometry
    • 14. 多边形轮廓Shape简介
    • 15. 多边形轮廓Shape(圆弧)
    • 16. 多边形Shape(内孔.holes)
    • 17. 模型边界线EdgesGeometry
    • 18. 几何体顶点颜色数数据
    • 19. 一段曲线颜色渐变
    • 20. Color颜色渐变插值
    • 21. 查看或设置gltf几何体顶点
    • 22. 山脉地形高度可视化
    • 10.相机基础

    • 11.光源和阴影

    • 12.精灵模型Sprite

    • 13.后处理EffectComposer

    • 14.射线拾取模型

    • 15.场景标注标签信息

    • 16.关键帧动画

    • 17.动画库tween.js

    • Three.js教程
    • 9.生成曲线、几何体
    郭隆邦
    2023-02-04
    目录

    22. 山脉地形高度可视化

    # 山脉地形高度可视化

    一个山脉地形的高度可视化,具体说就是地形不同的高度设置不同的颜色值。有多种方式,下面就举一个设置顶点颜色.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,
    });
    
    21. 查看或设置gltf几何体顶点
    1. 正投影相机

    ← 21. 查看或设置gltf几何体顶点 1. 正投影相机→

    Theme by Vdoing | Copyright © 2016-2025 豫ICP备16004767号-2
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式