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

p5.js 3D 形状 “预制工厂“——buildGeometry ()

点赞 + 关注 + 收藏 = 学会了

如果你已经会用box()sphere()画简单 3D 形状,想组合它们做出复杂模型,又担心画面卡顿,那么buildGeometry()就是你的 “性能救星”。这个函数能把多个简单形状 “焊接” 成一个自定义 3D 模型,让绘制效率飙升。

什么是 buildGeometry ()?

buildGeometry()是 p5.js 中用于组装复杂 3D 模型的工具函数。它的核心作用就像 “预制构件厂”:

  • 把多个简单 3D 形状(比如box()sphere())组合成一个完整的p5.Geometry对象(可以理解为 “自定义 3D 零件”);
  • 这个 “零件” 只需要在程序启动时制作一次,之后每次绘制直接调用即可,大幅减少重复计算;
  • 必须在WebGL 模式下使用(和所有 3D 函数一样)。

buildGeometry()就是来解决这个问题的:它能把多个简单 3D 形状 “打包” 成一个p5.Geometry对象,只需创建一次,之后反复绘制都不会卡顿。就像快递打包,把多个小包裹捆成一个大包裹,搬运起来更高效~

基础用法

buildGeometry打包一个球体,然后绘制它。

let myShape; // 存储打包好的3D对象function setup() {// 开启WebGL模式(3D绘图必备)createCanvas(400, 400, WEBGL);// 用buildGeometry创建3D对象,回调函数是makeShapemyShape = buildGeometry(makeShape);
}function draw() {background(200); // 灰色背景orbitControl(); // 允许鼠标拖动旋转视角lights(); // 添加光照(3D物体需要光照才看得见)model(myShape); // 绘制打包好的3D对象
}// 回调函数:定义要打包的形状
function makeShape() {sphere(50); // 画一个半径50的球体
}

旋转的几何花朵

buildGeometry组合多个锥体,形成一朵 “花”,然后让它随时间旋转并变色,展示高性能复杂 3D 动画的实现。

在这里插入图片描述

let flower;
let hueValue = 0; // 色相值(用于颜色变化)function setup() {createCanvas(600, 600, WEBGL);// 创建几何花朵flower = buildGeometry(makeFlower);
}function draw() {background(0); // 黑色背景orbitControl(); // 允许鼠标旋转视角lights(); // 光照// 颜色随时间变化(HSB模式:色相、饱和度、亮度)colorMode(HSB);fill(hueValue % 360, 80, 90);hueValue += 0.5;// 整体旋转(X和Y轴同时转,更有动感)// rotateX(frameCount * 0.005);rotateY(frameCount * 0.008);model(flower); // 绘制花朵
}// 构建花朵形状的回调函数
function makeFlower() {// 中心球体sphere(15);// 周围的“花瓣”:12个锥体for (let i = 0; i < 12; i++) {push();// 绕Y轴均匀分布(360度/12=30度一个)rotateY(i * PI / 6);// 沿Z轴向外移动translate(0, 0, 40);// 锥体:底面半径10,高30,朝上cone(10, 30);pop();}}

以上就是本文的全部内容啦,想了解更多 P5.js 用法欢迎关注 《P5.js中文教程》。

也可以➕我 green bubble 吹吹水咯

在这里插入图片描述

点赞 + 关注 + 收藏 = 学会了

http://www.lryc.cn/news/623423.html

相关文章:

  • 积鼎科技CFD VirtualFlow:引领国产多相流仿真技术,赋能工业智造
  • 6.Ansible自动化之-管理变量和事实
  • 使用vscode的task.json来自动执行make命令,而不直接使用终端
  • 智能化管理:开启海洋牧场新时代
  • Excel 表格数据自动填充
  • C++算法竞赛:位运算
  • Android 组件封装实践:从解耦到架构演进
  • 工作中使用到的 TRPS 【Temporal Residual Pattern Similarity】和 K-sigma 算法
  • 知识点汇集-web
  • Spring 源码学习(十一)—— webmvc 配置
  • 项目发布上线清单
  • 如何在Windows系统中更改用户名(中文转英文全流程)
  • LeetCode 837.新 21 点:动态规划+滑动窗口
  • 【运维进阶】实施任务控制
  • C语言---第一个C语言程序
  • 12.web api 3
  • 网格布局 CSS Grid
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day6
  • k8s集群搭建一主多从的jenkins集群
  • 锂电池SOH预测 | Matlab基于KPCA-PLO-Transformer-LSTM的的锂电池健康状态估计(锂电池SOH预测),附锂电池最新文章汇集
  • 网络原理与编程实战:从 TCP/IP 到 HTTP/HTTPS
  • 《详解 C++ Date 类的设计与实现:从运算符重载到功能测试》
  • KingbaseES:一体化架构与多层防护,支撑业务的持续稳定运行与扩展
  • Manus AI 与多语言手写识别技术剖析
  • 整体设计 之“凝聚式中心点”原型 --整除:智能合约和DBMS的深层联合 之1
  • 第三十九天(WebPack构建打包Mode映射DevTool源码泄漏识别还原)
  • 大模型提示词(Prompt)终极指南:从原理到实战,让AI输出质量提升300%
  • 朝花夕拾(四) --------python中的os库全指南
  • 《算法导论》第 27 章 - 多线程算法
  • -nostartfiles参数官方解释,含义