p5.js 3D盒子的基礎用法

點贊 + 關注 + 收藏 = 學會了

如果你剛接觸 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;比如管培生以及產品經理等崗位。 筆試內容 筆試內容一…