點贊 + 關注 + 收藏 = 學會了
如果你已經開始探索 p5.js 的 3D 世界,那么createModel()
這個 API 絕對是你需要掌握的強大工具。它允許你創建自定義的 3D 幾何模型,為你的創意提供無限可能。
什么是 createModel ()?
createModel()
用于從一個 OBJ 或 STL 格式的 字符串 中加載 3D 模型,并返回一個 p5.Geometry
對象。它適用于已經以文本形式(例如通過 loadStrings()
讀取文件后拼接的字符串)拿到模型數據的場景。
為什么要用 createModel()
?
- 當你想在運行時動態獲取模型(比如用戶上傳、通過網絡接口拿到純文本 OBJ/STL)并立即生成幾何體時,
createModel()
十分方便。 - 如果只是從本地或服務器文件直接加載,更常用的是
loadModel()
,它會返回同樣的p5.Geometry
。
語法
let geom = createModel(modelString, fileType, normalize, successCallback, failureCallback)
參數名 | 類型 | 說明 |
---|---|---|
modelString | String | 必填,OBJ/STL 文件的文本內容。通常通過 loadStrings() 或者從服務器拉取后用 join('\n') 拼接。 |
fileType | String | 必填,模型格式,'obj' 或 'stl' (不含點號)。 |
normalize | Boolean | 可選,是否在加載時對模型做統一縮放。若 true ,自動根據模型最大邊長進行縮放,便于在畫布中展示。 |
success | Function | 可選,加載成功后的回調,參數為得到的 p5.Geometry 對象。 |
failure | Function | 可選,加載失敗后的回調,參數為事件錯誤對象。 |
flipU , flipV | Boolean | 可選,是否翻轉 U/V 紋理坐標(OBJ/STL 若帶紋理時使用)。 |
返回值:一個 p5.Geometry
實例,你可以直接用 model(geometry)
在 draw()
中渲染。
基礎 Demo:加載并繪制一個立方體
寫一個最簡立方體的 OBJ 文本,然后用 createModel()
加載并畫出來。
let cubeGeo; // 存放 p5.Geometryfunction setup() {createCanvas(400, 400, WEBGL);// 定義一個簡單立方體的 OBJ 文本(8 個頂點,6 個面)const cubeObj = `
v -1 -1 1
v 1 -1 1
v 1 1 1
v -1 1 1
v -1 -1 -1
v 1 -1 -1
v 1 1 -1
v -1 1 -1
f 1 2 3 4
f 5 6 7 8
f 1 5 8 4
f 2 6 7 3
f 1 2 6 5
f 4 3 7 8`;// 加載幾何體:傳入字符串、格式、歸一化為 truecubeGeo = createModel(cubeObj, '.obj', true, // 加載成功回調(可選)function(g) {console.log('模型加載完成,共有頂點:', g.vertices.length);},// 加載失敗回調(可選)function(err) {console.error('模型加載失敗:', err);});
}function draw() {background(30);orbitControl(); // 支持拖拽旋轉視角ambientLight(100);directionalLight(255, 255, 255, 0.5, 1, -0.5);push();rotateY(frameCount * 0.01);rotateX(frameCount * 0.008);normalMaterial(); // 根據法線給模型著色model(cubeGeo); // 渲染幾何體pop();
}
一個可用鼠標拖拽姿態的彩色旋轉立方體。
以上就是本文的全部內容啦,想了解更多 P5.js 用法歡迎關注 《P5.js中文教程》。
也可以?我 green bubble 吹吹水咯
點贊 + 關注 + 收藏 = 學會了