p5.js 用 beginGeometry () 和 endGeometry () 打造自定義 3D 模型

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

在 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 驗證 網頁訪問 ?編輯 生成圖表 回到網頁 一、配置準…