スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

DAEを…

昨日、動画編集についてあれこれ調べてた流れで、いつの間にかflashにdaeファイルを読み込む方法とか調べてた。
なんか以前にも似たようなことやってた気がしたけど。
あのときはただ単にmqoを読み込んだだけだったな。

ここ最近、動画とflashを組み合わせてあれこれしようと企んでるわけだけど、
ふとマスコットキャラ的なものを3Dで作ってみようかな、なんて、
また身の丈に合わないような、確実に途中で挫折するようなことを思い立ってみたわけだ。

MetasequoiaでモデリングしたmqoファイルをPapervision3Dで読み込むやり方は以前やったから覚えてるんだ、辛うじて。
ただ、これはほんとモデリングしたものをそのまま読み込んだだけ。
せっかくなのでアニメーションでも付けたいなあ→そういえばdaeなんてあったなあ…
みたいな流れで、daeファイルの読み込みをしよう、とぐぐってみる。

ちなみに手持ちのソフトでdaeファイルを出力できるものとしてVixarMotionというものがあります。
以前も似たようなことをしようとしたときにでも落としたのでしょう。

早速使ってみる。
サンプルとして付いてきた天使のモデルの腕をちょっと動かすだけの簡単なアニメーションを設定。
キーフレームを使って腕を動かすと、flashのように自動的にモーションを設定してくれるようです。
これをdae形式で保存。
しかしこのソフト、dae形式での読み込みはできない様子。つまり一発勝負…。

さて、pv3dを使ってdae形式を読み込む方法だが…。

とりあえずDAEクラスを使うのでインポートする一文、
import org.papervision3d.objects.parsers.DAE;
を書いとく。
あとは、


var daeobj:DAE = new DAE();
daeobj.load("daeファイル.dae");
addChild(daeobj);


とかすると、型が一致しないDisplayObjectに型変換がどうとか文句を言われるので、addChildする対象をなんか指定しないといけない。
で、ぐぐって出てきたサンプルソースに書かれてたのが、

import org.papervision3d.scenes.Scene3D;
って一文でインポートしてから、

var scene:Scene3D;
var daeobj:DAE = new DAE();
daeobj.load("daeファイル.dae");
scene.addChild(daeobj);

ってやる方法。

そういえば以前の自分の記事でもworldだのsceneだの使ってたな。相変わらず意味は分からないんだけど…ていうか変数宣言してないのになんであのソースで動いてたんだろ…謎すぎる。

それはさておき、これでエラーは出なくなった、はず。エラーが出るときはなんかインポートし足りないんだろう。

しかし、肝心のdaeファイルを読み込んでくれない。

そもそもVixarMotion自体が独自の規格っぽいというか何と言うか、その作者が作った専用のクラスを使うこと前提で作られてるっぽくて、
何度か試した後に、もしかしたらそれが原因かもしれないと思い立つ。

だったらその作者が作ったクラスを使えば…というかサンプルで落としたflaファイルを開いてソースを見れば何の問題もない。
というわけでflaファイルからソースを丸パクリして何箇所か修正した結果、ようやくdaeの読み込みに成功。

モデル自体がパクリなので、ちょっとうpるのは気が引けてしまうんだけど…。
代わりに作者のサイトでも貼っておきます。
Flash研究所:http://flash-lab.net/
VIXAR:http://www.vixar.jp/

自分まだトーシロなもんでソースの意味とかが全然わからんのですが。というかpv3DどころかAS3すらまだ把握できてないっつーのに。
逆に言えば、その程度の知識でもflashに3Dモデルを読み込んでアニメーションさせることができてしまう、というわけです。
怖いですねー。恐ろしいですねー。
ただ、他人の独自規格に頼り切ってしまうのはちょっと気が引けるというか、スキルアップには繋がらないんじゃ、という思いもあります。
amazonの評価を見ると、この作者の著書の評価も今一歩芳しくないようですし。

しかしまあ、今の目的は動画とflashを合わせてアニメーションを作ること、その一貫で3Dモデルも合わせてみよう、ということなので、これで何となく目処が立った感じです。
スキルアップはこの前のサンプルSTGの続きでも作りながら少しずつしていこう。

…で、残る問題は、3DCGを作りたいだの何だの散々言っておきながら、結局一個も自分では作っていないということなんだが…。
まあ…頑張る。でもきっとなかった事になるんだろうなあ。
関連記事
スポンサーサイト

動画とflashをあわせるとかそんな

flashでやってることは、外部から動画を取り込んで、それにflashのアニメーションを組み合わせる、ということ。
そのための、外部から動画を取り込む方法は以前の記事で紹介しました。あのサイトはまじ神。

あれの他に、Flvplaybackというものを使ったやり方もありますね。一度試して見たけど、なかなか便利そう。でも今はこれ以上触れない。

さて、動画をflashに読み込んで、あとは動画に合わせてアニメーションを作るだけ、と思ったら問題が出てきた。
まあうすうすそうなるんじゃないかと分かっちゃいたけど、ずれるんだよね、外部動画とflashアニメーションが。

これが、最初からずれるのではなく、徐々にずれていく感じ。
簡単な口パクでテストをしてみたけど、だいたい開始40秒くらいでズレが目立つようになる。2,3分するともう悲惨。
テストの中には、なぜか全くズレないときもあった。この条件が知りたい。

まずズレる原因を突き止めないといけない。動画が30.5fpsなのに対しflashが30fpsのせいなのか。でもflash側を31fpsにしても結局動画の方に追いつかれてたからなあ。
flash側の処理が追いついてないとか?ネットストリーム.timeとエンターフレームでカウントしてるフレーム数とを組み合わせてfps算出したときには28とか29とかだったし。
それでも画質低にしても改善されなかったから、直しようがない気がする。

このNetStream.timeプロパティもよく分からん。
trace(ns.time)みたいな感じで毎フレーム書き出してみたところ、なぜか2,3フレームの間は同じ数字になったり、ならなかったりもする。
その数字の増え方も、理論上は1フレームにつき0.0333秒ずつ増えていくはずなんだが、出力される数字を見ると、必ずしもそうとは限らないようだ。
これも、flashと外部動画のfpsの微妙な違いによるものなのか、それとも別に原因があるのか。

何にしても、フレームを使ったアニメーションと、秒単位で進んでいく外部動画とを同期させなければならない。
うまい方法があればいいんだけど。


埋め込み動画を使った場合にはアニメーションのずれとか気にする必要ないっぽいんだよなあ。
埋め込み動画も、一度ムービークリップにしてから配置すれば、スクリプトで音量の調整ができたりして悪くはないんだ。
というかズレの解決法が見つからなければ埋め込み動画にせざるを得ない。

ただし、外部からの取り込みではなく埋め込みにした場合、いくつかデメリットが。
・埋め込み前に再エンコするので、画質・音質が劣化。
・エンコする時間がもったいない…というか、単純に面倒くさい。
・アニメの微調整のために何度もパブリッシュすることが予想されるが、埋め込み動画を使うとパブリッシュに必要な時間がクソ長くなる。

こちらの環境では1分半くらいの動画でも30秒近くかかる。30分動画をflashと合わせてパブリッシュするとしたら、単純に20倍するとして10分か。
これを変更の度にやるのは非常に面倒くさい。なるべくなら避けたいんだが…。

もうちょっと試行錯誤してみる必要がありそうだ。
関連記事

新たな挑戦

サンプルSTGを作って公開しようと目論んでた今日この頃だけど、
優先してやるべきことができたから流れる可能性がある。

まあ優先したいことってのもflashなんだけど、こっちはflashで簡単なアニメーションを作るという、
より従来のflashらしいこと。
こうやって普通の使い方をするのはすごい久々だなあ…。
ただ、ニコ動等の動画サイトにうpることが目的なので、アニメーションを作る際に気をつけなきゃいけないことが幾つかあったりする。ファイル形式的な意味で。
WEB上にflashファイルをうpるときは、スクリプトでも外部ファイルでもトゥイーンでも使いたい放題なんだけど、
純然たる動画ファイルとしてうpろうとすると、トゥイーンしか使えない。
動画として書き出す場合の話だけど。

しかも、メインのタイムラインしかアニメーションを反映してくれないのね。ムービークリップは何フレーム持たせようが1フレーム目で止まります。
これは大変だ。入れ子構造を使ってアニメーションさせるときに不便だ。
というかムービーとして書き出すのはやっぱ駄目な気がする。

どうしたもんかね。
関連記事

サンプルSTGその2と3の間くらい

一応、前回の:http://orekoro.blog26.fc2.com/blog-entry-600.html

前回の続きというにはあまりにも進んでないので今回はノーカン扱い。

前回の敵を配置してから、敵の種類を増やす前にやっぱり先に当たり判定を設定しようと思い、今設定中。

ビリビリ魔人のときは、当たり判定を取るときに対象となる二つのオブジェクトを、getChildAtやらnumChildrenやらを駆使してコンテナから参照させてました。
今回も同じソースを使おうと思ったんだけど、ビリ魔のときは当たり判定を設定するアイテムは全部ムービークリップだったのに対して、今回のサンプルSTGではスプライトにもムービークリップにも等しく設定する必要がある。

仕方ないのでスプライトをMovieClip()でかこって型変換してやろうとやってみたが、強制型変換に失敗というエラーが…。
仕方なく、DisplayObjectやObjectとして参照させる。こうするとエラーは出ないんだけど…なんだかなあって気分に。
さらにビリ魔の当たり判定クラスでは円の当たり判定を採用してるので、当たり判定半径なる変数をムービークリップに持たせてるんだけど、スプライトの場合にどの段階で持たせるかで悩み中。
というところで今止まってる感じ。

ていうか俺、もしかして根本的に当たり判定の考え方間違ってるのかもしれない。
まあAS1のときに幾つかゲームを作ったとはいえ、基本的にはトーシロだからなあ。AS3の資料も手元に乏しいし。
仕方ないといえば仕方ないが、より良いものを作ろうとするとやっぱりどこかで一度勉強する必要がありそう。


まあそういう話はさておき、当たり判定に使えそうな技術を2つほど見つけたので紹介でも。
自分のやり方とは大分違うので、目からウロコが落ちる思い。

まず1つめ。BitmapDataを使ったやり方。
こちらの記事で簡単に紹介されています→ http://d.hatena.ne.jp/heriet/20080510/1210405180
BitmapDataというものは使ったことがないんだけど、これはソースを見るに、指定した座標の色に赤FFが含まれていたらtrue、という感じでしょうか?
まさに「こんなやり方があったのか!」という感じ。是非参考にしたいんだけど、BitmapDataクラスが何なのかよくわかってないため練習期間が必要だな。
というわけで今回は見送ろう。
あとこれ、指定できる座標は一個だけなのかなあ。ここからここまで判定、ってときにはfor文を使えばいいのだろうか。
どっかに詳しい説明があればいいけど。
でもなんか便利そう。こういうの使いこなせるようになりたいな。

もう一個はこちら。 http://hakuhin.jp/as3/container.html#CONTAINER_09
とあるコンテナ上の指定座標にあるインスタンスを返すというgetObjectsUnderPoint()を使ったものです。
これは指定座標にあるアイテムを配列にまとめて取得できるそうなので、なかなか便利そうです。
とりあえず使ってはみたけど、今使ってるスクリプトと相性が悪いのか、このサンプルの通りにスクリプト組んでも型変換に失敗だとかなんとかでうまく機能しませんでした。
今はちょっと修正しながらうまく機能するかテスト中。
ただ、これも指定した1座標しかインスタンスの取得をできないので、ある範囲上にあるインスタンスを取得となるとfor文を使う必要が出てくるのかな。


というわけで試行錯誤中です。
やっぱり大事なのは、当たり判定の取り方そのものというよりも、当たり判定を取るために対象となる2つのインスタンスをいかにして参照するか、という点ですね。
とりあえず今回のサンプルSTGでは「あの表示リストの何番目のアイテムとこの表示リストの何番目のアイテムを比較」というようなやり方でやってこうと思います。
これでドットシンタックスを駆使しまくると処理が重くなるという話を聞いたことがあるので、あまり上手い手法ではなさそうですけどね。
関連記事

サンプルSTGその2

前回:http://orekoro.blog26.fc2.com/blog-entry-597.html

特にニーアやストパン等ゲームをするでもなくブログに書くこともないので、
進捗状況でも。

サンプルSTG2
矢印キーで移動、Zキーでショット。(当たり判定はありません)

まあ何が増えたって、
見た目的には背景が真っ黒だと寂しいから星を追加したのと、ショットが撃てるようになったってとこ。
あと敵らしきものを設置できた。
内部的にはスプライトを描画するのにちょっと楽になるクラスを作って、真っ黒な背景、星、ショットなど、スプライトで描けるものにそのクラスを使ってるってとこ。
そして描画したスプライトにイベントを設定しているってとこ。かな。
別に大したことやってるわけでもないんだけどね。

あとは、新たに設定した敵に動きを設定する、敵がショットを撃つ、敵ショットの挙動、自機・敵・ショットに当たり判定を設定する、などをやっていく予定。
敵を破壊してスコアが増えて弾に当たるとゲームオーバー、までできればサンプルとしては十分だろう。
関連記事
プロフィール

oisu-

Author:oisu-
趣味はゲームと深夜アニメ実況。
絵を描いたりFlashゲーを作ったりもするけど、一つのことにのめり込むと他のことがおざなりになるので結局あまり成果が出ない。その上根気が続かないのですぐ飽きる人。

pixivb

FC2カウンター
検索フォーム
カレンダー
03 | 2017/04 | 05
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
円卓の生徒
円卓の生徒応援バナー

XBOX360用ダンジョンRPG『円卓の生徒』を全力で支援中!
Twitter

Twitter Updates

    follow me on Twitter
    広告
    円卓の生徒応援バナー


    ここからアフィ注意
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。