1read 100read
2012年5月FLASH183: ★Flash 3D【 Papervision3D 2.0 】情報交換★ (150) TOP カテ一覧 スレ一覧 2ch元 削除依頼
ガラクタノカミサマ (136)
【ハロウィン】ハロウゲームワールド【イベント】 (199)
777をとった人が一ヶ月英雄 (568)
ニコニコムービーメーカーからswfをうpする (117)
【AAで】Another 2channel制作スレ【RPG】 (113)
<)(・w・)> / ̄z ̄| ミ゚・ ゚=ミヘ |゚ヮ゚| (297)

★Flash 3D【 Papervision3D 2.0 】情報交換★


1 :08/11/23 〜 最終レス :11/11/13
Flashの3DクラスライブラリのPapervision3D 2.0 GreateWhiteについて
情報交換しましょう。
いくつかの3Dライブラリがその覇を競い合っていますが、
あえてPapervision3Dを選択しているもの同士、語り合おうじゃ
ありませんか。

2 :
2

3 :
プロのアニメーターがゴロゴロいるフラ板では当然手書き派多数だよな

4 :
2.0 は betaのアーカイブが配布されてますし、
情報源が多いですからお勧めだと思います。

5 :
あえてPV3Dっていうか、本命じゃねーのかい

6 :
planeのwidthを取得する方法がわからんです。

7 :
インスタンス化時にコンストラクタで渡してるだろうが

8 :
最近、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
どれを使えばいいんでしょうか…

9 :
一番下のやつ

10 :
SVNで
http://papervision3d.googlecode.com/svn/
を設定&ダウンロードで最新版。
h ttp://www.bushclover-field.jp/papervision01/
ココとか参考にどうぞ。
しかし、3Dはムズイのう。。。
簡単なオブジェクトでもテクスチャひとつで、クオリティがまったく
変わってくるので、その辺の技術も上げねば・・。
Flash以前の問題だな。
 

11 :
FP10用のPV3D使ってみた奴いるか

12 :
>>10
どうもです。
>>11
FP10用って?kwsk

13 :
astroエンジンってことじゃないかなぁ。
速度上がるのかどうなのか

14 :
GoogleAnalysticレポートでFlashPlayer10のユーザが
90%くらい行ってから検討だな
いままだ週間レポでも58%
CS4でたら増えてくるんだろうな

15 :
最新のpapervisionのHelloworldが見つからん…。

16 :
CS4ってDisplayObjectにプロパティzを持ってるけど、
PV3Dもそれように再設計されたの?

17 :
h ttp://electone.jp/product/stagea/internet/nmt/index.php
これはpapervisionですか?
これくらいだったら、簡単に作れるんですか?
  

18 :
>>17
ぽいね。
簡単かどうかは、その人のスキルによる。
モデリングや、数学的知識は当然必要だが、これがPVでできるかわからん
ようでは厳しいと思うぞ。

19 :
>>16
DisplayObjectのzプロパティ等を使用して3D処理行うと
DisplayObject内に定義されているその他の3Dには関係ないプロパティやメソッドの分
パフォーマンスが落ちそうな気もするね

20 :
3軸のための行列計算をしなくてすむなら、
パフォーマンス上がる気がするけどな。
CORRECT_Z_FILTER指定しないと多数のDAEファイルの
重なりがまともに出来ないけど、指定するとガクッと
パフォーマンスが落ちてしまう。
そのへんとかもzプロパティが使えれば、パフォーマンス
落とさずに出来るようなるかもしれん。
Roxikなみのパフォーマンスが出るようにしてくれればなぁ、
仕事で使うには、まだまだシンプルな事しか出来ん。
すげぇ他力本願だけど。
 

21 :
http://www.google.co.jp/search?hl=ja&q=paperVison3D
paperVison3Dは有害らしいw

22 :
と思ったら検索結果全部か

23 :
最新版のpaperVison3Dをクラスパスに通したあとで
3Dflaサンプルを落としてコンパイルしたところ
Vertex3Dへの参照があいまいです。とか
.asがありませんとなる原因は何が考えられますでしょうか?

24 :
3Dflaサンプルってどこのヤツ?paperVisonのサイトの?

25 :
http://www.thinkit.co.jp/article/91/3/2.html
ここなんですが、、、
基本的な使い方なのに情けない。
クラスパスは通ってるみたい、
バージョンの問題ですかね、、、

26 :
>>25
それは記事が古くて、今のPaperVisionのライブラリの
使い方とあわないからです。
PaperVisonの事を書いてる日本語Blogの大半は
古いPaperVisonのライブラリの頃のものなので、
サンプルもほとんど動きません。みんな飽きっぽいのな。
Googleとかで検索するから、PaperVison3d 2.0 をキーワードに
した方がいいです。

27 :
ほんとうにありがとうございます。
こんなに親切に答えてもらって、、
たすかりました。
PaperVison3d 2.0 をキーワードに調べてみますね!

28 :
Papervision3D_2.0.869を使用しています
papervision3dの基本的?なオブジェクト
var viewport:Viewport3D;
var scene:Scene3D;
var camera:Camera3D;
var renderer:BasicRenderEngine;
これらをちゃんと削除する方法はどうすれば良いのでしょうか?
viewportとrendererはdestroy()関数があったので実行し
sceneとcameraには=nullとしていますが、その後もなんだか軽くなったという実感がありません
確実な削除方法はどのようにすればよいのでしょうか、どうかお願いします

29 :
オレはprimitiveなオブジェクトをちゃんとremoveChildする方法を知りたい。
getChild()が変だし、なんか残骸が残るんだよな。

30 :
http://game.belcro.net/game.datas/F_Mega/game.html
http://phenotype.jpn.org/blog/wp-content/uploads/ftp/racing21/index.html
すごいなー
もうこんな作品作ってる人がいるとは〜

31 :
>>29
因みに残骸が残ってるかどうかを調べる方法ってどうするんでしょうか・・・
plane.marerial.destroy()として
trace(plane.marerial)をしても普通に指定したmaterialが表示されたりで
これも完全には消えてないって事なんでしょうかね

32 :
>>31
すみません、destroy()までしてませんでした、が、removeChild()してるのに
画面にCubeとかPlaneが残る場合があるんですよ。
removeChild()だけじゃメモリから消えないとしても、viewから消えないっていう
のはなんか変で。
Primitiveを自分で管理すればいいんでしょうが、viewで管理してる
同じ情報を持つっていうのもなんかもったいない話で。

33 :
>>32
お答え頂きありがとうございます
自分も他人のソースを元に手探りでやっている身でなんとも答えられず申し訳ないです
使用上、作ったPV3Dオブジェクトを作って消してを繰り返し行うので
しっかりとした使用後の削除方法を習得したいんですけどね・・・

34 :
PaperVision3D 2.0 を使っています。
3D を表示する画面の背景に、
特定のビットマップを表示することはできますか?
いろいろ調べたのですが、わからなくて。。。

35 :
そこは普通にFLASHっぽいことをするだけ。
FLASHだったらタイムラインに画像を置くとか。FLEX?とかなら画像を読み込んでaddChild()すればおk。

36 :
PaperVision3D 2.0のいい勉強方法はありますでしょうか。あまりサンプルなどが見つからず困っております。

37 :
>>36
3Dについて、どれだけ基礎知識があるかによるなぁ

38 :
論理座標系とデバイス座標系、頂点とレンダリング、といった基本的なことくらいしかわかっておりません。
1.7のサンプルは出回っているので、1.7と2.0の変更点などまとまっているものでもあれば少しは学習できますでしょうか。。。

39 :
オレがPaperVison使い始めた頃にあれこれ情報探したけど、
1.7->2.0移行ガイドみたいな情報はみたことないかな。
少なくとも日本語のサイトでは。
てか、かなり変わってるから、もう1.7の事は忘れた方がいい。
まず、Googleで
PaperVision 3D 2.0
で検索してBlogとかからサンプルソースを
コピペ実行出来るようになるっていうのが第一段階。
サンプルもFLEXとFLASHで違うとかあるんで注意。
そしたら、一行ずつ、サンプルソースが何をやってるのか読み解く。
そこまでいったら、あとは、PaperVisonのDocs/index.htmlをざっとみて
どういうメソッドがあるのか把握する。
この辺、3Dに関する基礎知識がないとどうにもならないんで、そういうのは
DirectXとかの3Dプログラミング本の基礎の部分とかを参考に。
これで大体、やりたい事を実現する方法が見えてくる。
見えてこない場合は、基礎知識不足だと思う。数学とか3Dとかプログラミングの。

40 :
>>39
ありがとうございます!
1.7のことは忘れて、2.0のサンプルから解析していこうかと思います。

41 :
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;
}
因みにエラーは発生していません、訂正が必要な箇所があればどうかご指摘下さい、お願い致します。

42 :
Cubeを作るたびにメモリ使用量が増えてんの?

43 :
>>42
返信ありがとうございます
SWFProfilerというのを使って、グラフ状でメモリの使用状況を見ながら、>>41のCube作成→トゥイーン→消去を繰り返させているのですが
プレビュー中は使用量のグラフがずっと上がりっぱなしの状態でした、使用メモリ値は最後に見た時には15MBなどと出ていました
試しに同じ作業をPlaneでやってみた所、FlatShadeMaterialでもColorMaterialでもグラフは上下し、プレビュー中の使用メモリ値は7MB-9MBの間で動き続けました
なので原因は、MaterialsListの消し方が問題なのかなと思い色々と試しているのですが、使用メモリが下がる事が無いんです・・・

44 :
マテリアルをつけてない素のCubeを出したり消したりだとどーよ?

45 :
Cubeはマテリアルnullにはできないだろ

46 :
Cubeはマテリアルnullにはできないだろ

47 :
>>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を綺麗に削除する方法のセオリーって無いのでしょうか

48 :
cube.materials;
cube.material.destroy();
cubeにmaterial,materialsなんてプロパティなくね?
ttp://docs.pv3d.org/

49 :
>>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

50 :
>>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だから
解放されないわけだ、ダメじゃん。
続く、かもしれない。

51 :
>>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が効いて増減しつつも、徐々にメモリ使用量が増えてくし。
続く、かもしれない

52 :
>>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の関係?
なかなかプリミティブ自体の削除までたどり着かないなぁ。

53 :
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まかせっぽい。

54 :
次は、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クラスの派生クラスなので同上。

55 :
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で
そのマテリアルが使えなくなるから。マテリアルとプリミティブは対等な関係じゃないので
それぞれ管理しないさいと。
ここまで来たら、あとはサンプルコードを書いて実践したいけど、もう眠いわ。

56 :
>>50-55
詳細な内容ありがとうございます!
自分はこれまでライブラリのソースを見たのも殆ど無かったようなレベルの人間なので、
内容をまだまだ把握しきれずといった状態ですが、興味深く読ませて頂いております
自分がPlaneは消えたと言っていたのも、完全には消えてなかったのかもしれないですね;
書いて頂いた内容を把握できるようになりますよう、自分なりに基本からじっくり調べて行こうと思います
恐縮ですがまた時間がありましたら、続きやサンプルコードも宜しくお願いします

57 :
>>41>>47について、
> プレビュー中は使用量のグラフがずっと上がりっぱなしの状態でした、
っていうのは、ずっとグラフが上がり続けるって感じ?
それとも上がったり下がったりを繰り返しつつも、徐々に最大値が上がっていく感じ?
手元の環境だと、Cube生成すらしてないSWFを作ってプレビューするだけでも
メモリ使用量が上がったり下がったりを繰り返しつつも、徐々に最大値が上がってくんだよね。
一応、こっちで>>41>>47をテストしてみたら、ずっと上がり続けるってことはなくて、
上がったり下がったりを繰り返しつつも、徐々に最大値が上がっていく感じでした。

58 :
>>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ぐらいになっていました、トゥイーンの動きはガクガクです

59 :
あと、>>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個になるんじゃないかな。

60 :
>>58
Plane1枚?でFPSが17って別の問題なような気がする・・・。
あとtrace()って遅いし、メモリ消費が増えるような気がする。

61 :
>>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

62 :
最低限必要なだけのコードだけど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 ] } );
}

63 :
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出ると思う。

64 :
>>62-63
サンプルコードありがとうございます
試してみた所、自分の環境でもグラフが上下し、CurrentFpsやAverageFpsも安定していたようでした
マテリアルをColorMaterialからFlatShadeMaterialに変えたりしても問題ありませんでした、どうもありがとうございます!
詳細な処理の関係性はまだよくわかってませんが、結局cube.destroy()やcube.material.destroy()等といった処理は必要なかったんですね
普通のスプライトを削除する時のような、基本的な方法で消えるというのは目から鱗でした
具体的な処理を理解せず、ドキュメントを見てdestroy()があるからと、それでもうう解決したような気になっていた自分が安直過ぎました・・・
paperviison3dのソースについての理解はなかなか出来てない状態ですが、そっちの方も理解できるよう調べていった方がいいですね
色々ととても勉強になりました、どうもありがとうございました

65 :
や、厳密にはCubeとMaterialは削除をしっかりしないとダメだと思いますよ。
でも削除しなくてもメモリが増えっぱなしとかFPSが低下していくようなことには
ならないという意味でのサンプルです。
厳密な削除方法は結局、よくわからないけどね。(てかAS3の削除処理は面倒すぐる)

66 :
>>65
作るflashが、papervision3dで3D描画してで処理が終わる(3Dオブジェクトを消す必要の無い)flashならまだしも
それらの作った3Dオブジェクトを消して、その後も別の演出など続けていくflashの場合は気をつけた方がいいんでしょうね
flashのオープニングでCubeをぼこぼこ作って消してというのも、後々の動作に負担が残っていくという恐れも考えて考え直そうかと思ってます

67 :
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;
という感じで、独自にポリゴンを作ってみたのですが、テクスチャがうまく表示されません。
テクスチャ画像がポリゴンに「貼りついて」いるのではなく、
ポリゴンを移動するとテクスチャ画像が背景画像のように動かないんです。
どういう原因が考えられますか?

68 :
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に変換すべき」と解釈しましたが、この方法が分かりません。
どう変更すべきでしょうか?

69 :
(自己レス)
解決しました。
MaterialsListで各面のJPGを指定すればOKでした。

70 :
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の座標と円柱の中心を一致させるにはどうしたら良いでしょうか?

71 :
viewPortの座標(x,y)を大きさの半分だけ移動すればいいんじゃない?

72 :
>>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が得られない以上、動かすことが出来ない状態です。
どうしたら良いでしょうか?

73 :
すいません。
72をお願いします。

74 :
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をアイマスクの様な形状で出る筈なのですが・・・)
この場合どうすべきでしょうか?

75 :
ビジネスソフトが多数あります
http://www.hhyyhh22.co.nr

76 :
Papervision3D最近元気ないね
朽ち果てた?

77 :
以前ほどには話題になってないのは、結局、この程度の3Dグラフィックは
ずいぶん昔の技術だからね。Amigaとかの頃か?
あと出来る人は自分のBlogでやるようになったから、ぶっちゃけ、もうここみたいな
掲示板にみんなが集まってわいわいやるような機会が失われたんだと思う。良くも悪くもね。

78 :
cs4使えよ…非浪費人よ

79 :
良く検証してないんだけど、moviematerialとassetmaterialって同じじゃね?

80 :
>>79
MovieAssetMaterialのこと?

81 :
>79ごめん間違えてた

82 :
もう更新なさそうだな

83 :
なんだ、相方はもうとっくに脱いでるのか

84 :
3Dゲーマーのようなヘビーユーザーには大したインパクトがない。
ネットブック使ってるライトユーザーは重すぎて見る気も失せる。
openGL利用出来れば3DFlashもいいが今度はビデオカードの相性が出る。
まだ時期尚早なんじゃね?

85 :
JavaScriptで3D描画するものをgoogleが開発してるからそっちに注目だな

86 :
O3Dか

87 :
5分程度のプリレンダムービーも一からモデリングして作るなら大変だ。
見栄えのいいリアルタイム3Dじゃ個人での開発無理かも試練。

88 :
あ、あぁデポジットね、あれ噛めば噛むほど味がでるよね。

89 :
これってどうやってるかわかる人いますか?
ttp://www.kanfoo.jp/contents.php?cID=379

90 :
モデリングソフトから出力したDAEファイルを読み込み

91 :
impressやITMEDIAはスクエニに気を遣って記事に出来ないんだろ?

92 :
ver2.0でMovieAssetMaterialでムービークリップをオブジェクトに貼付けたのですが、
ムービークリップ内でフレーム移動したいと思うのですが、可能ですか?

93 :
可能。3つ目の引数をtrueにすればOK
MovieMaterialでインスタンスを割り当てれば
GogoAndPlayとかStopとかも制御できるよ

94 :
Now_loading...774KBさんできるんですか!?
引数を3つ目をtrueにしてみていたんですが、ダメでした。
もし、サンプルなどあれば教えてください。
特にgotoAndPlayなどフレームアクションがきかなくて。

95 :
追記で。
例えば、
割り当てたマテリアルのインスタンスに指示する場合、
どのように指示してあげれば良いんでしょうか。

96 :
さらに、ボタンをクリックしたら、
マテリアル内の14フレームに飛ぶという事は
可能だったりするのでしょうか。

97 :
>>95-96
そのマテリアルのMCに対してgotoAndPlay()すればいい。

98 :
やっぱり出来ませんでした。
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 :
出来ました!
情報共有のために以下のようにすれば出来るようです。
http://www.brooklyn.jp/blog/actionscript/moviematerial-of-pv3d.html
ありがとうございました。

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
【祝】いつでも雑談しているスレ29【5周年】 (575)
超グロ画像 (170)
FFAA公開停止反対スレ (186)
Flash職人さんとDTM職人さんと作品と【6コラボ目】 (411)
ttp://wwwwwwwww.jodi.org/ を解読するスレ 2 (293)
ゆえのひみつ 作成スレッド (157)
--log9.info------------------
IIDX ☆12に没頭してる人のスレ その17 (398)
【ギタフリ】ギターフリークスSP1400〜スレPart10 (478)
えぐい言葉でも語尾に「ドン」を付ければ和む (286)
【店員】音ゲー筐体のメンテについてpart2【AC】 (714)
そろそろSOUND VOLTEXの最良曲を決めようぜ (193)
うろおぼえ曲捜索・質問スレ in 音ゲー板 7曲目 (446)
マイケル・ジャクソン ザ・エクスペリエンス (263)
音ゲーなぞかけ (793)
漏れそうなときに流れる音ゲー曲 (206)
DDR X3 はなぜ失敗したのか (189)
◆◇キーボードマニア総合スレ Part26◇◆ (662)
【不正】ギタドラバトル晒しスレPart6【自重】 (406)
【弐寺】専コン難民★2 (678)
【ドラマニ】ドラムマニアSP3000〜4000スレ Part1 (672)
ピンクターボ総合スレ (108)
IIDX SP11のEXハード埋めに嘆き苦しむスレ (572)
--log55.com------------------
あみあみ総合スレ 54店舗目
スポーンを集めてるバカを笑うスレッド22
トミカを1人でつぶやく 赤箱3トヨタハイエース
【集めて】ねんどろいど その570【楽しい】
【パチ怪獣】レトロ系怪獣ソフビ★34期【インディーズ】
ヘボット!のおもちゃ ボキャネジ1本目
【緊急】艦隊これくしょん -艦これ- Lv.16【ダメコン】
【ちっちゃ】ねんどろいどぷち その90【かわいい】