リファレンス p5.Geometry

p5.Geometry

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])

パラメーター

detailX
Integer:

x軸に沿った頂点の数。

detailY
Integer:

y軸に沿った頂点の数。

callback
Function:

ジオメトリが作成された後に呼び出される関数。

フィールド

vertices

ジオメトリの頂点を含む配列。

ジオメトリの頂点は、myGeometry.vertices配列に p5.Vectorオブジェクトとして 保存されています。ジオメトリの最初の頂点はmyGeometry.vertices[0]p5.Vectorオブジェクト、 2番目の頂点はmyGeometry.vertices[1]、3番目の頂点は myGeometry.vertices[2]、というようになっています。

vertexNormals

ジオメトリの頂点に垂直なベクトルを含む配列。

面の向きは、その法線ベクトルによって定義されます。法線ベクトルは 面から外向きに伸び、表面に垂直(法線)です。myGeometry.computeNormals()を 呼び出すと、まず各面の法線ベクトルが計算されます。次に、各頂点の法線ベクトルが、 その頂点を囲む面の法線ベクトルを平均化して計算されます。頂点の法線は myGeometry.vertexNormals配列にp5.Vector オブジェクトとして保存されます。

faces

ジオメトリの各面を形成する頂点をリストする配列。

すべての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]を接続して形成されるためです。

uvs

ジオメトリの各頂点のテクスチャ座標をリストする配列。

texture()が機能するためには、 ジオメトリはその表面上の点を長方形の画像(テクスチャとして使用される)の ピクセルにマッピングする方法が必要です。座標(x, y, z)のジオメトリの頂点は、 座標(u, v)のテクスチャ画像のピクセルにマッピングされます。

myGeometry.uvs配列は、ジオメトリに追加された順序で 各頂点の(u, v)座標を保存します。例えば、最初の頂点、 myGeometry.vertices[0](u, v)座標は myGeometry.uvs[0]myGeometry.uvs[1]に保存されます。

メソッド

calculateBoundingBox

ジオメトリを含む最小の箱の位置とサイズを計算します。

バウンディングボックスは、ジオメトリ全体を含む最小の直方体です。 各軸に沿ったボックスの最小座標と最大座標、およびサイズ(長さ)と オフセット(中心)によって定義されます。

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}
// }
clearColors

ジオメトリの内部カラーを削除します。

p5.Geometryオブジェクトは、頂点または形状全体に割り当てられた 「内部カラー」で作成できます。ジオメトリに内部カラーがある場合、 fill()は効果がありません。 myGeometry.clearColors()を呼び出すことで、 fill()関数がジオメトリに色を適用できるようになります。

saveObj

saveObj()関数は、p5.Geometryオブジェクトを Wavefront .objファイル形式で3Dモデルとしてエクスポートします。 これにより、p5.jsで作成した3D形状を他のソフトウェアで レンダリング、アニメーション、3Dプリントなどに使用できます。

エクスポートされた.objファイルには、p5.Geometryの面と頂点、 およびテクスチャ座標と法線(存在する場合)が含まれます。

saveStl

saveStl()関数は、p5.Geometryオブジェクトを STLステレオリソグラフィファイル形式で3Dモデルとしてエクスポートします。 これにより、p5.jsで作成した3D形状を他のソフトウェアで レンダリング、アニメーション、3Dプリントなどに使用できます。

エクスポートされた.stlファイルには、p5.Geometryの面、頂点、および法線が含まれます。

デフォルトでは、このメソッドはテキストベースの.stlファイルを保存します。 あるいは、2番目のパラメータとして{ binary: true }を渡すことで、 より小さいが人間が読みにくいバイナリ.stlファイルを保存することもできます。

flipU

ジオメトリのテクスチャ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] 
flipV

ジオメトリのテクスチャ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] 
computeFaces

頂点を使用してジオメトリの面を計算します。

すべての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つ以上の頂点を 持つ場合にのみ機能します。

computeNormals

ジオメトリ上の各頂点の法線ベクトルを計算します。

すべての3D形状は、頂点と呼ばれる点の集合を接続して作られます。 ジオメトリの表面は、頂点を接続して三角形を作り、それらを縫い合わせて 形成されます。ジオメトリの表面上の各三角形のパッチはと呼ばれます。 myGeometry.computeNormals()は、各面の向きを決めるために 必要な計算を実行します。向きは照明やその他の効果に重要です。

面の向きは、その法線ベクトルによって定義されます。法線ベクトルは 面から外向きに伸び、表面に垂直(法線)です。myGeometry.computeNormals()を 呼び出すと、まず各面の法線ベクトルが計算されます。次に、各頂点の法線ベクトルが、 その頂点を囲む面の法線ベクトルを平均化して計算されます。頂点の法線は myGeometry.vertexNormals配列に p5.Vectorオブジェクトとして保存されます。

最初のパラメータshadingTypeはオプションです。定数FLATを 渡すと、例えばmyGeometry.computeNormals(FLAT)のように、隣接する面に 共有する頂点の独自のコピーが提供されます。表面はフラットシェーディングで タイル状に表示されます。定数SMOOTHを渡すと、例えば myGeometry.computeNormals(SMOOTH)のように、隣接する面が共有する頂点を 再利用します。表面はスムースシェーディングでより滑らかに表示されます。 デフォルトでは、shadingTypeFLATです。

2番目のパラメータoptionsもオプションです。roundToPrecision プロパティを持つオブジェクトが渡された場合、例えば myGeometry.computeNormals(SMOOTH, { roundToPrecision: 5 })のように、 計算に使用する小数点以下の桁数を設定します。デフォルトでは、 roundToPrecisionは3桁の小数点を使用します。

normalize

ジオメトリの頂点を変換して、原点を中心とする100×100×100の箱に ぴったりと収まるようにします。

myGeometry.normalize()を呼び出すと、ジオメトリの頂点が 原点(0, 0, 0)を中心に移動します。次に、頂点を100×100×100の箱に 収まるようにスケーリングします。結果として、小さなジオメトリは 大きくなり、大きなジオメトリは小さくなります。

注意:myGeometry.normalize()は、setup() 関数内で呼び出された場合にのみ機能します。

Notice any errors or typos? Please let us know. Please feel free to edit src/webgl/p5.Geometry.js and open a pull request!

関連するリファレンス