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

在 p5.js 的 3D 绘图中,这两个函数是一对 “黄金搭档”:

  • beginGeometry():像一个 “3D 模型的开关”,调用它之后,你画的所有简单 3D 形状(比如球体、圆锥)都会被 “收集” 起来,组合成一个完整的模型。
  • endGeometry():关闭这个 “收集开关”,并把收集到的所有形状打包成一个p5.Geometry对象(可以理解为 “3D 模型的数据包”),最后用model()函数就能把这个模型画出来。

为什么需要它们?

想象你要画一个由 10 个球体组成的复杂模型:

  • 如果每次刷新都重新画 10 个球体,会很卡(重复计算浪费性能);
  • beginGeometry()endGeometry()把 10 个球体 “打包” 成一个模型,只需创建一次,之后反复绘制就会快很多!

核心优势:为不变的复杂 3D 模型 “提速”,尤其适合需要反复绘制的场景。

注意:只能在WebGL 模式下使用(即画布必须用createCanvas(width, height, WEBGL)创建,因为 3D 绘图需要 WebGL 的支持)。

语法讲解

这两个函数都没有参数,用法非常简单:

beginGeometry(); // 开始"收集"形状
// 在这里添加各种3D形状(如sphere()、cone()等)
let myModel = endGeometry(); // 结束"收集",得到打包好的模型

基础用法

步骤 1:开启 3D 模式(WebGL)

function setup() {createCanvas(400, 400, WEBGL); // 最后一个参数WEBGL必须加,开启3D画布
}

步骤 2:用两个函数 “打包” 模型

let myModel; // 用来存打包好的模型function setup() {createCanvas(400, 400, WEBGL);beginGeometry(); // 开始收集形状sphere(30); // 加一个球体(半径30)translate(60, 0, 0); // 坐标系右移60,避免和球体重叠cone(20, 50); // 加一个圆锥(底面半径20,高50)myModel = endGeometry(); // 结束收集,保存模型
}

步骤 3:绘制模型

function draw() {background(200); // 灰色背景orbitControl(); // 允许鼠标拖拽旋转视角(3D必备交互)lights(); // 加光照,让模型有立体感(否则是平的)model(myModel); // 画出打包好的模型
}

完整代码

在这里插入图片描述

let myModel; // 用来存打包好的模型function setup() {createCanvas(400, 400, WEBGL);beginGeometry(); // 开始收集形状sphere(30); // 加一个球体(半径30)translate(60, 0, 0); // 坐标系右移60,避免和球体重叠cone(20, 50); // 加一个圆锥(底面半径20,高50)myModel = endGeometry(); // 结束收集,保存模型
}function draw() {background(200); // 灰色背景orbitControl(); // 允许鼠标拖拽旋转视角(3D必备交互)lights(); // 加光照,让模型有立体感(否则是平的)model(myModel); // 画出打包好的模型
}

搞个炫酷点的东西

一个由 12 个锥体组成的 “星团”,会随时间旋转,鼠标可控制视角,颜色随旋转角度变化,搭配光影更有 3D 质感。

在这里插入图片描述

let starCluster; // 星团模型
let angle = 0; // 旋转角度(控制动画)function setup() {createCanvas(600, 600, WEBGL); // 大一点的3D画布starCluster = makeStarCluster(); // 创建星团模型
}function draw() {background(0); // 黑色背景(突出星团)orbitControl(); // 鼠标旋转视角// 添加光影(增强3D质感)ambientLight(80); // 环境光(柔和照亮所有面)pointLight(255, 255, 255, 200, -200, 300); // 点光源(模拟远处的星光)// 让星团随时间旋转angle += 0.01; rotateX(angle * 0.8); // 绕X轴旋转rotateY(angle); // 绕Y轴旋转(速度稍快)// 颜色随旋转角度变化(用HSL模式,色调循环0-360)colorMode(HSL); fill((angle * 30) % 360, 70, 50); // 色调随角度变化,饱和度70,亮度50model(starCluster); // 绘制星团
}// 创建星团模型(12个锥体从中心向外辐射)
function makeStarCluster() {beginGeometry(); // 开始收集形状for (let i = 0; i < 12; i++) { // 循环12次,创建12个锥体push(); // 保存当前坐标系// 计算角度:12个锥体均匀分布在360°(每次旋转30°)let rotation = radians(i * 30); // 角度转弧度(p5.js旋转用弧度)rotateZ(rotation); // 绕Z轴旋转,让锥体分布成圆形// 把锥体移到距离中心120像素的位置translate(120, 0, 0); // 画锥体:半径15,高40cone(15, 40); pop(); // 恢复坐标系,准备下一个锥体}return endGeometry(); // 打包星团模型并返回
}
  1. 辐射状结构:用for循环创建 12 个锥体,通过rotateZ让它们像钟表刻度一样均匀分布,形成星团;
  2. 动态旋转rotateXrotateY结合angle变量,让星团整体旋转,有 “漂浮感”;
  3. 颜色动画:HSL 颜色模式下,色调随angle变化(0-360 循环),实现自动变色;
  4. 光影层次ambientLight(柔和环境光)+pointLight(定向点光源)让锥体有明暗对比,更像真实 3D 物体。

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

可以➕我 green bubble 吹吹水咯

在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(9)NMPC非线性模型预测控制及机械臂ROS控制器实现

前言 本篇介绍Nonlinear Model Predictive Control&#xff0c;非线性模型预测控制&#xff0c;MPC是一种现代先进的控制方法&#xff0c;而NMPC特指对非线性模型的控制&#xff0c;其核心思想是在每个控制周期内利用系统的非线性模型及损失函数&#xff0c;预测未来一段时间内…

达梦数据库备份与还原终极指南:从基础到增量策略实战

第一部分&#xff1a;备份与还原核心原理 一、备份还原本质解析数据存储机制 数据存储在物理文件页中&#xff08;最小单位4K-32K&#xff09;有效数据页 文件描述页 已分配使用页日志优先原则&#xff1a;操作先写REDO日志再更新数据文件三大核心操作操作作用关键特性备份复…

设计模式篇:在前端,我们如何“重构”观察者、策略和装饰器模式

设计模式篇&#xff1a;在前端&#xff0c;我们如何“重构”观察者、策略和装饰器模式 引子&#xff1a;代码里“似曾相识”的场景 作为开发者&#xff0c;我们总会遇到一些“似曾相识”的场景&#xff1a; “当这个数据变化时&#xff0c;我需要通知其他好几个地方都更新一…

Node.js 服务可以实现哪些功能

以下是 Node.js 服务可以实现的 100 个功能&#xff0c;涵盖 Web 开发、工具链、系统集成、自动化等方向&#xff0c;按类别分类整理&#xff1a;一、Web 开发相关 RESTful API 服务GraphQL 服务实时聊天应用&#xff08;WebSocket/Socket.IO&#xff09;博客/CMS 系统电子商务…

如何安装和使用 Cursor AI 编辑器

在软件开发领域&#xff0c;几乎每天都有新工具涌现&#xff0c;找到最适合您工作流程的工具可能会改变游戏规则。Cursor 是一款 AI 驱动的代码编辑器&#xff0c;其革命性的 API 管理插件 EchoAPI 就是其中的代表。它们强强联手&#xff0c;承诺在一个强大的平台内简化您的编码…

LangChain框架概念及简单的使用案例

一、LangChain介绍LangChain是一个强大的用于开发大模型应用程序的框架&#xff0c;为开发提供丰富的工具和组件&#xff0c;使得构造复杂的自然语言处理变得更加高效和便捷。它允许开发者将大语言模型与其他数据源工具集成&#xff0c;从而创建出能处理各种任务的智能体应用&a…

安卓audio 架构解析

audio_port_handle_t • 定义&#xff1a;audio_port_handle_t标识音频设备&#xff08;如扬声器、耳机&#xff09;或虚拟端口&#xff08;如远程 submix&#xff09;。它在设备连接或策略路由时由AudioPolicyManager分配&#xff0c;例如通过setDeviceConnectionState()动态注…

GitHub 上 Star 数量前 8 的开源 MCP 项目

原文链接&#xff1a;https://www.nocobase.com/cn/blog/github-open-source-mcp-projects。 MCP 这个词真正被广泛提起&#xff0c;是在 2025 年年初&#xff0c;尤其是在 AI 工具开发圈。3 月&#xff0c;一场围绕 “MCP 是否能成为未来标准协议” 的争论彻底点燃了讨论热度…

【数据结构与算法】数据结构初阶:排序内容加餐(二)——文件归并排序思路详解(附代码实现)

&#x1f525;个人主页&#xff1a;艾莉丝努力练剑 ❄专栏传送门&#xff1a;《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题 &#x1f349;学习方向&#xff1a;C/C方向 ⭐️人生格言&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为…

Jetson Orin NX/NANO+ubuntu22.04+humble+MAVROS2安装教程

MAVROS2目前不是官方提供的标准&#xff0c;主要区别还是通信机制的不同&#xff0c;以及API接口的区别&#xff0c;在使用的过程中&#xff0c;根据对应的版本安装即可&#xff0c;此处进提供简易的二进制安装方法&#xff0c;源码安装暂不提供&#xff0c;前去使用mavros即可…

Ubuntu 安装 ns-3 教程

Ubuntu 安装 ns-3最全 教程 1. 环境更新 sudo apt update sudo apt install git2. Ns3 最低依赖要求 2.1 安装依赖 安装依赖网址&#xff1a;根据自己安装的版本安装对应依赖。 https://www.nsnam.org/wiki/Installation Ubuntu/Debian/Mint 以下软件包列表在 Ubuntu 22.…

《林景媚与命运解放者》

《林景媚与命运解放者》——当数据库成为命运的主宰&#xff0c;谁将成为人类自由意志的解放者&#xff1f;《林景媚数据库宇宙》系列第十二部第一章&#xff1a;解放者的召唤公元 2098 年&#xff0c;随着“命运终结者”的威胁被解除&#xff0c;PostgreSQL Quantum Engine&am…

linux编译基础知识-头文件标准路径

&#x1f4c2; ​​1. 系统路径结构差异​​ 要查看 GCC 的默认头文件搜索路径&#xff0c;可通过以下方法操作&#xff08;以 Linux 环境为例&#xff09;&#xff1a; ​​1. 查看 C 语言头文件路径​​ gcc -v -E -xc - < /dev/null 2>&1 | grep -A 100 "#in…

离线语音芯片有哪些品牌和型号?

离线语音芯片的品牌有很多&#xff0c;型号也有很多&#xff0c;因为离线语音芯片的市场很大&#xff0c;几乎所有的想要语音控制的产品都可以通过增加一颗离线语音芯片来实现语音控制的能力&#xff0c;今天主要提到的就是离线语音芯片品牌厂家之一的唯创知音。唯创知音发展历…

Linux 软件包管理

Linux 软件包管理 分析 RPM 包 Linux 发行版本以 RHEL 为代表的发行版本&#xff0c;使用rpm包管理系统&#xff1a; RHEL (Red Hat Enterprise Linux&#xff09;Fedora&#xff08;由原来的RedHat桌面版本发展而来&#xff0c;免费版本&#xff09;CentOS&#xff08;RHEL的…

使用 Vue 3.0 Composition API 优化流程设计器界面

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

2025Nacos安装Mac版本 少走弯路版本

https://github.com/alibaba/nacos 一开始看网上文章&#xff0c;随便下了一个最新的3.0.2&#xff0c;然后出现很多错误 密钥等等问题&#xff0c;最后启动了&#xff0c;但是打不开链接&#xff1a;http://localhost:8848/nacos 然后开始找问题日志&#xff0c;/.nofollow/…

sifu mod制作 相关经验

sifu mod制作一遍流程数据传递后拆开是ok的&#xff0c;没必要合并 断片不能使用原材质不然导入ue里没法片段选择 效果拔群 带自动权重就会有跟随骨骼的效果&#xff0c;空顶点组会跟随父级的原点 这个选负的会抵消胶囊的碰撞效果 应用并刷新布料模拟&#xff08;相当于工程图的…

论文精读笔记:Overview

本文档记录了一些经典论文的讲解笔记。 重读经典&#xff1a;《ImageNet Classification with Deep Convolutional Neural Networks》 重读经典&#xff1a;《Generative Adversarial Nets》 重读经典&#xff1a;《Deep Residual Learning for Image Recognition》 重读经典…

Elasticsearch+Logstash+Filebeat+Kibana单机部署

目录 一、配置准备 下载java&#xff0c;需要java环境 二、单机模式 ELK部署 修改域名解析 elasticsearch配置 启动elasticsearch服务 查看是否启用 查看监听端口 logstash服务 创建配置文件 kibana 启动服务kebana 验证 网页访问 ​编辑 生成图表 回到网页 一、配置准…