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桁の小数点を使用します。