Flashの3DクラスライブラリのPapervision3D 2.0 GreateWhiteについて
情報交換しましょう。
いくつかの3Dライブラリがその覇を競い合っていますが、
あえてPapervision3Dを選択しているもの同士、語り合おうじゃ
ありませんか。
探検
★Flash 3D【 Papervision3D 2.0 】情報交換★
1Now_loading...774KB
2008/11/23(日) 19:00:56ID:C8LYNbVA3Now_loading...774KB
2008/11/23(日) 20:25:40ID:G9Mpep5D プロのアニメーターがゴロゴロいるフラ板では当然手書き派多数だよな
4Now_loading...774KB
2008/11/23(日) 22:52:52ID:bKhwYZCL 2.0 は betaのアーカイブが配布されてますし、
情報源が多いですからお勧めだと思います。
情報源が多いですからお勧めだと思います。
2008/11/27(木) 01:16:48ID:7njKJd4O
あえてPV3Dっていうか、本命じゃねーのかい
6Now_loading...774KB
2008/11/27(木) 12:21:43ID:Hb7TnPA5 planeのwidthを取得する方法がわからんです。
2008/11/27(木) 20:16:44ID:7njKJd4O
インスタンス化時にコンストラクタで渡してるだろうが
2008/12/02(火) 20:45:39ID:8KyMtJIK
最近、Papervision3Dを知ったんですがどのソースを使ったらいいのか分からない
http://svn1.cvsdude.com/osflash/papervision3d/as3/trunk/
http://papervision3d.googlecode.com/svn/trunk/as3/trunk/
この二つのリポジトリで内容が違ってるようですが…
またGoogle Codeで公開されているPapervision3D_2.0_beta_1_src.zipなんてのもありますが
http://code.google.com/p/papervision3d/downloads/list
どれを使えばいいんでしょうか…
http://svn1.cvsdude.com/osflash/papervision3d/as3/trunk/
http://papervision3d.googlecode.com/svn/trunk/as3/trunk/
この二つのリポジトリで内容が違ってるようですが…
またGoogle Codeで公開されているPapervision3D_2.0_beta_1_src.zipなんてのもありますが
http://code.google.com/p/papervision3d/downloads/list
どれを使えばいいんでしょうか…
2008/12/02(火) 21:55:34ID:d0iG3g57
一番下のやつ
2008/12/03(水) 07:04:53ID:sY+O2vMp
SVNで
http://papervision3d.googlecode.com/svn/
を設定&ダウンロードで最新版。
h ttp://www.bushclover-field.jp/papervision01/
ココとか参考にどうぞ。
しかし、3Dはムズイのう。。。
簡単なオブジェクトでもテクスチャひとつで、クオリティがまったく
変わってくるので、その辺の技術も上げねば・・。
Flash以前の問題だな。
http://papervision3d.googlecode.com/svn/
を設定&ダウンロードで最新版。
h ttp://www.bushclover-field.jp/papervision01/
ココとか参考にどうぞ。
しかし、3Dはムズイのう。。。
簡単なオブジェクトでもテクスチャひとつで、クオリティがまったく
変わってくるので、その辺の技術も上げねば・・。
Flash以前の問題だな。
2008/12/05(金) 11:03:21ID:gGsVcDvN
FP10用のPV3D使ってみた奴いるか
2008/12/05(金) 18:55:10ID:Rm4ERfkl
2008/12/05(金) 21:58:56ID:ZA7CQTbP
astroエンジンってことじゃないかなぁ。
速度上がるのかどうなのか
速度上がるのかどうなのか
2008/12/06(土) 09:59:04ID:xXLIN8Ur
GoogleAnalysticレポートでFlashPlayer10のユーザが
90%くらい行ってから検討だな
いままだ週間レポでも58%
CS4でたら増えてくるんだろうな
90%くらい行ってから検討だな
いままだ週間レポでも58%
CS4でたら増えてくるんだろうな
15Now_loading...774KB
2008/12/11(木) 17:45:25ID:uHEfl8yM 最新のpapervisionのHelloworldが見つからん…。
2008/12/12(金) 10:49:29ID:rkvw+Tx9
CS4ってDisplayObjectにプロパティzを持ってるけど、
PV3Dもそれように再設計されたの?
PV3Dもそれように再設計されたの?
2008/12/19(金) 02:18:17ID:UN4/Mqss
h ttp://electone.jp/product/stagea/internet/nmt/index.php
これはpapervisionですか?
これくらいだったら、簡単に作れるんですか?
これはpapervisionですか?
これくらいだったら、簡単に作れるんですか?
2008/12/21(日) 09:52:28ID:VaaM9Z4D
2008/12/24(水) 10:11:13ID:2A3eSOS8
>>16
DisplayObjectのzプロパティ等を使用して3D処理行うと
DisplayObject内に定義されているその他の3Dには関係ないプロパティやメソッドの分
パフォーマンスが落ちそうな気もするね
DisplayObjectのzプロパティ等を使用して3D処理行うと
DisplayObject内に定義されているその他の3Dには関係ないプロパティやメソッドの分
パフォーマンスが落ちそうな気もするね
2008/12/25(木) 07:13:25ID:22aRcKQa
3軸のための行列計算をしなくてすむなら、
パフォーマンス上がる気がするけどな。
CORRECT_Z_FILTER指定しないと多数のDAEファイルの
重なりがまともに出来ないけど、指定するとガクッと
パフォーマンスが落ちてしまう。
そのへんとかもzプロパティが使えれば、パフォーマンス
落とさずに出来るようなるかもしれん。
Roxikなみのパフォーマンスが出るようにしてくれればなぁ、
仕事で使うには、まだまだシンプルな事しか出来ん。
すげぇ他力本願だけど。
パフォーマンス上がる気がするけどな。
CORRECT_Z_FILTER指定しないと多数のDAEファイルの
重なりがまともに出来ないけど、指定するとガクッと
パフォーマンスが落ちてしまう。
そのへんとかもzプロパティが使えれば、パフォーマンス
落とさずに出来るようなるかもしれん。
Roxikなみのパフォーマンスが出るようにしてくれればなぁ、
仕事で使うには、まだまだシンプルな事しか出来ん。
すげぇ他力本願だけど。
2009/01/31(土) 23:48:06ID:AWs6FmF7
2009/01/31(土) 23:49:45ID:AWs6FmF7
と思ったら検索結果全部か
23sam
2009/02/20(金) 12:39:46ID:PkhEAH4Y 最新版のpaperVison3Dをクラスパスに通したあとで
3Dflaサンプルを落としてコンパイルしたところ
Vertex3Dへの参照があいまいです。とか
.asがありませんとなる原因は何が考えられますでしょうか?
3Dflaサンプルを落としてコンパイルしたところ
Vertex3Dへの参照があいまいです。とか
.asがありませんとなる原因は何が考えられますでしょうか?
2009/02/20(金) 12:57:04ID:n0EDCyUp
3Dflaサンプルってどこのヤツ?paperVisonのサイトの?
25sam
2009/02/20(金) 13:00:39ID:PkhEAH4Y http://www.thinkit.co.jp/article/91/3/2.html
ここなんですが、、、
基本的な使い方なのに情けない。
クラスパスは通ってるみたい、
バージョンの問題ですかね、、、
ここなんですが、、、
基本的な使い方なのに情けない。
クラスパスは通ってるみたい、
バージョンの問題ですかね、、、
2009/02/20(金) 14:07:48ID:n0EDCyUp
>>25
それは記事が古くて、今のPaperVisionのライブラリの
使い方とあわないからです。
PaperVisonの事を書いてる日本語Blogの大半は
古いPaperVisonのライブラリの頃のものなので、
サンプルもほとんど動きません。みんな飽きっぽいのな。
Googleとかで検索するから、PaperVison3d 2.0 をキーワードに
した方がいいです。
それは記事が古くて、今のPaperVisionのライブラリの
使い方とあわないからです。
PaperVisonの事を書いてる日本語Blogの大半は
古いPaperVisonのライブラリの頃のものなので、
サンプルもほとんど動きません。みんな飽きっぽいのな。
Googleとかで検索するから、PaperVison3d 2.0 をキーワードに
した方がいいです。
27sam
2009/02/20(金) 20:46:23ID:PkhEAH4Y ほんとうにありがとうございます。
こんなに親切に答えてもらって、、
たすかりました。
PaperVison3d 2.0 をキーワードに調べてみますね!
こんなに親切に答えてもらって、、
たすかりました。
PaperVison3d 2.0 をキーワードに調べてみますね!
28Now_loading...774KB
2009/02/27(金) 19:14:25ID:EvETe5ag Papervision3D_2.0.869を使用しています
papervision3dの基本的?なオブジェクト
var viewport:Viewport3D;
var scene:Scene3D;
var camera:Camera3D;
var renderer:BasicRenderEngine;
これらをちゃんと削除する方法はどうすれば良いのでしょうか?
viewportとrendererはdestroy()関数があったので実行し
sceneとcameraには=nullとしていますが、その後もなんだか軽くなったという実感がありません
確実な削除方法はどのようにすればよいのでしょうか、どうかお願いします
papervision3dの基本的?なオブジェクト
var viewport:Viewport3D;
var scene:Scene3D;
var camera:Camera3D;
var renderer:BasicRenderEngine;
これらをちゃんと削除する方法はどうすれば良いのでしょうか?
viewportとrendererはdestroy()関数があったので実行し
sceneとcameraには=nullとしていますが、その後もなんだか軽くなったという実感がありません
確実な削除方法はどのようにすればよいのでしょうか、どうかお願いします
2009/02/28(土) 13:01:54ID:JngG2oN+
オレはprimitiveなオブジェクトをちゃんとremoveChildする方法を知りたい。
getChild()が変だし、なんか残骸が残るんだよな。
getChild()が変だし、なんか残骸が残るんだよな。
2009/03/01(日) 22:00:34ID:XQobTzkD
2009/03/01(日) 22:38:55ID:wrUSrNmq
>>29
因みに残骸が残ってるかどうかを調べる方法ってどうするんでしょうか・・・
plane.marerial.destroy()として
trace(plane.marerial)をしても普通に指定したmaterialが表示されたりで
これも完全には消えてないって事なんでしょうかね
因みに残骸が残ってるかどうかを調べる方法ってどうするんでしょうか・・・
plane.marerial.destroy()として
trace(plane.marerial)をしても普通に指定したmaterialが表示されたりで
これも完全には消えてないって事なんでしょうかね
3229
2009/03/01(日) 22:55:27ID:1tXrW9E3 >>31
すみません、destroy()までしてませんでした、が、removeChild()してるのに
画面にCubeとかPlaneが残る場合があるんですよ。
removeChild()だけじゃメモリから消えないとしても、viewから消えないっていう
のはなんか変で。
Primitiveを自分で管理すればいいんでしょうが、viewで管理してる
同じ情報を持つっていうのもなんかもったいない話で。
すみません、destroy()までしてませんでした、が、removeChild()してるのに
画面にCubeとかPlaneが残る場合があるんですよ。
removeChild()だけじゃメモリから消えないとしても、viewから消えないっていう
のはなんか変で。
Primitiveを自分で管理すればいいんでしょうが、viewで管理してる
同じ情報を持つっていうのもなんかもったいない話で。
2009/03/01(日) 23:55:11ID:wrUSrNmq
>>32
お答え頂きありがとうございます
自分も他人のソースを元に手探りでやっている身でなんとも答えられず申し訳ないです
使用上、作ったPV3Dオブジェクトを作って消してを繰り返し行うので
しっかりとした使用後の削除方法を習得したいんですけどね・・・
お答え頂きありがとうございます
自分も他人のソースを元に手探りでやっている身でなんとも答えられず申し訳ないです
使用上、作ったPV3Dオブジェクトを作って消してを繰り返し行うので
しっかりとした使用後の削除方法を習得したいんですけどね・・・
34もこ
2009/03/08(日) 19:43:45ID:Ex6CNv5b PaperVision3D 2.0 を使っています。
3D を表示する画面の背景に、
特定のビットマップを表示することはできますか?
いろいろ調べたのですが、わからなくて。。。
3D を表示する画面の背景に、
特定のビットマップを表示することはできますか?
いろいろ調べたのですが、わからなくて。。。
2009/03/08(日) 20:41:56ID:OY1MrocS
そこは普通にFLASHっぽいことをするだけ。
FLASHだったらタイムラインに画像を置くとか。FLEX?とかなら画像を読み込んでaddChild()すればおk。
FLASHだったらタイムラインに画像を置くとか。FLEX?とかなら画像を読み込んでaddChild()すればおk。
2009/03/15(日) 13:51:40ID:hql46o8u
PaperVision3D 2.0のいい勉強方法はありますでしょうか。あまりサンプルなどが見つからず困っております。
2009/03/15(日) 13:53:31ID:DSoVRocV
2009/03/15(日) 14:35:55ID:hql46o8u
論理座標系とデバイス座標系、頂点とレンダリング、といった基本的なことくらいしかわかっておりません。
1.7のサンプルは出回っているので、1.7と2.0の変更点などまとまっているものでもあれば少しは学習できますでしょうか。。。
1.7のサンプルは出回っているので、1.7と2.0の変更点などまとまっているものでもあれば少しは学習できますでしょうか。。。
2009/03/15(日) 15:25:23ID:DSoVRocV
オレがPaperVison使い始めた頃にあれこれ情報探したけど、
1.7->2.0移行ガイドみたいな情報はみたことないかな。
少なくとも日本語のサイトでは。
てか、かなり変わってるから、もう1.7の事は忘れた方がいい。
まず、Googleで
PaperVision 3D 2.0
で検索してBlogとかからサンプルソースを
コピペ実行出来るようになるっていうのが第一段階。
サンプルもFLEXとFLASHで違うとかあるんで注意。
そしたら、一行ずつ、サンプルソースが何をやってるのか読み解く。
そこまでいったら、あとは、PaperVisonのDocs/index.htmlをざっとみて
どういうメソッドがあるのか把握する。
この辺、3Dに関する基礎知識がないとどうにもならないんで、そういうのは
DirectXとかの3Dプログラミング本の基礎の部分とかを参考に。
これで大体、やりたい事を実現する方法が見えてくる。
見えてこない場合は、基礎知識不足だと思う。数学とか3Dとかプログラミングの。
1.7->2.0移行ガイドみたいな情報はみたことないかな。
少なくとも日本語のサイトでは。
てか、かなり変わってるから、もう1.7の事は忘れた方がいい。
まず、Googleで
PaperVision 3D 2.0
で検索してBlogとかからサンプルソースを
コピペ実行出来るようになるっていうのが第一段階。
サンプルもFLEXとFLASHで違うとかあるんで注意。
そしたら、一行ずつ、サンプルソースが何をやってるのか読み解く。
そこまでいったら、あとは、PaperVisonのDocs/index.htmlをざっとみて
どういうメソッドがあるのか把握する。
この辺、3Dに関する基礎知識がないとどうにもならないんで、そういうのは
DirectXとかの3Dプログラミング本の基礎の部分とかを参考に。
これで大体、やりたい事を実現する方法が見えてくる。
見えてこない場合は、基礎知識不足だと思う。数学とか3Dとかプログラミングの。
2009/03/15(日) 15:30:59ID:hql46o8u
41Now_loading...774KB
2009/03/18(水) 22:05:47ID:60IhFvSD Cubeを綺麗に消去するにはどうすればいいのでしょうか・・・
Cubeを作る→トゥイーン→消す処理を繰り返す処理をしたいのですが、使用メモリを調べているとずっと増え続け、動作もどんどん重くなります
実際に使用したいマテリアルはFlatShadeMaterialなのですが、やはり重くなり、テストでColorMaterialでやってみていますが症状は変わりません
マテリアルセット
var material:ColorMaterial = new ColorMaterial( 0x00FF00 );
var materialsList:MaterialsList = new MaterialsList( { all:material } );
var cube:Cube = new Cube( materialsList, 300, 300, 300, 1, 1, 1 );
scene.addChild( cube );
トゥイーン後Cubeを削除
Tweener.addTween( cube, { z:-500, time:2, onComplete:tweenEnd, onCompleteParams:[ cube ] } );
public function tweenEnd( cube:DisplayObject3D ):void {
var materialsList:MaterialsList = cube.materials as MaterialsList;
var allMaterial:MaterialObject3D = materialsList.removeMaterialByName("all") as MaterialObject3D;
allMaterial.destroy();
cube.material.destroy();
scene.removeChild( cube );
cube = null;
}
因みにエラーは発生していません、訂正が必要な箇所があればどうかご指摘下さい、お願い致します。
Cubeを作る→トゥイーン→消す処理を繰り返す処理をしたいのですが、使用メモリを調べているとずっと増え続け、動作もどんどん重くなります
実際に使用したいマテリアルはFlatShadeMaterialなのですが、やはり重くなり、テストでColorMaterialでやってみていますが症状は変わりません
マテリアルセット
var material:ColorMaterial = new ColorMaterial( 0x00FF00 );
var materialsList:MaterialsList = new MaterialsList( { all:material } );
var cube:Cube = new Cube( materialsList, 300, 300, 300, 1, 1, 1 );
scene.addChild( cube );
トゥイーン後Cubeを削除
Tweener.addTween( cube, { z:-500, time:2, onComplete:tweenEnd, onCompleteParams:[ cube ] } );
public function tweenEnd( cube:DisplayObject3D ):void {
var materialsList:MaterialsList = cube.materials as MaterialsList;
var allMaterial:MaterialObject3D = materialsList.removeMaterialByName("all") as MaterialObject3D;
allMaterial.destroy();
cube.material.destroy();
scene.removeChild( cube );
cube = null;
}
因みにエラーは発生していません、訂正が必要な箇所があればどうかご指摘下さい、お願い致します。
2009/03/19(木) 00:40:06ID:4npumRp1
Cubeを作るたびにメモリ使用量が増えてんの?
4341
2009/03/19(木) 09:11:40ID:o2U5xvy9 >>42
返信ありがとうございます
SWFProfilerというのを使って、グラフ状でメモリの使用状況を見ながら、>>41のCube作成→トゥイーン→消去を繰り返させているのですが
プレビュー中は使用量のグラフがずっと上がりっぱなしの状態でした、使用メモリ値は最後に見た時には15MBなどと出ていました
試しに同じ作業をPlaneでやってみた所、FlatShadeMaterialでもColorMaterialでもグラフは上下し、プレビュー中の使用メモリ値は7MB-9MBの間で動き続けました
なので原因は、MaterialsListの消し方が問題なのかなと思い色々と試しているのですが、使用メモリが下がる事が無いんです・・・
返信ありがとうございます
SWFProfilerというのを使って、グラフ状でメモリの使用状況を見ながら、>>41のCube作成→トゥイーン→消去を繰り返させているのですが
プレビュー中は使用量のグラフがずっと上がりっぱなしの状態でした、使用メモリ値は最後に見た時には15MBなどと出ていました
試しに同じ作業をPlaneでやってみた所、FlatShadeMaterialでもColorMaterialでもグラフは上下し、プレビュー中の使用メモリ値は7MB-9MBの間で動き続けました
なので原因は、MaterialsListの消し方が問題なのかなと思い色々と試しているのですが、使用メモリが下がる事が無いんです・・・
2009/03/19(木) 21:31:58ID:sOf7DsqH
マテリアルをつけてない素のCubeを出したり消したりだとどーよ?
2009/03/19(木) 23:09:06ID:4npumRp1
Cubeはマテリアルnullにはできないだろ
2009/03/19(木) 23:12:54ID:4npumRp1
Cubeはマテリアルnullにはできないだろ
4741
2009/03/20(金) 00:18:12ID:nPh+mKh4 >>44
返信がりがとうございます
自分の説明不足でしたが、Cube作成→トゥイーン→消去は、作った一つのCubeを出したり消したりのサイクルではなく、
新たにCubeを作り出してトゥイーン後破壊し、また新たに別のcubeを作りトゥイーンさせ破壊・・・というTimerを使った繰り返しの処理なんです
var timer:Timer = new Timer( 600 );
timer.addEventListener( TimerEvent.TIMER, timerFunc );
timer.start();
function timerFunc():void{
createCube();
}
function createCube():void {
Cubeを作成して、>>41のTweenerイベント処理、終了後にtweenEndへ
}
function tweenEnd( cube:DisplayObject3D ):void {
>>41のCubeを削除の処理
}
マテリアル未使用Cubeは作り方がわかりませんでした・・・
そもそものCubeを綺麗に削除する方法のセオリーって無いのでしょうか
返信がりがとうございます
自分の説明不足でしたが、Cube作成→トゥイーン→消去は、作った一つのCubeを出したり消したりのサイクルではなく、
新たにCubeを作り出してトゥイーン後破壊し、また新たに別のcubeを作りトゥイーンさせ破壊・・・というTimerを使った繰り返しの処理なんです
var timer:Timer = new Timer( 600 );
timer.addEventListener( TimerEvent.TIMER, timerFunc );
timer.start();
function timerFunc():void{
createCube();
}
function createCube():void {
Cubeを作成して、>>41のTweenerイベント処理、終了後にtweenEndへ
}
function tweenEnd( cube:DisplayObject3D ):void {
>>41のCubeを削除の処理
}
マテリアル未使用Cubeは作り方がわかりませんでした・・・
そもそものCubeを綺麗に削除する方法のセオリーって無いのでしょうか
2009/03/20(金) 16:54:19ID:L59OuUmI
cube.materials;
cube.material.destroy();
cubeにmaterial,materialsなんてプロパティなくね?
ttp://docs.pv3d.org/
cube.material.destroy();
cubeにmaterial,materialsなんてプロパティなくね?
ttp://docs.pv3d.org/
4941
2009/03/20(金) 18:39:07ID:nPh+mKh4 >>48
Public PropertiesのShow Inherited Public Propertiesをクリックすると出てきます
調べてみたらCubeにdestroy()がある事を知って、実行してみましたが使用メモリは相変わらずで・・・
ちょっとソースのCube.asクラスのdestroy()関数にtraceを入れてみましたが、
public function destroy():void
{
trace("test1");
var mat:MaterialObject3D;
for each(mat in materials){
trace("test2");
mat.unregisterObject(this);
}
}
cube.destroy()でtrace("test1")は実行されましたが、trace("test2")は反応がありませんでした
cube.materialsをtraceすると表示されるので6回ループが起こると思うんですが・・・
mat.unregisterObject(this)の処理の意味もよくわからずでどんどん混乱して来ましたorz
Public PropertiesのShow Inherited Public Propertiesをクリックすると出てきます
調べてみたらCubeにdestroy()がある事を知って、実行してみましたが使用メモリは相変わらずで・・・
ちょっとソースのCube.asクラスのdestroy()関数にtraceを入れてみましたが、
public function destroy():void
{
trace("test1");
var mat:MaterialObject3D;
for each(mat in materials){
trace("test2");
mat.unregisterObject(this);
}
}
cube.destroy()でtrace("test1")は実行されましたが、trace("test2")は反応がありませんでした
cube.materialsをtraceすると表示されるので6回ループが起こると思うんですが・・・
mat.unregisterObject(this)の処理の意味もよくわからずでどんどん混乱して来ましたorz
5044
2009/03/20(金) 20:37:00ID:lXny2v1Y >>45 すまん、寝ぼけてた
オレも前からプリミティブの解放はよくわかってなかったんで調べ中。
まずは単純なplaneで
plane = new plane();
myScene.addChild(plane);
って感じで10個登録してから、これを解放してみる。
mySceneに含まれているプリミティブの個数を調べようと
myScene.numChildrenすると、DisplayObjectContainer3DのnumChildrenが呼ばれて
10って値が返ってくる。ここまではいいんだけど、myScene.childrenを使ってプリミティブの
名前を取り出そうとすると、nullが5個表示されてしまって、残りの5個が正しく名前が表示される。
でも、myScene.childrenList()を呼ぶとちゃーんと10個分の名前が表示される。
この2つの処理の違いは、DisplayObjectContainer3D.asをみると、
なんだけど、ちゃんと10個表示される方はこれ↓
name = name || child.name || String( child.id );
this._children[ child ] = name;
でもって、最初の5個がnullになっちゃう方は
this._childrenByName[ name ] = child;
っていう方法で格納してるみたいだ。
_childrenと_childrenByNameは共にDictionaryクラス。_childrenByNameが妙な事になってるから
これを返すmyScene.childrenを使ってremoveChildしようとしても5個はnullだから
解放されないわけだ、ダメじゃん。
続く、かもしれない。
オレも前からプリミティブの解放はよくわかってなかったんで調べ中。
まずは単純なplaneで
plane = new plane();
myScene.addChild(plane);
って感じで10個登録してから、これを解放してみる。
mySceneに含まれているプリミティブの個数を調べようと
myScene.numChildrenすると、DisplayObjectContainer3DのnumChildrenが呼ばれて
10って値が返ってくる。ここまではいいんだけど、myScene.childrenを使ってプリミティブの
名前を取り出そうとすると、nullが5個表示されてしまって、残りの5個が正しく名前が表示される。
でも、myScene.childrenList()を呼ぶとちゃーんと10個分の名前が表示される。
この2つの処理の違いは、DisplayObjectContainer3D.asをみると、
なんだけど、ちゃんと10個表示される方はこれ↓
name = name || child.name || String( child.id );
this._children[ child ] = name;
でもって、最初の5個がnullになっちゃう方は
this._childrenByName[ name ] = child;
っていう方法で格納してるみたいだ。
_childrenと_childrenByNameは共にDictionaryクラス。_childrenByNameが妙な事になってるから
これを返すmyScene.childrenを使ってremoveChildしようとしても5個はnullだから
解放されないわけだ、ダメじゃん。
続く、かもしれない。
2009/03/20(金) 21:24:05ID:lXny2v1Y
>>50続き
いきなり間違えた。
_childrenByNameに罪はなかった。_childrenByNameはDictionaryなのに配列と
同じようにアクセスしてた。
Scene3D、突き詰めるとDisplayObjectContainer3Dに含まれているプリミティブを
取得するには、DisplayObjectContainer3D.childrenを使うとDictionaryとして取得できる。
keyは
name = name || child.name || String( child.id );
として設定される。valueはプリミティブっぽい。
DisplayObjectContainer3Dに含まれるプリミティブを全消しするには
var childList:Object = myScene.children;
for (var key:String in childList) {
var value = childList[key];
myScene.removeChild(value);
}
ってな感じでいいのかなと。
removeChild()の引数はDisplayObject3D。
removeChildByName()ってのもあって、これはDisplayObject3Dの名前?(toString()したもの?)で
削除できるけど、処理内容をみると重そう。
これらの処理でScene3dからプリミティブは消えるけど、プリミティブ自体が
消えた訳じゃないはず。
SWFProfilerで観察してるとGCが効いて増減しつつも、徐々にメモリ使用量が増えてくし。
続く、かもしれない
いきなり間違えた。
_childrenByNameに罪はなかった。_childrenByNameはDictionaryなのに配列と
同じようにアクセスしてた。
Scene3D、突き詰めるとDisplayObjectContainer3Dに含まれているプリミティブを
取得するには、DisplayObjectContainer3D.childrenを使うとDictionaryとして取得できる。
keyは
name = name || child.name || String( child.id );
として設定される。valueはプリミティブっぽい。
DisplayObjectContainer3Dに含まれるプリミティブを全消しするには
var childList:Object = myScene.children;
for (var key:String in childList) {
var value = childList[key];
myScene.removeChild(value);
}
ってな感じでいいのかなと。
removeChild()の引数はDisplayObject3D。
removeChildByName()ってのもあって、これはDisplayObject3Dの名前?(toString()したもの?)で
削除できるけど、処理内容をみると重そう。
これらの処理でScene3dからプリミティブは消えるけど、プリミティブ自体が
消えた訳じゃないはず。
SWFProfilerで観察してるとGCが効いて増減しつつも、徐々にメモリ使用量が増えてくし。
続く、かもしれない
2009/03/20(金) 21:57:30ID:lXny2v1Y
>>51続き
厳密には、DisplayObjectContainer3D.asでは、
protected var _childrenByName :Object;
private var _childrenTotal :int;
と宣言されていて、その後、
this._children = new Dictionary( false );
this._childrenByName = new Dictionary( true );
となっている。
あと、
Scene3D → SceneObject3D → DisplayObjectContainer3D
という関係で、Scene3Dに対するremoveChild()はDisplayObjectContainer3Dの
removeChild()ではなく、SceneObject3DのremoveChild()が呼ばれている。
そこでは、自身が管理しているDisplayObject3Dを削除した後に、親クラスの
DisplayObjectContainer3DのremoveChild()を呼んでいると。
なんで、DisplayObject3DでもDisplayObject3Dを管理しているのかはよくわからない。
GCの関係?
なかなかプリミティブ自体の削除までたどり着かないなぁ。
厳密には、DisplayObjectContainer3D.asでは、
protected var _childrenByName :Object;
private var _childrenTotal :int;
と宣言されていて、その後、
this._children = new Dictionary( false );
this._childrenByName = new Dictionary( true );
となっている。
あと、
Scene3D → SceneObject3D → DisplayObjectContainer3D
という関係で、Scene3Dに対するremoveChild()はDisplayObjectContainer3Dの
removeChild()ではなく、SceneObject3DのremoveChild()が呼ばれている。
そこでは、自身が管理しているDisplayObject3Dを削除した後に、親クラスの
DisplayObjectContainer3DのremoveChild()を呼んでいると。
なんで、DisplayObject3DでもDisplayObject3Dを管理しているのかはよくわからない。
GCの関係?
なかなかプリミティブ自体の削除までたどり着かないなぁ。
2009/03/20(金) 23:50:40ID:lXny2v1Y
Plane→TriangleMesh3D→Vertices3D→DisplayObject3D→DisplayObjectContainer3Dと順に辿っていく。
[Plane]
引数のmaterialは親クラスに渡してて、生成物は
Vertex3D()とTriangle3D()なんだけど、それは
this.geometryという、親クラスが持ってるらしい変数に突っ込んでるだけ。
一時変数だけのクラス。
[TriangleMesh3D]
親クラスのmaterial変数に入れてる。
あとprivateメンバ変数が3つあって、うち2つがArray、もう一はRenderTriangleクラス。
これらがイマイチ不明。デストラクタに該当するものがないっぽい。
[Vertices3D]
一時変数だけのクラス。ただ、boundingBoxとかを生成してreturnで返してるから、
それを受け取った側で解放してなきゃアウト。
[DisplayObject3D]
なかなか読み応えあるね。yawとかpitchとかlookAtはここで定義してあるんだ。
いろいろなprivate, publicな変数がある。
親クラスのDisplayObjectContainerにaddChildしている箇所はここなんだけど、
removeChildに該当する処理はないと。DisplayObject3DにDisplayObject3Dを
入れた場合は、当然、自分でremoveChildしなさいと。それから、
[TODO: If you add a child object that already has a different display object container as a parent,
the object is removed from the child list of the other display object container.]
って書いてある。
デストラクタに該当するものがないっぽいけど、new Plane()とかで生成された頂点や面の情報は
Plane自体を切り離せばDisplayObject3Dも分離されるみたいだから、あとはGCにがんばってもらえば
なんとかなるのかもしれない。(ホントか?)
マテリアルを貼り付けていないPlaneは、newしたらそれを参照しているトコを全て切り離せばGCまかせっぽい。
[Plane]
引数のmaterialは親クラスに渡してて、生成物は
Vertex3D()とTriangle3D()なんだけど、それは
this.geometryという、親クラスが持ってるらしい変数に突っ込んでるだけ。
一時変数だけのクラス。
[TriangleMesh3D]
親クラスのmaterial変数に入れてる。
あとprivateメンバ変数が3つあって、うち2つがArray、もう一はRenderTriangleクラス。
これらがイマイチ不明。デストラクタに該当するものがないっぽい。
[Vertices3D]
一時変数だけのクラス。ただ、boundingBoxとかを生成してreturnで返してるから、
それを受け取った側で解放してなきゃアウト。
[DisplayObject3D]
なかなか読み応えあるね。yawとかpitchとかlookAtはここで定義してあるんだ。
いろいろなprivate, publicな変数がある。
親クラスのDisplayObjectContainerにaddChildしている箇所はここなんだけど、
removeChildに該当する処理はないと。DisplayObject3DにDisplayObject3Dを
入れた場合は、当然、自分でremoveChildしなさいと。それから、
[TODO: If you add a child object that already has a different display object container as a parent,
the object is removed from the child list of the other display object container.]
って書いてある。
デストラクタに該当するものがないっぽいけど、new Plane()とかで生成された頂点や面の情報は
Plane自体を切り離せばDisplayObject3Dも分離されるみたいだから、あとはGCにがんばってもらえば
なんとかなるのかもしれない。(ホントか?)
マテリアルを貼り付けていないPlaneは、newしたらそれを参照しているトコを全て切り離せばGCまかせっぽい。
2009/03/21(土) 00:27:54ID:fKmdslcf
次は、planeにmaterialを貼り付けて、それを解放する場合。
(planeに貼ったMaterialObject3Dをどこで持ってるのかイマイチわからんのだけれど)
単純そうなColorMaterialから辿ってみる。
ColorMaterial→TriangleMaterial→MaterialObject3D
[ColorMaterial]
カラーコードすら保持していないけど、指定色で三角形を書いてるのはここ。
beginFill()、moveTo()、lineTo()、endFill()とか。
[TriangleMaterial]
こいつはつなぎなので無視。
[MaterialObject3D]
色コードとかBitmapはここで持ってる。
複数個のマテリアルを管理できるっぽい?
マテリアルの管理は、MaterialManagerクラスがしてるみたい。MaterialManagerクラスは
シングルトンみたいなもんでSWF全体で1つしかない。
MaterialObject3Dには、destroy()がある。といっても
objects = null;
bitmap = null;
MaterialManager.unRegisterMaterial(this);
これだけ。大雑把すぐる。
ColorMaterialクラス自身はdestroy()メソッドを持ってないけど、ちゃんと呼ばないとダメかな。
ついでにBitmapMaterialも読んでみたけど、こいつはdestroy()を持っていて、
一通りnull代入してるし、bitmapに対してはdispose()してるし、親のMaterialObject3Dの
destroy()も呼んでる。
BitmapFileMaterialクラスははBitmapMaterialクラスの派生クラスなので同上。
(planeに貼ったMaterialObject3Dをどこで持ってるのかイマイチわからんのだけれど)
単純そうなColorMaterialから辿ってみる。
ColorMaterial→TriangleMaterial→MaterialObject3D
[ColorMaterial]
カラーコードすら保持していないけど、指定色で三角形を書いてるのはここ。
beginFill()、moveTo()、lineTo()、endFill()とか。
[TriangleMaterial]
こいつはつなぎなので無視。
[MaterialObject3D]
色コードとかBitmapはここで持ってる。
複数個のマテリアルを管理できるっぽい?
マテリアルの管理は、MaterialManagerクラスがしてるみたい。MaterialManagerクラスは
シングルトンみたいなもんでSWF全体で1つしかない。
MaterialObject3Dには、destroy()がある。といっても
objects = null;
bitmap = null;
MaterialManager.unRegisterMaterial(this);
これだけ。大雑把すぐる。
ColorMaterialクラス自身はdestroy()メソッドを持ってないけど、ちゃんと呼ばないとダメかな。
ついでにBitmapMaterialも読んでみたけど、こいつはdestroy()を持っていて、
一通りnull代入してるし、bitmapに対してはdispose()してるし、親のMaterialObject3Dの
destroy()も呼んでる。
BitmapFileMaterialクラスははBitmapMaterialクラスの派生クラスなので同上。
2009/03/21(土) 01:19:02ID: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で
そのマテリアルが使えなくなるから。マテリアルとプリミティブは対等な関係じゃないので
それぞれ管理しないさいと。
ここまで来たら、あとはサンプルコードを書いて実践したいけど、もう眠いわ。
頂点やら面情報を持ってるところは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で
そのマテリアルが使えなくなるから。マテリアルとプリミティブは対等な関係じゃないので
それぞれ管理しないさいと。
ここまで来たら、あとはサンプルコードを書いて実践したいけど、もう眠いわ。
2009/03/21(土) 09:15:42ID:eC1+rvTO
>>50-55
詳細な内容ありがとうございます!
自分はこれまでライブラリのソースを見たのも殆ど無かったようなレベルの人間なので、
内容をまだまだ把握しきれずといった状態ですが、興味深く読ませて頂いております
自分がPlaneは消えたと言っていたのも、完全には消えてなかったのかもしれないですね;
書いて頂いた内容を把握できるようになりますよう、自分なりに基本からじっくり調べて行こうと思います
恐縮ですがまた時間がありましたら、続きやサンプルコードも宜しくお願いします
詳細な内容ありがとうございます!
自分はこれまでライブラリのソースを見たのも殆ど無かったようなレベルの人間なので、
内容をまだまだ把握しきれずといった状態ですが、興味深く読ませて頂いております
自分がPlaneは消えたと言っていたのも、完全には消えてなかったのかもしれないですね;
書いて頂いた内容を把握できるようになりますよう、自分なりに基本からじっくり調べて行こうと思います
恐縮ですがまた時間がありましたら、続きやサンプルコードも宜しくお願いします
5744
2009/03/21(土) 10:06:09ID:fKmdslcf2009/03/21(土) 12:01:02ID:eC1+rvTO
>>57
ColorMaterialを使用してPlaneで41の処理をやってみました、ただ41の削除方法はCube用で今回のtweenEndでは
public function tweenEnd( plane:DisplayObject3D ):void {
plane.material.destroy();
scene.removeChild( plane );
plane = null;
とやっています、あと
this.addEventListener( Event.ENTER_FRAME, ent );
public function ent(event:Event):void {
trace( SWFProfiler.currentMem );
}
を追加して見てみました
遅れましたが、使用しているpapervision3dは2_0_869です
数分放置してのtraceの結果は、開始7.12で、グラフが下がった瞬間の経過数値は
8.428・7.612・7.608、8.632・7.648・7.644、8.672・7.668・7.656、8.688・7.668・7.66 でした
ただ、flaファイルでフレームレートを30fpxにしていますが
SWFProfilerの表示ではCurrent Fps 12 Average Fps 17ぐらいになっていました、トゥイーンの動きはガクガクです
ColorMaterialを使用してPlaneで41の処理をやってみました、ただ41の削除方法はCube用で今回のtweenEndでは
public function tweenEnd( plane:DisplayObject3D ):void {
plane.material.destroy();
scene.removeChild( plane );
plane = null;
とやっています、あと
this.addEventListener( Event.ENTER_FRAME, ent );
public function ent(event:Event):void {
trace( SWFProfiler.currentMem );
}
を追加して見てみました
遅れましたが、使用しているpapervision3dは2_0_869です
数分放置してのtraceの結果は、開始7.12で、グラフが下がった瞬間の経過数値は
8.428・7.612・7.608、8.632・7.648・7.644、8.672・7.668・7.656、8.688・7.668・7.66 でした
ただ、flaファイルでフレームレートを30fpxにしていますが
SWFProfilerの表示ではCurrent Fps 12 Average Fps 17ぐらいになっていました、トゥイーンの動きはガクガクです
5944
2009/03/21(土) 12:02:14ID:fKmdslcf あと、>>49の
> var mat:MaterialObject3D;
> for each(mat in materials){
> trace("test2");
> mat.unregisterObject(this);
これは機能してないね。
materialsはDictionaryを持つクラスだけど、クラスに対してfor eachしても
Dictionary内のデータが取り出せるわけじゃないので。
かといってmaterialsはDictionaryのメンバ変数を返すような仕組みがないので
どうにもならない。なので自前で削除処理をするしかないかも。
ただ、Dictionaryで持ってる情報は使われなくなったらGCで勝手に削除されるらしいんで
あまり気にしなくてもいいのかも。
>6回ループが起こると思うんですが・・・
1つのマテリアルにallという名前をつけているのであって、6面分6個のマテリアルを
生成するわけではないですから、1回のループです。
1個のマテリアルに対して、front,back...と名前をつけて貼り付けた場合は6個になるんじゃないかな。
> var mat:MaterialObject3D;
> for each(mat in materials){
> trace("test2");
> mat.unregisterObject(this);
これは機能してないね。
materialsはDictionaryを持つクラスだけど、クラスに対してfor eachしても
Dictionary内のデータが取り出せるわけじゃないので。
かといってmaterialsはDictionaryのメンバ変数を返すような仕組みがないので
どうにもならない。なので自前で削除処理をするしかないかも。
ただ、Dictionaryで持ってる情報は使われなくなったらGCで勝手に削除されるらしいんで
あまり気にしなくてもいいのかも。
>6回ループが起こると思うんですが・・・
1つのマテリアルにallという名前をつけているのであって、6面分6個のマテリアルを
生成するわけではないですから、1回のループです。
1個のマテリアルに対して、front,back...と名前をつけて貼り付けた場合は6個になるんじゃないかな。
2009/03/21(土) 22:20:07ID:fKmdslcf
2009/03/22(日) 00:53:50ID:dxRIEIMT
>>60
またまた説明不足ですみません・・・
>>58でやっているのは、>>47の処理のCubeをPlaneに変えた処理で、一枚のPlaneでは無く
Planeを作ってトゥイーンさせ消しPlaneを作ってトゥイーンさせ消しというサイクルを繰り返していました
表示が遅くなった原因はズラズラとtrace結果が表示された事・・・だとも思うんですが
あと、FlatShadeMaterialを6面に設定したCubeの、トゥイーン後の消去用のfunction tweenEndで
var frontMaterial:MaterialObject3D = cube.materials.removeMaterialByName("front") as MaterialObject3D;
frontMaterial.destroy();
var backMaterial:MaterialObject3D = cube.materials.removeMaterialByName("back") as MaterialObject3D;
backMaterial.destroy();
-right・left・top・bottomのマテリアルにも上記同様処理-
この後に
cube.destroy();
trace( cube.materials, "-materials" );とした所
「 -materials」と表示され6面マテリアルは消えている?ようでした
しかし、trace( cube.material, "-material" );としてみた結果
「WireframeMaterial - color:15253353.379891736 alpha:1 -material」
と出ました、cube.material.destroy();をしてみても結果は変わりません
WireframeMaterialは生成・設定など全くやってはいないのですが、上記Planeの説明に書かれていた事と関係があるのでしょうか?
FlatShadeMaterialをColorMaterialにして動かしてみても結果は同じです
結局色々やってみましたが、このWireframeMaterialがどうしようも無く未だ解決できていませんorz
またまた説明不足ですみません・・・
>>58でやっているのは、>>47の処理のCubeをPlaneに変えた処理で、一枚のPlaneでは無く
Planeを作ってトゥイーンさせ消しPlaneを作ってトゥイーンさせ消しというサイクルを繰り返していました
表示が遅くなった原因はズラズラとtrace結果が表示された事・・・だとも思うんですが
あと、FlatShadeMaterialを6面に設定したCubeの、トゥイーン後の消去用のfunction tweenEndで
var frontMaterial:MaterialObject3D = cube.materials.removeMaterialByName("front") as MaterialObject3D;
frontMaterial.destroy();
var backMaterial:MaterialObject3D = cube.materials.removeMaterialByName("back") as MaterialObject3D;
backMaterial.destroy();
-right・left・top・bottomのマテリアルにも上記同様処理-
この後に
cube.destroy();
trace( cube.materials, "-materials" );とした所
「 -materials」と表示され6面マテリアルは消えている?ようでした
しかし、trace( cube.material, "-material" );としてみた結果
「WireframeMaterial - color:15253353.379891736 alpha:1 -material」
と出ました、cube.material.destroy();をしてみても結果は変わりません
WireframeMaterialは生成・設定など全くやってはいないのですが、上記Planeの説明に書かれていた事と関係があるのでしょうか?
FlatShadeMaterialをColorMaterialにして動かしてみても結果は同じです
結局色々やってみましたが、このWireframeMaterialがどうしようも無く未だ解決できていませんorz
6244
2009/03/22(日) 11:00:50ID:PCij10Uc 最低限必要なだけのコードだけどCubeの生成と削除。削除はかなり手抜きだけど
これで10分ほど放置しても30fps。メモリは増減しつつ微妙に増えてるけど。
package {
import 略;
public class Main extends MovieClip {
public var viewport :Viewport3D;
public var scene :Scene3D;
public var camera :Camera3D;
public var renderer :BasicRenderEngine;
public function Main() {
SWFProfiler.init(stage, this);
init();
}
public function init():void {
init3D();
addEventListener( Event.ENTER_FRAME, loop );
var timer:Timer = new Timer( 600 );
timer.addEventListener( TimerEvent.TIMER, timerFunc );
timer.start();
}
public function timerFunc(e:TimerEvent):void {
var myCube:Cube = new Cube( new MaterialsList({all:new ColorMaterial(Math.random()*0x100)}), 20, 20, 20 );
myCube.x = Math.random()*200 - 100;
myCube.y = Math.random()*200 - 100;
myCube.z = Math.random()*200;
scene.addChild(myCube);
Tweener.addTween( myCube, { scale :2, time:2, onComplete:animEnd, onCompleteParams:[ myCube ] } );
}
これで10分ほど放置しても30fps。メモリは増減しつつ微妙に増えてるけど。
package {
import 略;
public class Main extends MovieClip {
public var viewport :Viewport3D;
public var scene :Scene3D;
public var camera :Camera3D;
public var renderer :BasicRenderEngine;
public function Main() {
SWFProfiler.init(stage, this);
init();
}
public function init():void {
init3D();
addEventListener( Event.ENTER_FRAME, loop );
var timer:Timer = new Timer( 600 );
timer.addEventListener( TimerEvent.TIMER, timerFunc );
timer.start();
}
public function timerFunc(e:TimerEvent):void {
var myCube:Cube = new Cube( new MaterialsList({all:new ColorMaterial(Math.random()*0x100)}), 20, 20, 20 );
myCube.x = Math.random()*200 - 100;
myCube.y = Math.random()*200 - 100;
myCube.z = Math.random()*200;
scene.addChild(myCube);
Tweener.addTween( myCube, { scale :2, time:2, onComplete:animEnd, onCompleteParams:[ myCube ] } );
}
6344
2009/03/22(日) 11:01:58ID:PCij10Uc public function animEnd(cube:Cube):void {
scene.removeChild(cube);
cube = null;
}
public function init3D():void {
viewport = new Viewport3D(0, 0, true, true);
addChild( viewport );
renderer = new BasicRenderEngine();
scene = new Scene3D();
camera = new Camera3D();
camera = new Camera3D();
camera.zoom = 100;
renderer.renderScene(scene, camera, viewport);
}
public function loop(event:Event):void {
renderer.renderScene(scene, camera, viewport);
}
}
}
FPSはCPUパワーによるけど、この程度の処理なら30fps出ると思う。
scene.removeChild(cube);
cube = null;
}
public function init3D():void {
viewport = new Viewport3D(0, 0, true, true);
addChild( viewport );
renderer = new BasicRenderEngine();
scene = new Scene3D();
camera = new Camera3D();
camera = new Camera3D();
camera.zoom = 100;
renderer.renderScene(scene, camera, viewport);
}
public function loop(event:Event):void {
renderer.renderScene(scene, camera, viewport);
}
}
}
FPSはCPUパワーによるけど、この程度の処理なら30fps出ると思う。
2009/03/22(日) 15:30:02ID:dxRIEIMT
>>62-63
サンプルコードありがとうございます
試してみた所、自分の環境でもグラフが上下し、CurrentFpsやAverageFpsも安定していたようでした
マテリアルをColorMaterialからFlatShadeMaterialに変えたりしても問題ありませんでした、どうもありがとうございます!
詳細な処理の関係性はまだよくわかってませんが、結局cube.destroy()やcube.material.destroy()等といった処理は必要なかったんですね
普通のスプライトを削除する時のような、基本的な方法で消えるというのは目から鱗でした
具体的な処理を理解せず、ドキュメントを見てdestroy()があるからと、それでもうう解決したような気になっていた自分が安直過ぎました・・・
paperviison3dのソースについての理解はなかなか出来てない状態ですが、そっちの方も理解できるよう調べていった方がいいですね
色々ととても勉強になりました、どうもありがとうございました
サンプルコードありがとうございます
試してみた所、自分の環境でもグラフが上下し、CurrentFpsやAverageFpsも安定していたようでした
マテリアルをColorMaterialからFlatShadeMaterialに変えたりしても問題ありませんでした、どうもありがとうございます!
詳細な処理の関係性はまだよくわかってませんが、結局cube.destroy()やcube.material.destroy()等といった処理は必要なかったんですね
普通のスプライトを削除する時のような、基本的な方法で消えるというのは目から鱗でした
具体的な処理を理解せず、ドキュメントを見てdestroy()があるからと、それでもうう解決したような気になっていた自分が安直過ぎました・・・
paperviison3dのソースについての理解はなかなか出来てない状態ですが、そっちの方も理解できるよう調べていった方がいいですね
色々ととても勉強になりました、どうもありがとうございました
6544
2009/03/22(日) 16:26:11ID:PCij10Uc や、厳密にはCubeとMaterialは削除をしっかりしないとダメだと思いますよ。
でも削除しなくてもメモリが増えっぱなしとかFPSが低下していくようなことには
ならないという意味でのサンプルです。
厳密な削除方法は結局、よくわからないけどね。(てかAS3の削除処理は面倒すぐる)
でも削除しなくてもメモリが増えっぱなしとかFPSが低下していくようなことには
ならないという意味でのサンプルです。
厳密な削除方法は結局、よくわからないけどね。(てかAS3の削除処理は面倒すぐる)
2009/03/22(日) 17:12:19ID:dxRIEIMT
>>65
作るflashが、papervision3dで3D描画してで処理が終わる(3Dオブジェクトを消す必要の無い)flashbネらまだしも
それらの作った3Dオブジェクトを消して、その後も別の演出など続けていくflashの場合は気をつけた方がいいんでしょうね
flashのオープニングでCubeをぼこぼこ作って消してというのも、後々の動作に負担が残っていくという恐れも考えて考え直そうかと思ってます
作るflashが、papervision3dで3D描画してで処理が終わる(3Dオブジェクトを消す必要の無い)flashbネらまだしも
それらの作った3Dオブジェクトを消して、その後も別の演出など続けていくflashの場合は気をつけた方がいいんでしょうね
flashのオープニングでCubeをぼこぼこ作って消してというのも、後々の動作に負担が残っていくという恐れも考えて考え直そうかと思ってます
67もこもこ
2009/04/24(金) 22:41:59ID:2HIFEIcY var material:BitmapMaterial = new BitmapMaterial();
material.bitmap = ...;
var mesh:TriangleMesh3D = new TriangleMesh3D(material, new Array(), new Array(), null);
var vertexList:Array = mesh.geometry.vertices;
var faceList:Array = mesh.geometry.faces;
... vertexList に頂点リストを追加 ...
... faceList に頂点3つとマテリアルと UV座標3つ追加 ...
mesh.geometry.ready = true;
という感じで、独自にポリゴンを作ってみたのですが、テクスチャがうまく表示されません。
テクスチャ画像がポリゴンに「貼りついて」いるのではなく、
ポリゴンを移動するとテクスチャ画像が背景画像のように動かないんです。
どういう原因が考えられますか?
material.bitmap = ...;
var mesh:TriangleMesh3D = new TriangleMesh3D(material, new Array(), new Array(), null);
var vertexList:Array = mesh.geometry.vertices;
var faceList:Array = mesh.geometry.faces;
... vertexList に頂点リストを追加 ...
... faceList に頂点3つとマテリアルと UV座標3つ追加 ...
mesh.geometry.ready = true;
という感じで、独自にポリゴンを作ってみたのですが、テクスチャがうまく表示されません。
テクスチャ画像がポリゴンに「貼りついて」いるのではなく、
ポリゴンを移動するとテクスチャ画像が背景画像のように動かないんです。
どういう原因が考えられますか?
68Now_loading...774KB
2009/04/25(土) 21:40:59ID:3n28H4wZ WinXP-Pro(SP2),FlashCS3(AS3.0)です。
昨日からPapervisionを使い始めた者です。Cubeの面にJPG(sky.jpg)を付けて回転させる
ムービーを作るため、
ttp://www.thinkit.co.jp/article/91/3/2.html
ttp://oshiete1.goo.ne.jp/qa4622897.html
を参考に製作しました。
※thinkitのサンプル自体ではエンジンが古いという理由でエラーになります。また、昨日DL
したバージョンは Papervision3D 2.0.0 (March 12th, 2009) です。
CS3でコンパイルしたところ、マテリアルによるCubeの生成部分
var material= new BitmapFileMaterial("sky.jpg");
material.smooth = true;
cube = new Cube(material, cubeSize, cubeSize, cubeSize, segment, segment);
で下記のエラーが出ます。
INFO: BitmapFileMaterial: Loading bitmap from sky.jpg
TypeError: Error #1034: 強制型変換に失敗しました。org.papervision3d.materials::BitmapFileMaterial@11ff0a1
を org.papervision3d.materials.utils.MaterialsList に変換できません。
「MaterialsListに変換すべき」と解釈しましたが、この方法が分かりません。
どう変更すべきでしょうか?
昨日からPapervisionを使い始めた者です。Cubeの面にJPG(sky.jpg)を付けて回転させる
ムービーを作るため、
ttp://www.thinkit.co.jp/article/91/3/2.html
ttp://oshiete1.goo.ne.jp/qa4622897.html
を参考に製作しました。
※thinkitのサンプル自体ではエンジンが古いという理由でエラーになります。また、昨日DL
したバージョンは Papervision3D 2.0.0 (March 12th, 2009) です。
CS3でコンパイルしたところ、マテリアルによるCubeの生成部分
var material= new BitmapFileMaterial("sky.jpg");
material.smooth = true;
cube = new Cube(material, cubeSize, cubeSize, cubeSize, segment, segment);
で下記のエラーが出ます。
INFO: BitmapFileMaterial: Loading bitmap from sky.jpg
TypeError: Error #1034: 強制型変換に失敗しました。org.papervision3d.materials::BitmapFileMaterial@11ff0a1
を org.papervision3d.materials.utils.MaterialsList に変換できません。
「MaterialsListに変換すべき」と解釈しましたが、この方法が分かりません。
どう変更すべきでしょうか?
6968
2009/04/25(土) 22:06:53ID:3n28H4wZ (自己レス)
解決しました。
MaterialsListで各面のJPGを指定すればOKでした。
解決しました。
MaterialsListで各面のJPGを指定すればOKでした。
70Now_loading...774KB
2009/04/27(月) 01:23:51ID:G21mapzz OS:WinXP-Pro,Mem:3GB,FlashCS3-Pro(Player9.0,AS3.0)
MC内にPapervision3Dで生成した円柱(つまり入れ子)のStageに対する座標で質問です。
親となる灰色MCはステージ原点(0,0)に配置してあり、通常ならここに子のMCが出来るの
ですが、当方のASでは http://swfup.info/view.php/10676.swf のようにStage中央に出来ます。
円柱のASは灰色MCにクラス:MC_Cylinder_02でリンケージしてあるだけで、特にこの中に
座標を指定する記述はありません。
一応、ビューポート(Stageと同じ大きさ)の引数で細工を試みましたが上手くいきません。
var viewport:Viewport3D = new Viewport3D(600, 400);
親MCの座標と円柱の中心を一致させるにはどうしたら良いでしょうか?
MC内にPapervision3Dで生成した円柱(つまり入れ子)のStageに対する座標で質問です。
親となる灰色MCはステージ原点(0,0)に配置してあり、通常ならここに子のMCが出来るの
ですが、当方のASでは http://swfup.info/view.php/10676.swf のようにStage中央に出来ます。
円柱のASは灰色MCにクラス:MC_Cylinder_02でリンケージしてあるだけで、特にこの中に
座標を指定する記述はありません。
一応、ビューポート(Stageと同じ大きさ)の引数で細工を試みましたが上手くいきません。
var viewport:Viewport3D = new Viewport3D(600, 400);
親MCの座標と円柱の中心を一致させるにはどうしたら良いでしょうか?
2009/04/27(月) 08:02:18ID:uYVYhnVI
viewPortの座標(x,y)を大きさの半分だけ移動すればいいんじゃない?
2009/04/27(月) 17:12:34ID:nijeAG0B
>>71
どうも。
準備としてMC内の円柱のX座標(ローカル座標)を取得しようとしましたが、
取得出来ませんでした。
今回のASでは、var myCylinder:Cylinder = new Cylinder (); で生成した円柱を
3D空間sceneに scene.addChild (myCylinder); で付加しているのですが、
trace (myCylinder.x+", "+myCylinder.parent+", "+this.parent); をしても何も得られません。
(属性情報が得られません) なお、thisはsceneです。
myCylinder.xが得られない以上、動かすことが出来ない状態です。
どうしたら良いでしょうか?
どうも。
準備としてMC内の円柱のX座標(ローカル座標)を取得しようとしましたが、
取得出来ませんでした。
今回のASでは、var myCylinder:Cylinder = new Cylinder (); で生成した円柱を
3D空間sceneに scene.addChild (myCylinder); で付加しているのですが、
trace (myCylinder.x+", "+myCylinder.parent+", "+this.parent); をしても何も得られません。
(属性情報が得られません) なお、thisはsceneです。
myCylinder.xが得られない以上、動かすことが出来ない状態です。
どうしたら良いでしょうか?
7370
2009/04/29(水) 14:14:26ID:R/ejAGpn すいません。
72をお願いします。
72をお願いします。
74Now_loading...774KB
2009/05/09(土) 19:23:21ID:hhXoFdx3 Papervision3D(2.0)をWin-XP(FlashCS3)で使っています。
「プロとして恥ずかしくないActionScript 3.0の大原則 CS3/CS4対応版」(MDN)のp068に
あるパノラマ3Dビューアー(本ではPV1.7仕様)を参考に円柱の中心にカメラがある状態を
再現したいのですがうまくいきません。
円柱の円周に空模様のJPGが貼り付けて、カメラの設定はコンストラクタで
camera.x = camera.y = camera.z = 0;//円柱の原点に設置
camera.focus = 0.5*cylinderW/Math.pow(2, 0.5);// 視野角を90度にして、フォーカス長を円柱半径の1/√2にした
camera.zoom=1;
としたところ、
http://uproda11.2ch-library.com/1761286Zd/11176128.jpg のように斜めの画像が出ました。
(目的の動作をすればJPGをアイマスクの様な形状で出る筈なのですが・・・)
この場合どうすべきでしょうか?
「プロとして恥ずかしくないActionScript 3.0の大原則 CS3/CS4対応版」(MDN)のp068に
あるパノラマ3Dビューアー(本ではPV1.7仕様)を参考に円柱の中心にカメラがある状態を
再現したいのですがうまくいきません。
円柱の円周に空模様のJPGが貼り付けて、カメラの設定はコンストラクタで
camera.x = camera.y = camera.z = 0;//円柱の原点に設置
camera.focus = 0.5*cylinderW/Math.pow(2, 0.5);// 視野角を90度にして、フォーカス長を円柱半径の1/√2にした
camera.zoom=1;
としたところ、
http://uproda11.2ch-library.com/1761286Zd/11176128.jpg のように斜めの画像が出ました。
(目的の動作をすればJPGをアイマスクの様な形状で出る筈なのですが・・・)
この場合どうすべきでしょうか?
75Now_loading...774KB
2009/05/13(水) 16:15:47ID:ntK3i4sF ビジネスソフトが多数あります
http://www.hhyyhh22.co.nr
http://www.hhyyhh22.co.nr
2009/06/19(金) 23:48:16ID:QuJhaIyO
Papervision3D最近元気ないね
朽ち果てた?
朽ち果てた?
2009/06/20(土) 01:11:51ID:ZmhOiM2+
以前ほどには話題になってないのは、結局、この程度の3Dグラフィックは
ずいぶん昔の技術だからね。Amigaとかの頃か?
あと出来る人は自分のBlogでやるようになったから、ぶっちゃけ、もうここみたいな
掲示板にみんなが集まってわいわいやるような機会が失われたんだと思う。良くも悪くもね。
ずいぶん昔の技術だからね。Amigaとかの頃か?
あと出来る人は自分のBlogでやるようになったから、ぶっちゃけ、もうここみたいな
掲示板にみんなが集まってわいわいやるような機会が失われたんだと思う。良くも悪くもね。
78Now_loading...774KB
2009/06/20(土) 23:57:33ID:Ghm0/zr+ cs4使えよ…非浪費人よ
79Now_loading...774KB
2009/07/02(木) 10:22:10ID:nZvzgbjN 良く検証してないんだけど、moviematerialとassetmaterialって同じじゃね?
2009/07/02(木) 12:18:31ID:SUseTFtW
>>79
MovieAssetMaterialのこと?
MovieAssetMaterialのこと?
81Now_loading...774KB
2009/07/06(月) 11:11:28ID:RSO087tv >79ごめん間違えてた
2009/07/20(月) 18:48:53ID:cWddSN1M
もう更新なさそうだな
83Now_loading...774KB
2009/08/06(木) 19:52:20ID:ryej/EKX なんだ、相方はもうとっくに脱いでるのか
84Now_loading...774KB
2009/08/06(木) 23:32:37ID:a+8bfnyE 3Dゲーマーのようなヘビーユーザーには大したインパクトがない。
ネットブック使ってるライトユーザーは重すぎて見る気も失せる。
openGL利用出来れば3DFlashもいいが今度はビデオカードの相性が出る。
まだ時期尚早なんじゃね?
ネットブック使ってるライトユーザーは重すぎて見る気も失せる。
openGL利用出来れば3DFlashもいいが今度はビデオカードの相性が出る。
まだ時期尚早なんじゃね?
2009/08/07(金) 01:04:51ID:mIaYfYXe
JavaScriptで3D描画するものをgoogleが開発してるからそっちに注目だな
2009/08/09(日) 14:41:42ID:GSuG8FRY
O3Dか
2009/08/10(月) 11:57:21ID:LDRuPOtH
5分程度のプリレンダムービーも一からモデリングして作るなら大変だ。
見栄えのいいリアルタイム3Dじゃ個人での開発無理かも試練。
見栄えのいいリアルタイム3Dじゃ個人での開発無理かも試練。
88Now_loading...774KB
2009/09/02(水) 14:02:46ID:uOcHiIPm あ、あぁデポジットね、あれ噛めば噛むほど味がでるよね。
2009/09/03(木) 21:12:11ID:Je/qeo1r
これってどうやってるかわかる人いますか?
ttp://www.kanfoo.jp/contents.php?cID=379
ttp://www.kanfoo.jp/contents.php?cID=379
2009/09/07(月) 13:26:51ID:vRi9lKhX
モデリングソフトから出力したDAEファイルを読み込み
91Now_loading...774KB
2009/09/08(火) 12:48:24ID:qvNhE+Hu impressやITMEDIAはスクエニに気を遣って記事に出来ないんだろ?
92ケンケン
2009/09/08(火) 17:42:01ID:csddhJov ver2.0でMovieAssetMaterialでムービークリップをオブジェクトに貼付けたのですが、
ムービークリップ内でフレーム移動したいと思うのですが、可能ですか?
ムービークリップ内でフレーム移動したいと思うのですが、可能ですか?
2009/09/08(火) 18:30:43ID:hOfqzUoP
可能。3つ目の引数をtrueにすればOK
MovieMaterialでインスタンスを割り当てれば
GogoAndPlayとかStopとかも制御できるよ
MovieMaterialでインスタンスを割り当てれば
GogoAndPlayとかStopとかも制御できるよ
94ケンケン
2009/09/08(火) 19:31:46ID:csddhJov Now_loading...774KBさんできるんですか!?
引数を3つ目をtrueにしてみていたんですが、ダメでした。
もし、サンプルなどあれば教えてください。
特にgotoAndPlayなどフレームアクションがきかなくて。
引数を3つ目をtrueにしてみていたんですが、ダメでした。
もし、サンプルなどあれば教えてください。
特にgotoAndPlayなどフレームアクションがきかなくて。
95ケンケン
2009/09/08(火) 19:42:16ID:csddhJov 追記で。
例えば、
割り当てたマテリアルのインスタンスに指示する場合、
どのように指示してあげれば良いんでしょうか。
例えば、
割り当てたマテリアルのインスタンスに指示する場合、
どのように指示してあげれば良いんでしょうか。
96ケンケン
2009/09/08(火) 19:51:07ID:csddhJov さらに、ボタンをクリックしたら、
マテリアル内の14フレームに飛ぶという事は
可能だったりするのでしょうか。
マテリアル内の14フレームに飛ぶという事は
可能だったりするのでしょうか。
2009/09/08(火) 20:35:21ID:qvNhE+Hu
>>95-96
そのマテリアルのMCに対してgotoAndPlay()すればいい。
そのマテリアルのMCに対してgotoAndPlay()すればいい。
98ケンケン
2009/09/09(水) 00:12:04ID:RUKHMBuu やっぱり出来ませんでした。
http://blog.r3c7.net/?p=176
など見つけてみましたが。
そのマテリアルをどのようにすれば操作が出来るのですか?
マテリアルの指定は以下のようにしています。
slidBraid=[{id:"MClip1",x:0,y:0,z:0}]
tempObj2=slidBraid[0];
var braidName:String=tempObj2.id;
var material2:MovieAssetMaterial=new MovieAssetMaterial(braidName,true,true,true);
配列で制御していて、オブジェクトのidに名前を代入しています。
どのようにして制御すればよろしいでしょうか?
http://blog.r3c7.net/?p=176
など見つけてみましたが。
そのマテリアルをどのようにすれば操作が出来るのですか?
マテリアルの指定は以下のようにしています。
slidBraid=[{id:"MClip1",x:0,y:0,z:0}]
tempObj2=slidBraid[0];
var braidName:String=tempObj2.id;
var material2:MovieAssetMaterial=new MovieAssetMaterial(braidName,true,true,true);
配列で制御していて、オブジェクトのidに名前を代入しています。
どのようにして制御すればよろしいでしょうか?
99ケンケン
2009/09/09(水) 00:30:24ID:RUKHMBuu 出来ました!
情報共有のために以下のようにすれば出来るようです。
http://www.brooklyn.jp/blog/actionscript/moviematerial-of-pv3d.html
ありがとうございました。
情報共有のために以下のようにすれば出来るようです。
http://www.brooklyn.jp/blog/actionscript/moviematerial-of-pv3d.html
ありがとうございました。
10093
2009/09/10(木) 09:48:05ID:cukeixJ3 そそ。
MovieAssetMaterialだとString指定だけど
MovieMaterialはMovieClip指定だからタイムライン制御が簡単にできる。
MovieAssetMaterialでもなんかのプロパティで制御できた気もするけど。
MovieAssetMaterialだとString指定だけど
MovieMaterialはMovieClip指定だからタイムライン制御が簡単にできる。
MovieAssetMaterialでもなんかのプロパティで制御できた気もするけど。
2009/09/25(金) 07:19:34ID:gstRuV5I
102Now_loading...774KB
2009/10/08(木) 23:47:28ID:894Ba92V ソフトウェアレンダリングマニアとしてはPV3D好きなんだけど実用性を
考えるとハードウェアレンダリングをベンダーとかMicrosoftなんかと
強調してやってくれないと行き詰るのは見えてますよね?
Silverlightと競っている手前できないという事情がありそうですが、
メニーコアCPUがもっと進化した場合、そこそこのスピードとクオリティで
動かせるようにはなるかもしれませんがやはりハードウェアアクセラレーシ
ョンがさらに先を行くという形は避けられないでしょう。
Adobeがインフラから整えるべき課題だと考えます。まぁ割り切って使いどころ
を工夫すれば面白いものは作れると思いますので個人的には結局使います。
考えるとハードウェアレンダリングをベンダーとかMicrosoftなんかと
強調してやってくれないと行き詰るのは見えてますよね?
Silverlightと競っている手前できないという事情がありそうですが、
メニーコアCPUがもっと進化した場合、そこそこのスピードとクオリティで
動かせるようにはなるかもしれませんがやはりハードウェアアクセラレーシ
ョンがさらに先を行くという形は避けられないでしょう。
Adobeがインフラから整えるべき課題だと考えます。まぁ割り切って使いどころ
を工夫すれば面白いものは作れると思いますので個人的には結局使います。
103Now_loading...774KB
2009/10/13(火) 20:43:34ID:NXjAS19L Cubeの側面に文字を貼り付けたいのですが
文字を画像にしてSpriteに貼り付け、MovieMaterialを使いsmoothを適用してやってみると、
文字画像が元サイズより大きくなるとピンボケのような状態になってしまいますが
これはどうしようもないのでしょうか、カメラの位置や元画像を大きくしたりして
見える大きさを調節する等しか方法は無いのでしょうか?
org.papervision3d.typography.Text3Dを試してもみましたが、これをSpriteに貼り付けたり
マテリアルに組み込むといった方法も見当たらないので断念しました
何か適切な方法がありましたらご教授下さい、お願いします
使用しているのはActionscript3.0、papervision3d 2.0.869です
文字を画像にしてSpriteに貼り付け、MovieMaterialを使いsmoothを適用してやってみると、
文字画像が元サイズより大きくなるとピンボケのような状態になってしまいますが
これはどうしようもないのでしょうか、カメラの位置や元画像を大きくしたりして
見える大きさを調節する等しか方法は無いのでしょうか?
org.papervision3d.typography.Text3Dを試してもみましたが、これをSpriteに貼り付けたり
マテリアルに組み込むといった方法も見当たらないので断念しました
何か適切な方法がありましたらご教授下さい、お願いします
使用しているのはActionscript3.0、papervision3d 2.0.869です
レスを投稿する
ニュース
- トランプ大統領、米台関係深化に向けた法案に署名 [少考さん★]
- 【芸能】元乃木坂46・松村沙友理 結婚&妊娠を発表! 「引き続き私らしくさゆりんご全開で頑張ります!」 [冬月記者★]
- 自民党 議員定数削減法案の了承を見送り 党内で異論相次いだため [Hitzeschleier★]
- 【初激白】松岡昌宏が語った、国分太一への思いと日テレへの疑問 「日本テレビさんのやり方はコンプライアンス違反ではないのか」 [ひかり★]
- 【文春】『薬屋のひとりごと』実写映画化、芦田愛菜(21)が主演・猫猫に決定! [Ailuropoda melanoleuca★]
- 肛門への性加害をスマホで撮影しかつて親友だった男性(30)に“おぞましすぎる私的制裁”を加えた男(32)が法廷で口にした「驚きの一言」 [おっさん友の会★]
- 【危険】金利上昇、止まらず!1.888%に!高市ピンチ [219241683]
- 【乞食速報】みずほ定期預金、実質金利2% [369521721]
- 高市早苗「戦艦は誤用ではないと閣議決定したわよ。アタシ絶対間違ってないから」ヤフコメ民もドン引き [165981677]
- 【驚愕】ケンモメン、ダブチを食っていた。チーズバーガー2つのが安いのに [794961135]
- (´・ω・`)どうも僕だにゃあ
- ホロライブ、三大勢力に別れて争ってると内部リークされる🥺
