note.x

[Away3D] Mesh / WireMesh

Away3Dのプリミティブ形状(要:FlashPlayer9)

地味なとこばっか調べてたらメゲてきたので表示系いってみる。
away3d.primitivesパッケージにひとまとめで収録されてるクラス郡を使うことで、プリミティブ形状を作れる。プリミティブ形状は大きく「Mesh」と「WireMesh」の2種類に分類される。

Mesh
PV3Dで言うところのTriangleMesh3Dに相当。△ポリゴン(Face)で構成される形状データの基本クラス。面を持つ形状は全てこのクラスを継承してる模様。Mesh系に分類されるプリミティブは以下。

  • Cone
  • Cube
  • Cylinder
  • GeodesicSphere
  • Plane
  • RegularPolygon
  • Sphere
  • Torus
  • Triangle

PV3Dよりも豊富。Torus、GeodesicSphereが標準提供されてますな。RegularPolygonは、半径と角度と分割数指定すると扇型〜円を△ポリ組み合わせで生成してくれる。DirectXのTriangleFanみたいなもんかと。Meshを継承してるものとしてこの他に、SeaTurtle、LogoCube、Skybox6、Skyboxっていうクラスも収録されてる。けどこれってAway3Dのデモ用クラスだよなぁ。Meshを使って形状定義する上でのサンプルとしては凄く参考になるけど、実用性はほとんど無いですな。

あと、現行リビジョン(Rev.497)のtrunkにあるTriangle.asは、コンストラクタに下記の記述が無い。バグかと。

buildTriangle(edge, yUp);

WireMesh
PV3Dで言うところのLines3Dに相当。こっちは面を持たず、代わりにSegmentという線分で頂点を結んだワイヤーフレーム形状のためのクラス。マテリアルのワイヤーフレームとは別物。WireMesh系に分類されるプリミティブは以下。

  • GridPlane
  • LineSegment
  • WireCircle
  • WireCone
  • WireCube
  • WireCylinder
  • WirePlane
  • WireSphere
  • WireTorus

これは地味だけど便利。Lines3D使えばPV3Dにも簡単に移植出来ると思う。GridPlaneと、WirePlaneは同じものと考えてよさそうだけど、一応両方リストアップしてみた。

クラスの継承は下記のような感じになってる。

BaseMashクラスが、「頂点」を持つものの基本クラス。その上のObject3Dは、「原点」を持ち、sceneに配置可能なもの全ての基本クラスで、PV3DのDisplayObject3Dに相当。カメラやライト、パーティクル、Scene3D自体もObject3Dを継承したObjectContainer3Dを継承してる。試してないけど、scene内にsceneを定義できるのかもしれない。

ここらへん、若干違いはあるけど基本的な構造はPV3Dと似てるのでそれほど戸惑わないし、メッシュの制御に関してはAway3Dのほうが自由度高いかも。

あと、特殊なプリミティブとしてTridentってのがある。これはX,Y,Zの座標軸を表示するもので、PV3DのUCSに相当。scene内にオブジェクトが無いと表示されないという奇妙な仕様。デバッグとか以外じゃあんまり使わないかと。


Trackback URL : http://blog.r3c7.net/as3-software-rendering/186/trackback/

COMMENTS

  1. Peter Kapelyan - 2008.05.03 10:20:38

    Amazing demo

  2. Peter Kapelyan - 2008.05.03 10:22:22

    please try to put all objects in one ObjectContainer3D

    myObjectContainer3D.ownCanvas=true

    thank you

Leave a Reply