3D形状を記述するクラス。
各p5.Geometryオブジェクトは、頂点と呼ばれる接続された点の集合として 3D形状を表現します。すべての3D形状は、頂点を接続して三角形を形成し、 それらを縫い合わせて作られます。形状の表面上の各三角形のパッチは 面と呼ばれます。ジオメトリは、照明やテクスチャマッピングなどの 効果に使用するために、頂点と面に関する情報を保存します。
最初のパラメータdetailXはオプションです。数値が渡された場合、 例えばnew p5.Geometry(24)のように、ジオメトリのx軸に沿って使用する 三角形の分割数を設定します。デフォルトでは、detailXは1です。
2番目のパラメータdetailYもオプションです。数値が渡された場合、 例えばnew p5.Geometry(24, 16)のように、ジオメトリのy軸に沿って使用する 三角形の分割数を設定します。デフォルトでは、detailYは1です。
3番目のパラメータcallbackもオプションです。関数が渡された場合、 例えばnew p5.Geometry(24, 16, createShape)のように、新しい3D形状に 頂点を追加するために一度呼び出されます。
実例
シンタックス
p5.Geometry([detailX], [detailY], [callback])
パラメーター
x軸に沿った頂点の数。
y軸に沿った頂点の数。
ジオメトリが作成された後に呼び出される関数。
フィールド
ジオメトリの頂点に垂直なベクトルを含む配列。
面の向きは、その法線ベクトルによって定義されます。法線ベクトルは 面から外向きに伸び、表面に垂直(法線)です。myGeometry.computeNormals()を 呼び出すと、まず各面の法線ベクトルが計算されます。次に、各頂点の法線ベクトルが、 その頂点を囲む面の法線ベクトルを平均化して計算されます。頂点の法線は myGeometry.vertexNormals配列にp5.Vector オブジェクトとして保存されます。
ジオメトリの各面を形成する頂点をリストする配列。
すべての3D形状は、頂点と呼ばれる点の集合を接続して作られます。 ジオメトリの表面は、頂点を接続して三角形を形成し、それらを縫い合わせて 作られます。ジオメトリの表面上の各三角形のパッチは面と呼ばれます。
ジオメトリの頂点は、myGeometry.vertices 配列にp5.Vectorオブジェクトとして 保存されています。ジオメトリの最初の頂点はmyGeometry.vertices[0]の p5.Vectorオブジェクト、 2番目の頂点はmyGeometry.vertices[1]、3番目の頂点は myGeometry.vertices[2]、というようになっています。
例えば、長方形から作られたジオメトリは2つの面を持ちます(長方形は2つの三角形を 結合して作られるため)。長方形のmyGeometry.facesは 2次元配列[[0, 1, 2], [2, 1, 3]]になります。最初の面、 myGeometry.faces[0]は配列[0, 1, 2]です。これは myGeometry.vertices[0]、myGeometry.vertices[1]、 myGeometry.vertices[2]を接続して形成されるためです。2番目の面、 myGeometry.faces[1]は配列[2, 1, 3]です。これは myGeometry.vertices[2]、myGeometry.vertices[1]、 myGeometry.vertices[3]を接続して形成されるためです。
ジオメトリの各頂点のテクスチャ座標をリストする配列。
texture()が機能するためには、 ジオメトリはその表面上の点を長方形の画像(テクスチャとして使用される)の ピクセルにマッピングする方法が必要です。座標(x, y, z)のジオメトリの頂点は、 座標(u, v)のテクスチャ画像のピクセルにマッピングされます。
myGeometry.uvs配列は、ジオメトリに追加された順序で 各頂点の(u, v)座標を保存します。例えば、最初の頂点、 myGeometry.vertices[0]の(u, v)座標は myGeometry.uvs[0]とmyGeometry.uvs[1]に保存されます。
メソッド
ジオメトリを含む最小の箱の位置とサイズを計算します。
バウンディングボックスは、ジオメトリ全体を含む最小の直方体です。 各軸に沿ったボックスの最小座標と最大座標、およびサイズ(長さ)と オフセット(中心)によって定義されます。
myGeometry.calculateBoundingBox()を呼び出すと、バウンディングボックスを 記述する4つのプロパティを持つオブジェクトが返されます:
// myGeometryのバウンディングボックスを取得します。
let bbox = myGeometry.calculateBoundingBox();
// バウンディングボックスをコンソールに出力します。
console.log(bbox);
// {
// // 各軸に沿った最小座標。
// min: { x: -1, y: -2, z: -3 },
//
// // 各軸に沿った最大座標。
// max: { x: 1, y: 2, z: 3},
//
// // 各軸に沿ったサイズ(長さ)。
// size: { x: 2, y: 4, z: 6},
//
// // 各軸に沿ったオフセット(中心)。
// offset: { x: 0, y: 0, z: 0}
// }
saveObj()関数は、p5.Geometryオブジェクトを Wavefront .objファイル形式で3Dモデルとしてエクスポートします。 これにより、p5.jsで作成した3D形状を他のソフトウェアで レンダリング、アニメーション、3Dプリントなどに使用できます。
エクスポートされた.objファイルには、p5.Geometryの面と頂点、 およびテクスチャ座標と法線(存在する場合)が含まれます。
saveStl()関数は、p5.Geometryオブジェクトを STLステレオリソグラフィファイル形式で3Dモデルとしてエクスポートします。 これにより、p5.jsで作成した3D形状を他のソフトウェアで レンダリング、アニメーション、3Dプリントなどに使用できます。
エクスポートされた.stlファイルには、p5.Geometryの面、頂点、および法線が含まれます。
デフォルトでは、このメソッドはテキストベースの.stlファイルを保存します。 あるいは、2番目のパラメータとして{ binary: true }を渡すことで、 より小さいが人間が読みにくいバイナリ.stlファイルを保存することもできます。
ジオメトリのテクスチャu座標を反転します。
texture()が機能するためには、 ジオメトリはその表面上の点を長方形の画像(テクスチャとして使用される)の ピクセルにマッピングする方法が必要です。座標(x, y, z)のジオメトリの頂点は、 座標(u, v)のテクスチャ画像のピクセルにマッピングされます。
myGeometry.uvs配列は、 ジオメトリに追加された順序で各頂点の(u, v)座標を保存します。 myGeometry.flipU()を呼び出すと、ジオメトリのu座標が反転され、 テクスチャが水平方向に鏡像反転して表示されます。
例えば、平面の4つの頂点は左上の角から時計回りに追加されます。 以下はmyGeometry.flipU()を呼び出すことで平面のテクスチャ座標が どのように変化するかを示しています:
// 元のテクスチャ座標を出力します。 // 出力: [0, 0, 1, 0, 0, 1, 1, 1] console.log(myGeometry.uvs);
// u座標を反転します。 myGeometry.flipU();
// 反転されたテクスチャ座標を出力します。 // 出力: [1, 0, 0, 0, 1, 1, 0, 1] console.log(myGeometry.uvs);
// 注目すべき変更点: // 上部の頂点: [0, 0, 1, 0] --> [1, 0, 0, 0] // 下部の頂点: [0, 1, 1, 1] --> [1, 1, 0, 1] ジオメトリのテクスチャv座標を反転します。
texture()が機能するためには、 ジオメトリはその表面上の点を長方形の画像(テクスチャとして使用される)の ピクセルにマッピングする方法が必要です。座標(x, y, z)のジオメトリの頂点は、 座標(u, v)のテクスチャ画像のピクセルにマッピングされます。
myGeometry.uvs配列は、 ジオメトリに追加された順序で各頂点の(u, v)座標を保存します。 myGeometry.flipV()を呼び出すと、ジオメトリのv座標が反転され、 テクスチャが垂直方向に鏡像反転して表示されます。
例えば、平面の4つの頂点は左上の角から時計回りに追加されます。 以下はmyGeometry.flipV()を呼び出すことで平面のテクスチャ座標が どのように変化するかを示しています:
// 元のテクスチャ座標を出力します。 // 出力: [0, 0, 1, 0, 0, 1, 1, 1] console.log(myGeometry.uvs);
// v座標を反転します。 myGeometry.flipV();
// 反転されたテクスチャ座標を出力します。 // 出力: [0, 1, 1, 1, 0, 0, 1, 0] console.log(myGeometry.uvs);
// 注目すべき変更点: // 左側の頂点: [0, 0] <--> [1, 0] // 右側の頂点: [1, 0] <--> [1, 1] 頂点を使用してジオメトリの面を計算します。
すべての3D形状は、頂点と呼ばれる点の集合を接続して作られます。 ジオメトリの表面は、頂点を接続して三角形を形成し、それらを縫い合わせて 作られます。ジオメトリの表面上の各三角形のパッチは面と呼ばれます。 myGeometry.computeFaces()は、頂点間の距離に基づいて 各面を定義するために必要な計算を実行します。
ジオメトリの頂点は、myGeometry.vertices 配列にp5.Vectorオブジェクトとして 保存されています。ジオメトリの最初の頂点はmyGeometry.vertices[0]の p5.Vectorオブジェクト、 2番目の頂点はmyGeometry.vertices[1]、3番目の頂点は myGeometry.vertices[2]、というようになっています。
myGeometry.computeFaces()を呼び出すと、 myGeometry.faces配列に 各面を形成する頂点をリストする3要素の配列が追加されます。例えば、 長方形から作られたジオメトリは2つの面を持ちます(長方形は2つの三角形を 結合して作られるため)。長方形のmyGeometry.facesは 2次元配列[[0, 1, 2], [2, 1, 3]]になります。最初の面、 myGeometry.faces[0]は配列[0, 1, 2]です。これは myGeometry.vertices[0]、myGeometry.vertices[1]、 myGeometry.vertices[2]を接続して形成されるためです。2番目の面、 myGeometry.faces[1]は配列[2, 1, 3]です。これは myGeometry.vertices[2]、myGeometry.vertices[1]、 myGeometry.vertices[3]を接続して形成されるためです。
注意:myGeometry.computeFaces()は、ジオメトリが4つ以上の頂点を 持つ場合にのみ機能します。
ジオメトリ上の各頂点の法線ベクトルを計算します。
すべての3D形状は、頂点と呼ばれる点の集合を接続して作られます。 ジオメトリの表面は、頂点を接続して三角形を作り、それらを縫い合わせて 形成されます。ジオメトリの表面上の各三角形のパッチは面と呼ばれます。 myGeometry.computeNormals()は、各面の向きを決めるために 必要な計算を実行します。向きは照明やその他の効果に重要です。
面の向きは、その法線ベクトルによって定義されます。法線ベクトルは 面から外向きに伸び、表面に垂直(法線)です。myGeometry.computeNormals()を 呼び出すと、まず各面の法線ベクトルが計算されます。次に、各頂点の法線ベクトルが、 その頂点を囲む面の法線ベクトルを平均化して計算されます。頂点の法線は myGeometry.vertexNormals配列に p5.Vectorオブジェクトとして保存されます。
最初のパラメータshadingTypeはオプションです。定数FLATを 渡すと、例えばmyGeometry.computeNormals(FLAT)のように、隣接する面に 共有する頂点の独自のコピーが提供されます。表面はフラットシェーディングで タイル状に表示されます。定数SMOOTHを渡すと、例えば myGeometry.computeNormals(SMOOTH)のように、隣接する面が共有する頂点を 再利用します。表面はスムースシェーディングでより滑らかに表示されます。 デフォルトでは、shadingTypeはFLATです。
2番目のパラメータoptionsもオプションです。roundToPrecision プロパティを持つオブジェクトが渡された場合、例えば myGeometry.computeNormals(SMOOTH, { roundToPrecision: 5 })のように、 計算に使用する小数点以下の桁数を設定します。デフォルトでは、 roundToPrecisionは3桁の小数点を使用します。