当前位置: 首页 > news >正文

Three.js 点、线教程

点、线 ·Points & Lines· ▶ 在线运行案例

  • 案例合集:三维可视化功能案例(threehub.cn)
  • 开源仓库github地址:https://github.com/z2586300277/three-cesium-examples
  • 400个案例代码:网盘链接

你将学到什么

  • Points+PointsMaterial绘制点精灵
  • Line+LineBasicMaterial绘制线段
  • size屏幕像素而非世界单位

效果说明

同一三角形顶点,以黄色大点红色线段两种方式叠加显示。旋转场景时可看到线的连接顺序。

核心概念

WebGL 有三种基本绘制模式:

POINTS → Three.Points

LINES → Three.Line / LineSegments / LineLoop TRIANGLES → Three.Mesh

PointsMaterial.size

new THREE.PointsMaterial({

color: 0xffff00, size: 10.0 // 单位:像素(screen space),不受透视影响 });

若需要世界空间大小的点(远小近大),需自定义 Shader 或在顶点着色器里用gl_PointSize

Line 连接规则

THREE.Lineposition数组顺序依次连线:0→1→2→0→1→2…

若要单独控制每条边,用LineSegments;闭合环用LineLoop

实现步骤

  • 复用 网格 的 BufferGeometry(6 顶点)
  • Points+PointsMaterial→ 黄色点
  • Line+LineBasicMaterial→ 红色线
  • 两者scene.add
  • 代码要点

    import * as THREE from 'three'; import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'

    const scene = new THREE.Scene();

    // 网格模型Mesh其实就一个一个三角形(面)拼接构成 const geometry = new THREE.BufferGeometry(); const vertices = new Float32Array([ 0, 0, 0, 50, 0, 0, 50, 0, 50,

    0, 0, 0, 0, 0, 50, 50, 0, 50, ]);

    geometry.attributes.position = new THREE.BufferAttribute(vertices, 3);

    // 点渲染模式 const material2 = new THREE.PointsMaterial({ color: 0xffff00, size: 10.0 //点对象像素尺寸 }); const points = new THREE.Points(geometry, material2); //点模型对象 scene.add(points);

    // 线材质对象 const material1 = new THREE.LineBasicMaterial({ color: 0xff0000 //线条颜色 }); // 创建线模型对象 const line = new THREE.Line(geometry, material1); scene.add(line);

    // AxesHelper const axesHelper = new THREE.AxesHelper(150); scene.add(axesHelper);

    // 相机 const camera = new THREE.PerspectiveCamera(); //相机 camera.position.set(200, 200, 200); //相机位置 camera.lookAt(0, 0, 0); //相机观察位置

    // 渲染器 const renderer = new THREE.WebGLRenderer(); // 创建渲染器 const box = document.getElementById('box'); renderer.setSize(box.clientWidth, box.clientHeight); //渲染区域 renderer.render(scene, camera); //执行渲染 box.appendChild(renderer.domElement);;

    const controls = new OrbitControls(camera, renderer.domElement); controls.addEventListener('change', function () { renderer.render(scene, camera); });

    完整源码:GitHub

    小结

    • 本文提供点、线完整 Three.js 源码与在线 Demo,建议先运行案例再改 uniform/参数做二次实验
    • 更多 Three.js 实战案例见 three-cesium-examples 合集 与 GitHub 开源仓库
http://www.jsqmd.com/news/1118221/

相关文章:

  • 云顶之弈免费助手:3分钟学会的实时策略工具指南
  • MIC1557与PIC18F45K50构建高精度定时系统设计
  • GHelper终极指南:华硕笔记本性能控制完全解决方案
  • YOLO目标检测实战:从版本选择到模型部署完整指南
  • 蒸汽流量计十大品牌排名 工业蒸汽计量选型专业指南深度解读
  • 如何3分钟搞定Excel批量查询:面向数据工作者的完整指南
  • 基于YOLO与伺服电机的AI自动追踪摄像机DIY全流程详解
  • IS31FL3731 LED驱动与TM4C1299微控制器的嵌入式开发实践
  • 3种方法重置Navicat Premium试用期:macOS用户的终极解决方案
  • process-healer实战案例:如何用5行配置实现服务崩溃自动恢复
  • 斑诺尔模式系统软件开发
  • MuleSoft+LLM企业级AI编排:语义适配与流程治理实战
  • 智能散热管理系统在汽车电子中的精密控制与优化
  • Java毕设选题推荐:基于 SpringBoot+Vue 的医疗设备溯源管理系统的设计与实现 医院器械分类归档与数据统计分析系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 牛哇!输入主题,这几款AI论文写作软件从摘要到致谢全搞定!
  • DC-DC降压转换设计:171010550与PIC32MZ的智能电源方案
  • 基于DRV8213与STM32的智能散热系统设计与实现
  • 深度探索:5种高效使用text2vec中文句子嵌入模型的实战方法
  • 嵌入式系统智能散热方案设计与PIC32MZ温控实现
  • 终极解决方案:tchMaterial-parser 让您轻松获取国家中小学智慧教育平台电子课本
  • PX4自动驾驶系统:构建高效多旋翼无人机集群的5大核心技术
  • 3步搞定网易云音乐插件管理器:BetterNCM-Installer终极安装指南
  • AI智能体评估框架:从原理到实践,构建可靠自动化测试体系
  • 第 43 篇:连接超时完全指南:从抓包到根因,拆解每一段沉默
  • 杂交瘤技术与单克隆抗体制备全解析|云克隆全链条单抗研发平台
  • Montserrat字体完全指南:从布宜诺斯艾利斯招牌到全球设计首选
  • 终极指南:如何用深蓝词库转换工具实现20+输入法格式自由迁移
  • 云原生时代Java应用安全实战:从供应链漏洞到运行时防护的纵深防御
  • Insyde BIOS高级设置解锁工具:技术深度解析与安全实践指南
  • 3大核心模块揭秘:从零开始掌握Blender MMD创作全流程