★Flash 3D【 Papervision3D 2.0 】情報交換★ (154レス)
★Flash 3D【 Papervision3D 2.0 】情報交換★ http://mevius.5ch.net/test/read.cgi/swf/1227434456/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
55: Now_loading...774KB [sage] 2009/03/21(土) 01:19:02 ID:fKmdslcf Planeはわかったので、次はCube。 頂点やら面情報を持ってるところはPlaneと同じ。頂点情報は共有してるかもしれないけど 今回のテーマ(ちゃんと解放したい)とは関係ないので読んでない。 >>41氏が>>49で書いてるとおり、Cubeはdestoryを持っていて、 MaterialObject3Dを解放する処理が記述されていると。ただこれは後述するけど unregisterObject()っていうメソッドを呼んでるのであって、マテリアルの削除ではない。 CubeはMaterialObject3Dを複数個管理できるMaterialsListクラスでマテリアルを管理している。 Cubeのdestory()では、頂点やら面はほったらかし。 あ、そうだ、Planeでマテリアルにnullを指定した場合は自動的に MaterialObject3D.DEFAULTが使われて、そこではWireframeMaterialクラスっていうマテリアルが 生成される。色はランダム。余談ね。 MaterialsListクラスは、マテリアル情報をDictionaryで管理してる。 マテリアルのインスタンスと、そこから生成した名前(文字列)の両方。 removeMaterial()でMaterialsListから指定したマテリアルを削除できるようだ。 でだ、cubeのdestory()は、マテリアルリストに含まれるマテリアルに対して removeMaterial()は呼んでいなくて、unregisterObject()しているだけ。 これは、Cubeの生成時にマテリアルにCubeを登録( registerObject() )しているので そこから消してる。つまり、描画はCubeではなくてマテリアルがやってるってことだろうかね。 Cubeのdestory()は、なんでremoveMaterial()しないのかは、ここら辺が関わっていて、 例えば、2個のCubeがある時に、それぞれのCubeが同じマテリアルを使っていると、 1つめのCubeの削除と同時にマテリアルの削除はしちゃダメってことになる。もう片方のCubeで そのマテリアルが使えなくなるから。マテリアルとプリミティブは対等な関係じゃないので それぞれ管理しないさいと。 ここまで来たら、あとはサンプルコードを書いて実践したいけど、もう眠いわ。 http://mevius.5ch.net/test/read.cgi/swf/1227434456/55
56: Now_loading...774KB [sage] 2009/03/21(土) 09:15:42 ID:eC1+rvTO >>50-55 詳細な内容ありがとうございます! 自分はこれまでライブラリのソースを見たのも殆ど無かったようなレベルの人間なので、 内容をまだまだ把握しきれずといった状態ですが、興味深く読ませて頂いております 自分がPlaneは消えたと言っていたのも、完全には消えてなかったのかもしれないですね; 書いて頂いた内容を把握できるようになりますよう、自分なりに基本からじっくり調べて行こうと思います 恐縮ですがまた時間がありましたら、続きやサンプルコードも宜しくお願いします http://mevius.5ch.net/test/read.cgi/swf/1227434456/56
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.008s