Papervision3D の Objects(7) ~ Cube その3 ~
2007/04/15 19:11 - Papervision3D
前回の最後で、立方体の6面のうち天地の抜けた筒状の立体を作りたい場合には、拡張 Cube.as を使うことはできず、Plane を組み合わさざるを得ないようだ、という書き込みをしました。
それに対してコメント欄から、マテリアルリストに登録する ColorMaterial の透明度をゼロにすればいい、というご助言をいただきました。
言われてみれば、たしかにそうですよね。
これは良いことを教えていただいた、と早速スクリプトを組んでみましたが、プラットフォームが Flash 9 public ALPHA のせいなのか、うまくいかなかったのでその件に関して報告します。
Cube.as で face5、face6 に透明なマテリアルを登録したもの
{ doubleSided : false }
|
{ doubleSided : true }
|
見てのとおり、graphics.clear() が中途半端っぽい見栄えになっちゃってます。
じゃあ単に Plane を6枚組み合わせて立方体にしたときはどうなるのか試してみたのが、次のサンプルです。
Plane を組み合わせて立方体にしたもの
天地の2面に透明な Plane あり(Plane 6個で構成)
|
天地の2面に透明な Plane なし(Plane 4個で構成)
|
期待した動きは右のサンプルのようなものです。
しかし、左のサンプルを見てわかるように、透明なマテリアルを使うと、拡張 Cube のときと全く同じ状況になってしまいます。
どうもマテリアルオブジェクトを透明にすることには問題がありそうです。 面を Distort する過程でめちゃくちゃハックなことでもをやっているんでしょうか?
しかし Plane を4個しか使っていない右のサンプルでも、隣の面と接する辺のあたりで Zsort が変なときがあります。どうも { doubleSided : true } のせいっぽい。
究極理想型
そんなわけで試したみたのがコレ。
各面は、2個の { doubleSided : false } な Plane が背中合わせに貼りついています。
これならエッジも変じゃない。 でもちょっと手間ですねぇ。 それに Plane の数が倍だから速度的にも問題が生じそうな気がしないでもない。
- ソース( CubeTest3.zip 4.43 KB 注:拡張 Cube.as は同梱していません)