Wonderfulで始めるAlternativa3D

初級編2.メッシュの構造を知る

簡単なモデルを作成するのでしたら、プリミティブで事足りるのですが、少し複雑なモデリングをするとなるとメッシュの構造を知らないといけません。
逆に、メッシュの構造を知る事で、ある程度のモデリングは出来るようになる・・・はずです。

Alternativa3Dで形ある物はとにかくメッシュ

Mesh(メッシュ)クラスは、Alternativa3Dオブジェクトを形成する為の基本クラスでObject3Dのサブクラスです。Plane、Box、Cone等のプリミティブは、このMeshのサブクラスとなります。

Meshの構造

Meshは以下の図のように、3つの要素で構成されています。

頂点「Vertexクラス」と頂点セット「Mesh.verticesプロパティ」

頂点・Vertexクラス

Vertexは、Meshの中で使われる頂点の為のクラスで、alternativa.core.パッケージの中にあります。
id(String)、座標x、y、z、coords(Point3D)のプロパティを持ち、それぞれ操作する事ができます。ただし、Mesh内の頂点Vertexは、読み込み専用のMesh.verticesプロパティで管理されているので、new Vertex()でインスタンスを作成する事はできません。(作成は可能ですが、Mesh.verticesに登録できないので使用できず、意味がありません)
Mesh内でVertexを作成したり削除したりする場合は、MeshクラスのメソッドcreateVertex()やremoveVertex()を使用します。

Mesh.verticesプロパティ:Mapクラス

Mesh.verticesプロパティは、Meshの中にあるVertexを管理する読み込み専用のプロパティです。
型はMapクラスでalternativa.types.パッケージの中にあります。
このMapクラスは、flash.utils.DictionaryのサブクラスでKeyにObjectを指定できるdirectoryの特性にadd(追加)やremove(削除)、toArray(配列化)、clone(複製)といった各種メソッドが追加された物です。

Mesh.verticesプロパティを使用した、頂点情報の取得

Vertexを操作する場合は、Mesh.verticesプロパティを利用し以下の方法で頂点情報にアクセスします。

			//Meshが持っているVertexの名前(id:String)を返す
			for (var id:String in box.vertices) {
				trace(id);
				dbg.appendText(id+"\n");
			}

			//Meshが持っているVertexを返す
			for each(var vertex:Vertex in box.vertices) {
				//Vertexクラスが戻ってくるので、直接操作できます。
				vertex.x+=500
				//traceやappendTextでは、Vertex.toStringメソッドにより、
				//Vertexの情報がStringで返ります。
				trace(vertex)
				dbg.appendText(vertex+"\n");
			}

	

なおMesh.verticesは
Mesh.vertices[ID]=Vertex
の形式になっていますので、Vertexのidが判っていれば、
box.vertex['2_1_2'].x=500
といった操作もできます。

また、MeshクラスのメソッドgetVertexById(id:Object)を使用しても同様の操作が出来ます。
box.getVertexById('2_1_2').x=500;

このページのコンテンツには、Adobe Flash Player の最新バージョンが必要です。

Adobe Flash Player を取得


.src

面「Faceクラス」と面情報セット「Mesh.facesプロパティ」

面・Faceクラス

Faceは、Meshの中で使われる、3つ以上のVertex(頂点)で構成された面の為のクラスで、alternativa.core.パッケージの中にあります。Vertex同様、読み込み専用のMesh.facesプロパティで管理されていますので、new Face()でインスタンスを作成する事はできません。(作成は可能ですが、Mesh.facesに登録できないので使用できず、意味がありません)
Mesh内でFaceを作成したり削除したりする場合は、MeshクラスのメソッドcreateFace()やremoveFace()を使用します。
なお、Faceは、Vertexで構成される為、位置情報x,y,zやcoordsプロパティを持ちません
変わりに、テクスチャー貼り付けの為のUV情報や法線のプロパティを持っています。
また、verticesプロパティが存在しますが、こちらはなぜかArray型(配列) で、keyはidではなく、uint連番(valueはVertex)ですので注意してください。

Mesh.facesプロパティ

Mesh.facesプロパティは、Meshの中にあるFaceを管理する為の読み込み専用のプロパティです。
vertices同様、Mapクラス型ですので、verticesと同じ方法で、各Faceにアクセスできます。
また、idが判っていればMeshクラスのメソッドgetFaceById(id:Object)を使用しても同様の操作が出来ます。

			//Meshが持っているFaceの名前(id:String)を返す
			for (var id:String in box.faces) {
				trace(id);
				dbg.appendText(id+",");
			}
			dbg.appendText("\n");
			//Meshが持っているVertexを返す
			for each(var face:Face in box.faces) {
				//Faceクラスが戻ってくるので、直接操作できます。
				trace(face,face.normal)
				//traceやappendTextでは、Face.toStringメソッドにより、
				//Faceの情報がStringで返ります。
				dbg.appendText(face+"\n");
			}

	

このページのコンテンツには、Adobe Flash Player の最新バージョンが必要です。

Adobe Flash Player を取得


.src

表面「Surfaceクラス」と表面情報セット「Mesh.surfacesプロパティ」と

表面・Surfaceクラス

Surfaceは、複数(単数)のFaceをグループ化し、Meshの1つの表面として取り扱う事ができるクラスで、alternativa.core.パッケージの中にあります。Vertex同様、読み込み専用のMesh.surfacesプロパティで管理されていますので、new Surface()でインスタンスを作成する事はできません。(作成は可能ですが、Mesh.surfacesに登録できないので使用できず、意味がありません)
Mesh内でSurfaceを作成したり削除したりする場合は、MeshクラスのメソッドcreateSurface()やremoveSurface()を使用します。
なお、Surfaceは、Faceをグループ化した物ですから、位置情報x,y,zやcoordsプロパティを持ちません
また、テクスチャー貼り付けの為のUV情報や法線のプロパティもありません。
代わりに、materialプロパティを持っています。
つまり、マテリアルは、このSurfaceに設定できるという事になっています。

Mesh.surfacesプロパティ

Mesh.surfacesプロパティは、Meshの中にあるSurfaceを管理する為の読み込み専用のプロパティです。
vertices同様、Mapクラス型ですので、verticesと同じ方法で、各Surfaceにアクセスできます。
また、idが判っていればMeshクラスのメソッドgetSurfaceById(id:Object)を使用しても同様の操作が出来ます。

			//Meshが持っているSurfaceの名前(id:String)を返す
			for (var id:String in box.surfaces) {
				trace(id);
				dbg.appendText(id+",");
			}
			dbg.appendText("\n");
			//Meshが持っているSurfaceを返す
			for each(var surface:Surface in box.surfaces) {
				//Surfaceクラスが戻ってくるので、直接操作できます。
				//traceやappendTextでは、Surface.toStringメソッドにより、
				//Surfaceの情報がStringで返ります。
				trace(surface)
				dbg.appendText(surface+"\n");
			}

	

このページのコンテンツには、Adobe Flash Player の最新バージョンが必要です。

Adobe Flash Player を取得


.src

 

Menu

入門編

初級編

7. Sprite3Dとは?

8. MovieClipMaterial

中級(インタラクティブ編)

1. インタラクティブなオブジェクト

2. 反応するモデルと反応しないモデル

3. サーフェースごとのマウスイベント

4. フェースごとのマウスイベント

中級(コントローラー編)

1. コントローラーとは?

2. コントローラーをカスタマイズ

3. 重力・衝突判定

4. LookAt

中級(カメラ&View編)

1. カメラZOOMとFOV

2. 複数のカメラとView

3. Viewのクリッピング

中級(メッシュ作成編)

1. 頂点を作成する

2. 面を作成する

3. 表面を作成する

4. UVを設定する

5. メッシュを作る

実践・応用編

1. 読み込んだ画像で絵本を作る

3. GoogleNexusOne

4. 3Dスロット

5. ルービックキューブ

実験編

1. 3dsの読み込みと操作

2. イラレで作ったpathを押し出す

3. 押し出しによるText3D

4. 自作のマテリアルクラスを作る

5. フラットシェーディングマテリアル

6. 衝突判定を利用した跳ね返り

7. Sprite3Dによるパーティクル表現

8. Sprite3Dでピクセルレンダー

9. Objectのグロー、ブラー