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

如果你刚接触 p5.js,想尝试 3D 绘图,那么box()函数绝对是你的入门首选。它能快速绘制出 3D 长方体(或正方体),配合简单的交互就能做出酷炫的 3D 效果。本文会从基础到进阶,带你吃透这个实用 API。

box

box()是 p5.js 中专门用于绘制 3D 立方体的函数。它具有以下几个特点:

  • 自带 6 个面,每个面都和相邻面成 90° 角(直角);
  • 必须在WebGL 模式下使用(3D 绘图的基础模式);
  • 参数灵活,可通过调整参数控制大小和细节。

基础用法

要使用box(),首先得创建支持 3D 的画布。记住:必须用WEBGL模式,否则盒子不会显示!

function setup() {// 创建300x300的WebGL画布(支持3D)createCanvas(300, 300, WEBGL);
}function draw() {background(220); // 灰色背景orbitControl();  // 允许鼠标拖动旋转视角(必加!否则3D效果看不出来)box(); // 绘制默认盒子
}

运行后,你会看到一个灰色背景上的白色盒子。拖动鼠标可以 360° 旋转查看。

box()有 5 个可选参数,分别控制盒子的尺寸和表面细节。记住,参数是按顺序生效的。

box([width], [height], [depth], [detailX], [detailY])

width(宽度)

  • 作用:控制盒子沿 X 轴的长度;
  • 默认值:50;
  • 示例:box(100) → 宽度为 100,其他尺寸默认(高度 = 宽度,深度 = 高度)。

height(高度)

  • 作用:控制盒子沿 Y 轴的长度;
  • 默认值:等于 width(所以只传 1 个参数时是正方体);
  • 示例:box(100, 200) → 宽 100,高 200,深度默认等于高度(200)。

depth(深度)

  • 作用:控制盒子沿 Z 轴的长度(3D 的 “厚度”);
  • 默认值:等于 height;
  • 示例:box(100, 200, 50) → 宽 100,高 200,深 50(扁平状)。

detailX(X 轴细分)

  • 作用:控制盒子表面沿 X 轴的三角形细分数量(细分越多,表面越平滑,但性能消耗略高);
  • 默认值:1(最基础的细分,棱角明显);
  • 示例:box(100, 100, 100, 5) → X 轴用 5 个细分,表面更细腻。

detailY(Y 轴细分)

  • 作用:控制盒子表面沿 Y 轴的三角形细分数量;
  • 默认值:1;
  • 示例:box(100, 100, 100, 5, 8) → X 轴 5 细分,Y 轴 8 细分,表面更平滑。

上色和动画

一个彩色的长方体,会缓慢旋转,颜色随时间从红→绿→蓝循环变化,拖动鼠标可从任意角度观察。

function setup() {createCanvas(400, 400, WEBGL);
}function draw() {background(0); // 黑色背景orbitControl();// 随时间旋转(X和Y轴同时转)rotateX(frameCount * 0.01); // frameCount是当前帧数,让旋转随时间变化rotateY(frameCount * 0.01);// 彩色盒子(HSL颜色模式:色相随时间变化)fill(frameCount % 360, 100, 50); // 色相0-360循环,饱和度100,亮度50// 尺寸:宽150,高100,深80,细分3(表面更平滑)box(150, 100, 80, 3);
}

跳动的彩色盒子阵列

box()做一个酷炫的特效:多个盒子组成阵列,随鼠标位置和时间跳动,颜色也动态变化。

let spacing = 120; // 盒子间距
let boxSize = 60; // 基础大小function setup() {createCanvas(800, 600, WEBGL);noFill(); // 无填充,只显示边框strokeWeight(2); // 边框粗细
}function draw() {background(0);orbitControl();// 旋转整个场景,增强3D感rotateX(-0.3);rotateY(frameCount * 0.005);// 绘制3x3阵列的盒子for (let x = -spacing; x <= spacing; x += spacing) {for (let y = -spacing; y <= spacing; y += spacing) {for (let z = -spacing; z <= spacing; z += spacing) {push(); // 保存当前状态translate(x, y, z); // 移动到目标位置// 随时间和鼠标位置变化大小(跳动效果)let size = boxSize * 0.5 + sin(frameCount * 0.05 + x*0.1 + mouseX*0.01) * 20;// 颜色随位置变化stroke(x + 200, y + 200, z + 200);box(size); // 绘制盒子pop(); // 恢复状态}}}
}

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

也可以➕我 green bubble 吹吹水咯

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

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

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

相关文章

【动态规划 完全背包 卡常】P9743 「KDOI-06-J」旅行|普及+

本文涉及知识点 C动态规划 完全背包 C记忆化搜索 「KDOI-06-J」旅行 题目描述 小 C 在 C 国旅行。 C 国有 nmn\times mnm 个城市&#xff0c;可以看做 nmn\times mnm 的网格。定义 (i,j)(i,j)(i,j) 表示在网格中第 iii 行第 jjj 列的城市。 该国有 222 种交通系统&#x…

pytest框架-详解

目录 一、前言 二、pytest安装 2.1、安装 2.2、验证安装 2.3、pytest文档 三、pytest框架的约束 3.1、 python的命名规则 3.2、 pytest的命名规则 四、pytest的运行方式 4.1、主函数运行 4.2、命令行运行 五、pytest配置文件pytest.ini文件 六、前置和后置 七、as…

【递归、搜索与回溯算法】DFS解决FloodFill算法

FloodFill算法简介一、[图像渲染](https://leetcode.cn/problems/flood-fill/description/)二、[岛屿数量](https://leetcode.cn/problems/number-of-islands/description/)三、[岛屿的最大面积](https://leetcode.cn/problems/max-area-of-island/description/)四、[被围绕的区…

解决网络传输中可能出现的“粘包”

先理解核心问题&#xff1a;什么是“TCP粘包”&#xff1f; TCP 就像一条水管&#xff0c;数据通过水管从一端传到另一端。但它有个特点&#xff1a;不会按“发送时的小包”来划分&#xff0c;而是把数据当成连续的字节流。 比如&#xff1a; 你分两次发数据&#xff1a;第一次…

Docker搭建RSS订阅服务(freshRss+rsshub)

目录搭建freshRss1. 创建yml文件2. 创建容器3. 检查容器状态&#xff0c;正常运行则搭建成功4. 浏览器访问并配置数据库5. 开始使用搭建RssHub1. 创建yml文件2. 创建容器3. 检查容器状态&#xff0c;正常运行则搭建成功4. 浏览器访问生成RSS路由&#xff08;订阅地址&#xff0…

Spring 条件注解与 SPI 机制(深度解析)

在 Spring 及 Spring Boot 框架中&#xff0c;条件注解与 SPI 机制扮演着至关重要的角色&#xff0c;它们是实现自动配置、灵活控制 Bean 创建以及组件按需加载的关键所在。深入理解它们的底层实现与应用场景&#xff0c;既能帮助我们在面试中对答如流&#xff0c;又能在实际开…

Mac(二)Homebrew 的安装和使用

官网地址&#xff1a; https://brew.sh/官方文档&#xff1a; https://docs.brew.sh/Manpage Homebrew 是 macOS 上最强大的包管理器&#xff0c;让你轻松安装、更新和管理成千上万的开发工具、命令行程序&#xff08;如 wget, tree, ffmpeg&#xff09;甚至图形应用&#xff0…

Vue 侦听器(watch 与 watchEffect)全解析2

二、watchEffect:自动追踪依赖的侦听器 watchEffect 是更“简洁”的侦听器:它不需要手动指定数据源,而是自动追踪回调中用到的响应式状态——当这些状态变化时,自动触发回调。适用于“副作用与依赖绑定紧密”的场景(如依赖较多、无需区分新旧值)。 1. 基本用法(与 wat…

正点原子STM32H743配置 LTDC + DMA2D

开发板 正点原子STM32H743 阿波罗固件包 STM32Cube MCU Package for STM32H7 1.12.1开发工具 STM32CubeMX STM32CubeIDE根据原理图适配所有GPIO&#xff0c;并设置所有GPIO速度 Very Hight

北京JAVA基础面试30天打卡10

1.最佳左前缀原则是什么 Q:什么是MySQL索引I的最左匹配原则&#xff1f; A:最左匹配原则是指&#xff0c;在复合索引引中&#xff0c;查询条件需要按照索引列的顺序从最左侧列开始依次匹配。只有查询条件中的列按照索引的最左边列开始进行匹配,索引引才能被有效使用。 Q:能否举…

五、ZooKeeper、Kafka、Hadoop、HBase、Spark、Flink集群化软件的部署

五、ZooKeeper、Kafka、Hadoop、HBase、Spark、Flink集群化软件的部署 文章目录五、ZooKeeper、Kafka、Hadoop、HBase、Spark、Flink集群化软件的部署1.作用主要作用&#xff08;通俗说法&#xff09;对实战项目有什么用&#xff1f;&#xff08;直接举例&#xff09;2.集群化软…

下载及交叉编译glib,记录

下载及交叉编译glib&#xff0c;记录 编译参见这篇博客 嵌入式arm交叉编译移植bluez5.0最新教程_bluez移植-CSDN博客 编译命令有更新&#xff1a; make -j4 CFLAGS"-Wno-format-overflow" glib库的作用&#xff1a; glib 是 GNOME 项目下的一个基础库&#xff0c…

从 0 到 1 玩转Claude code(蓝耘UI界面版本):AI 编程助手的服务器部署与实战指南

前言 蓝耘 Coding UI 作为基于 Claude Code 的可视化工具&#xff0c;凭借对本地项目的深度掌控、与 Git 仓库的无缝衔接以及直观的交互界面&#xff0c;正在重构开发者的工作流。本文将带你一步步完成从环境搭建到实战使用的全流程&#xff0c;让这款工具真正成为你的编程「副…

docker使用指定的MAC地址启动podman使用指定的MAC地址启动

docker指定固定的mac地址 1】创建自定义桥接网络并配置 MAC 地址保留 docker network create --driver bridge custom_bridge2】启动容器并指定使用自定义网络 docker run -it --name your-container --network custom_bridge --mac-address 02:42:ac:11:00:02 your-image--mac…

抽奖程序web程序

使用html实现抽奖程序&#xff0c;没有后台&#xff0c;如果需要后续写个后台可以配置&#xff0c;没有过多的介绍&#xff0c;看代码吧 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>婚礼抽奖</…

【Python办公】Excel转json(极速版)-可自定义累加字段(如有重复KEY)

目录 专栏导读 🎯 亮点特性 ⚙️ 安装与运行 🖥️ 界面与区域说明 🚀 使用示例 💡 使用建议 ❓ 常见问题(FAQ) 🧱 技术要点 完整代码 🏁 结语 专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——…

JavaScript 防抖(Debounce)与节流(Throttle)

在 JavaScript 前端开发中&#xff0c;处理高频率事件&#xff08;如窗口调整、输入框输入、页面滚动&#xff09;时&#xff0c;如果不加以控制&#xff0c;会导致性能问题&#xff0c;如页面卡顿或资源浪费。防抖&#xff08;Debounce&#xff09;和节流&#xff08;Throttle…

探索无人机图传技术:创新视野与无限可能

近年来&#xff0c;无人机技术的飞速发展不仅改变了航空行业的格局&#xff0c;还深刻影响了多个领域的日常运作。无人机图传技术作为无人机的核心技术之一&#xff0c;凭借其精准的图像传输能力和高效的远程操作特性&#xff0c;正在成为各行各业的得力助手。从空中拍摄到实时…

Comfyui进入python虚拟环境

如果你的 Python 可执行文件&#xff08;python.exe&#xff09;位于 C:\comfyui\.venv\Scripts&#xff0c;那么 .venv 本身已经是一个虚拟环境&#xff0c;你只需要 激活它&#xff0c;而无需再创建一个新的虚拟环境。如何激活这个已有的虚拟环境&#xff1f; 1. 打开终端&am…

秋招春招实习百度笔试百度管培生笔试题库百度非技术岗笔试|笔试解析和攻略|题库分享

笔试介绍 百度非技术岗笔试采用的是规定时间统一笔试形式&#xff0c;管培生会有两场考试分别是7月底和8月中旬&#xff0c;其他非技术类岗位一般在8月中旬开始。 行测题必考&#xff0c;有些岗位考简答题&#xff0c;比如管培生以及产品经理等岗位。 笔试内容 笔试内容一…