geometry
ジオメトリコンポーネントは、エンティティの基本的な形状を提供します。primitive
プロパティは、一般的な形状を定義する。ジオメトリプリミティブは、コンピュータグラフィックスでは、還元できない基本的な形状のことである。マテリアルコンポーネントは一般的に、完全なメッシュを作成するために、形状と一緒に外観を提供するために定義される。
# Base Properties
全てのジオメトリ対応には次のプロパティが備わっています。
Property | 概要 | Default Value |
---|---|---|
primitive | ジオメトリの名前(例:以下に示すジオメトリの 1 つ)。ジオメトリの種類とその他のプロパティを決定する。 | box |
skipCache | キャッシュからの共有ジオメトリオブジェクトの取得を無効にする。 | false |
# Built-in Geometries
# box
ボックス
ボックスジオメトリは、ボックス(立方体だけでなく、あらゆる四角形)を定義します。
<a-entity geometry="primitive: box; width: 1; height: 1; depth: 1"></a-entity>
Property | Description | Default Value |
---|---|---|
width | X 軸上の辺の幅(単位:メートル)。 | 1 |
height | Y軸の辺の高さ(メートル)。 | 1 |
depth | Z軸の辺の深さ(メートル)。 | 1 |
segmentsDepth | Z軸上の分割面の数 | 1 |
segmentsHeight | Y軸上の分割面の数 | 1 |
segmentsWidth | X軸上の分割面の数 | 1 |
# circle
円
円形ジオメトリは、平らな2次元の円を作成します。これらは完全な円でも部分的な円(パックマンのような)でもかまいません。
注:円は平らなので、マテリアルコンポーネントに side: double
を指定しない場合、A-Frame は円の単一の面しかレンダリングしないことに注意してください。
<a-entity geometry="primitive: circle; radius: 1" material="side: double"></a-entity>
Property | 概要 | Default Value |
---|---|---|
radius | 円の半径(単位:m)。 | 1 |
segments | 円を構成する三角形の数、ピザの切り身のようなもの。セグメントの数が多いほど、円はより丸くなる。 | 32 |
thetaStart | 最初のセグメントの開始角度。部分円を定義するために使用することができる。 | 0 |
thetaLength | 中心角(度数)。デフォルトは360で、これは完全な円を作る。 | 360 |
# thetaLength
and thetaStart
Properties
度数で言うと、thetaStart
は円や弧の開始位置を、thetaLength
は円や弧の終了位置を定義する。もし、(
の形を作りたかったら、円を半分から始め、長さを円の半分と定義します。これを行うには、thetaStart: 180; thetaLength: 180
とします。また、)
の形を作りたい場合は、thetaStart: 0; thetaLength: 180
となります。
便利なケースは、スピナー効果を作成するためにthetaStart
をアニメーション化したり、視覚的なフィードバックのためにヒューズベースのカーソルでthetaLength
をアニメーション化したりすることです。
# cone
円錐
コーン形状は、上下の半径が異なる円柱状の形状です。
<a-entity geometry="primitive: cone; radiusBottom: 1; radiusTop: 0.1"></a-entity>
Property | 概要 | デフォルト値 |
---|---|---|
height | 円錐の高さ。 | 2 |
openEnded | 円錐の両端が開いているかどうか(true)、またはキャップされているかどうか(false). | false |
radiusBottom | 円錐の底端の半径。 | 1 |
radiusTop | 円錐の上端の半径。 | 1 |
segmentsRadial | 円錐の円周上の分割された面の数。 | 36 |
segmentsHeight | 円錐の高さに沿った面の列の数。 | 18 |
thetaStart | 開始角度を度単位で指定します。 | 0 |
thetaLength | 中心角(度)。 | 360 |
# cylinder
シリンダー
シリンダー幾何学は、コカ・コーラ™缶のような伝統的な意味での円柱を作成しますが、チューブや曲面などの形状も定義することができます。
高さと半径を使用して、基本的な円柱を作成することができます。
<a-entity geometry="primitive: cylinder; height: 3; radius: 2"></a-entity>
円筒をオープンエンドにすることで、円筒の上面と下面を取り除き、内部が見えるようにすることで、筒を作ることができます。そして、正しくレンダリングするためには、両面マテリアルが必要です。
<!-- Tube -->
<a-entity geometry="primitive: cylinder; openEnded: true" material="side: double"></a-entity>
円筒が一周しないようにthetaLength
で円弧を指定し、円筒をオープンエンドにし、マテリアルを両面にすることで曲面を作ることができる。
<!-- Curved surface -->
<a-entity geometry="primitive: cylinder; openEnded: true; thetaLength: 180"
material="side: double"></a-entity>
Property | Description | Default Value |
---|---|---|
radius | 円柱の半径。 | 1 |
height | シリンダーの高さ。 | 2 |
segmentsRadial | 円筒の円周上にある分割面の数。 | 36 |
segmentsHeight | 円柱の高さに沿った面の列の数。 | 18 |
openEnded | 円柱の両端が開いているかどうか(true)、またはキャップされているかどうか(false)。 | false |
thetaStart | 開始角度を度数で表す。 | 0 |
thetaLength | 中心角(度)。 | 360 |
半径方向の分割数(=辺)を変えることで、プリズム (opens new window)を作ることができるのです。例えば、六角形のプリズムを作るには
<!-- Hexagonal prism -->
<a-entity geometry="primitive: cylinder; segmentsRadial: 6"></a-entity>
# dodecahedron
正十二面体
正十二面体の形状は、12個の同じ大きさの面を持つ多角形となる。
<a-entity geometry="primitive: dodecahedron; radius: 2"></a-entity>
Property | 概要 | デフォルト値 |
---|---|---|
radius | 正十二面体の半径(単位:m)。 | 1 |
# octahedron
正八面体
正八面体の形状は、8つの正三角形の面を持つポリゴンを作ります。
<a-entity geometry="primitive: octahedron"></a-entity>
Property | Description | Default Value |
---|---|---|
radius | Radius (in meters) of the octahedron. | 1 |
# plane
平面
平面ジオメトリは、平らな面を作成します。平面は平らなので、マテリアルコンポーネントに side: double
を指定しない限り、A-Frame
は平面の1つの面だけをレンダリングします。
<a-entity geometry="primitive: plane; height: 10; width: 10" material="side: double"></a-entity>
Property | Description | Default Value |
---|---|---|
width | X 軸に沿った幅。 | 1 |
height | Y軸方向の高さ。 | 1 |
segmentsHeight | Y軸の分割面数 | 1 |
segmentsWidth | X軸上の分割された面の数 | 1 |
# ring
リング
リングジオメトリは、CD (opens new window)のような平らなリングを作成します。リングは平らなので、マテリアルコンポーネントに side: double
を指定しない限り、A-Frame
はリングの1つの面しかレンダリングしません。
<a-entity geometry="primitive: ring; radiusInner: 0.5; radiusOuter: 1"
material="side: double"></a-entity>
Property | 概要 | デフォルト値 |
---|---|---|
radiusInner | リングの内径穴の半径。 | 1 |
radiusOuter | リングの外周の半径。 | 1 |
segmentsTheta | セグメントの数。数値が大きいほど、リングはより丸くなる。 | 32 |
segmentsPhi | segmentsTheta で定義された各面内の三角形の数。 | 8 |
thetaStart | 開始角度を度単位で指定します。 | 0 |
thetaLength | 中心角(度)。 | 360 |
# sphere
球体
球体ジオメトリは、球体(ボールなど)を作成します。基本的な球体を作成することができます。
<a-entity geometry="primitive: sphere; radius: 2"></a-entity>
水平角と面の数を指定することで、多面体や抽象的な形状を作ることができます。
<a-entity geometry="primitive: sphere; segmentsWidth: 2; segmentsHeight: 8"></a-entity>
Property | 概要 | デフォルト値 |
---|---|---|
radius | 球体の半径。 | 1 |
segmentsWidth | 水平方向のセグメントの数。 | 18 |
segmentsHeight | 垂直方向のセグメントの数。 | 36 |
phiStart | 水平方向の開始角度。 | 0 |
phiLength | 水平方向の掃引角度の大きさ。 | 360 |
thetaStart | 垂直方向の開始角度。 | 0 |
thetaLength | 垂直方向の掃引角度の大きさ。 | 360 |
# tetrahedron
四面体
四面体のジオメトリは、4つの三角形の面を持つポリゴンを作成します。
<a-entity geometry="primitive: tetrahedron; radius: 2"></a-entity>
Property | Description | Default Value |
---|---|---|
radius | Radius (in meters) of the tetrahedron. | 1 |
# torus
トーラス
トーラスの形状は、ドーナツ型や曲がったチューブ型になります。
<!-- Half donut -->
<a-entity geometry="primitive: torus; radius: 2; radiusTubular: 0.5; arc: 180"></a-entity>
Property | 概要 | デフォルト値 |
---|---|---|
radius | トーラスの外周の半径。 | 1 |
radiusTubular | チューブの半径を指定します。 | 0.2 |
segmentsRadial | チューブ端の円周に沿ったセグメントの数。数値が大きいほど、チューブはより丸くなることを意味する。 | 36 |
segmentsTubular | 管面の円周に沿ったセグメントの数。数字が大きいほど、チューブはより丸くなる。 | 32 |
arc | 中心角 | 360 |
# torusKnot
トーラスノット(結び目)
トーラスノット(結び目)は、プレッツェルの形状を作ります。共素数の整数p
とq
の組はプレッツェルの特定の形状を定義します。もしp
とq
が共素数でなければ、結果はトーラスリンクになります。
<a-entity geometry="primitive: torusKnot; p: 3; q:7"></a-entity>
Property | Description | Default Value |
---|---|---|
radius | トーラスの結び目を含む半径。 | 1 |
radiusTubular | トーラス結びのチューブの半径。 | 0.2 |
segmentsRadial | チューブ端の円周に沿ったセグメントの数。数値が大きいほど、チューブはより丸くなります。 | 36 |
segmentsTubular | チューブ面の円周に沿ったセグメントの数。数字が大きいほど、チューブはより丸くなります。 | 32 |
p | 幾何学がその回転対称軸の周りを何回曲がるか。 | 2 |
q | トーラスの内部で幾何学が何回円を描くか。 | 3 |
# triangle
三角形
三角形のジオメトリは、平らな2次元の三角形を作成します。三角形は平面なので、マテリアルコンポーネントに side: double
を指定しない限り、A-Frame
は、vertexA
、vertexB
、vertexC
が画面上で反時計回りに並んでいる1つの面だけをレンダリングします。
<a-entity geometry="primitive: triangle" material="side: double"></a-entity>
Property | 概要 | デフォルト値 |
---|---|---|
vertexA | 3つの頂点のうち1つの座標 | 0 0.5 0 |
vertexB | 3つの頂点のうち1つの座標 | -0.5 -0.5 0 |
vertexC | 3つの頂点のうち1つの座標 | 0.5 -0.5 0 |
# カスタムジオメトリを登録する
独自のジオメトリを登録するには、AFRAME.registerGeometry
を使用して、THREE.Geometry
(opens new window)のインスタンスであるオブジェクトを作成します。A-Frameでは、このAPIを利用してすべての組み込みジオメトリを登録しています。以下は、A-Frameがbox
ジオメトリを登録する方法です。
AFRAME.registerGeometry('box', {
schema: {
depth: {default: 1, min: 0},
height: {default: 1, min: 0},
width: {default: 1, min: 0},
segmentsHeight: {default: 1, min: 1, max: 20, type: 'int'},
segmentsWidth: {default: 1, min: 1, max: 20, type: 'int'},
segmentsDepth: {default: 1, min: 1, max: 20, type: 'int'}
},
init: function (data) {
this.geometry = new THREE.BoxGeometry(data.width, data.height, data.depth);
}
});
コンポーネントの登録と同様に、名前、ジオメトリのプロパティを公開するスキーマ、ライフサイクルメソッドを提供します。次に、ジオメトリを作成し、init
ライフサイクルメソッドでthis.geometry
に設定する必要があります。
ジオメトリコンポーネントがそのプリミティブプロパティをカスタムジオメトリ名に設定すると、ジオメトリコンポーネントにカスタムジオメトリのプロパティを設定することができます。カスタムジオメトリを登録したとします。
AFRAME.registerGeometry('example', {
schema: {
vertices: {
default: ['-10 10 0', '-10 -10 0', '10 -10 0'],
}
},
init: function (data) {
var geometry = new THREE.Geometry();
geometry.vertices = data.vertices.map(function (vertex) {
var points = vertex.split(' ').map(function(x){return parseInt(x);});
return new THREE.Vector3(points[0], points[1], points[2]);
});
geometry.computeBoundingBox();
geometry.faces.push(new THREE.Face3(0, 1, 2));
geometry.mergeVertices();
geometry.computeFaceNormals();
geometry.computeVertexNormals();
this.geometry = geometry;
}
});
そして、そのカスタムジオメトリをHTMLで使用することができるのです。
<a-entity geometry="primitive: example; vertices: 1 1 -3, 3 1 -3, 2 2 -3"></a-entity>