Papervision3D を弄ってみた(4) ~ Revision 62 ~
2007/04/03 22:40 - Papervision3D
先だってネット巡りをしていたら、とあるブログで Papervision3D に関する気になる記述を発見しました。
Ase や Collada を使わずに円柱や球体を作ってる。しかもプリミティブオブジェクトだって書いてある。
他のエントリーを見ると BitmapFileMaterial なる記述もある。
オイラの手持ちのパッケージにはそんなのありませんヨと思って、以前 as ファイルを入手した URL に行ってみたら 2007/03/25 付けでリビジョンがアップしているじゃあありませんか。
早速ダウンして、新しいオブジェクトを試してみました。
なるほど。立方体、円錐、円柱、球体が、それぞれ new Cube()、new Cone()、new Cylinder()、new Sphere() で作れるようになったワケですか。
こりゃ楽でいいや、と思ったのも束の間。いきなり円錐でつっかかりました。
new Cone() が円錐にならぬ! これは円柱だ!
で new Cylinder() を試してみると…… 円柱だ。 new Cone() と何ら変わるところがない!
こりゃ一体全体どうしたことじゃ、と Cone.as と Cylinder.as をテキストエディタでオープン。
Cone.as は Cylinder.as のサブクラスになってますね。 でもって Cone.as のコンストラクタ内の super() を見ると第6引数が 0 になっています。
super(
material,
radius,
height,
segmentsW,
segmentsH,
0,
initObject
);
長いので途中改行を入れました。
オリジナルは1行で記述してあります。
他の引数の変数名と併せて考えると、円錐の形成は円柱のどっちか一方の底面を「無」すなわち点にすることで実現しているようだ、ということが推測されます。
ここで Cylinder.as に目を移します。コンストラクタを見ると、第6引数は topRadius という変数名が付けられていました。
public function Cylinder(
material:MaterialObject3D=null,
radius:Number=100,
height:Number=100,
segmentsW:int=8,
segmentsH:int=6,
topRadius:Number=0,
initObject:Object=null
)
長いので途中改行を入れました。
オリジナルは1行で記述してあります。
"topRadius" で検索をかけると…… おや~。Cylinder.as の135 行目に奇妙な記述がありますよぉ?
if (topRadius==0) topRadius = radius;
もし topRadius が 0 だったら、topRadius には radius の値を代入? って Cone.as のコンストラクタの super() 全否定デスカ?!
Cylinder.as のこの行をコメントアウトしてパブリッシュすると、期待どおりの円錐形ができました。
これは一体どういうことなんでしょう。
Cylinder.as のコメントアウトし忘れ?
Cone.as に設計変更があったけどそれを反映してないものを公開した?
それとも実は new Cone() で円柱ができるのが正しい状態?
どなたか PV3D のメーリングリストに入っていたり、あるいは別方面からでも、何らかの情報をお持ちでしたらご教示いただけると幸いです。