トップページ > 過去ログ > 記事閲覧
動画のオブジェクトへの貼り付け
名前:かち割氷 日時: 2011/06/17 17:18

作成したテレビのオブジェクト(.x)に動画(.avi)を貼り付けて表示したいのですが出来ません。 単純に動画を3D空間上に表示したり、 テレビのオブジェクトに画像(.jpg)を貼り付けて表示は出来ました。 現在オブジェクトに画像を貼り付ける方法を用いて、 同様に動画も貼り付けようとしていますがうまくいきません。 //////////////////////////ソース////////////////////////// MovieGraphHandle = LoadGraph( "testM.avi" ) ; SetMovieVolumeToGraph(0,MovieGraphHandle); ModelHandle = MV1LoadModel( "tv.x" ) ; TexIndex = MV1GetMaterialDifMapTexture( ModelHandle, 0 ) ; PlayMovieToGraph( MovieGraphHandle ) ; MV1SetPosition( ModelHandle, VGet( 0.0f, -1.0f, 2.0f ) ) ; while( ProcessMessage() == 0 && ClearDrawScreen()==0 && GetMovieStateToGraph( MovieGraphHandle ) == 1 && CheckHitKey(KEY_INPUT_ESCAPE)!=1) { MV1SetTextureGraphHandle( ModelHandle, TexIndex, MovieGraphHandle, FALSE ) ; MV1DrawModel( ModelHandle ) ; WaitTimer( 17 ) ; } ////////////////////////////////////////////////////////// 根本的に間違っている気がするのですが、他に方法が思いつきませんでした。 どなたか方法が分かる方がいらっしゃいましたら、 アドバイスを頂ければ幸いです。

Page: 1 |

Re: 動画のオブジェクトへの貼り付け ( No.1 )
名前:管理人 日時:2011/06/19 03:54

すみません、今まで動画のグラフィックハンドルを MV1SetTextureGraphHandle で 使用した際に正常に動作するようになっていませんでした 修正版をアップしましたので、よろしければこちらをお試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCCTest.exe // Gnu C++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) 尚、使用する動画も MV1SetTextureGraphHandle に渡すグラフィックハンドルの制約である、 幅、高さがそれぞれ2のn乗サイズである必要がありますのでご注意ください ( 2のn乗以外のサイズだった場合は動画のサイズ以上で最も数値的に近い2のn乗 サイズの画像として扱われ、余計なサイズの分だけ黒い余白ができます )
Re: 動画のオブジェクトへの貼り付け ( No.2 )
名前:かち割氷 日時:2011/06/20 14:19

素早い対応ありがとうございます。 修正して頂いたライブラリを上書きしたら、 動画の表示が正常に行われていました。 しかし、オブジェクトの距離が一定以上はなれると 動画部分が黒くなり、見えなくなってしまいます。 ライトを当ててみても、オブジェクト部分のみ明るくなるだけで、 動画部分は暗い(黒い)ままでした。 画像で試してみたところ、距離に関係なく鮮明に表示されました。 度々申し訳ないのですが、原因を教えていただければ幸いです。
Re: 動画のオブジェクトへの貼り付け ( No.3 )
名前:管理人 日時:2011/06/26 16:38

すいません、正常に描画されるように修正しましたので よろしければお試しになってみてください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCCTest.exe // Gnu C++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) 原因は動画再生の画像がミップマップ( DX_DRAWMODE_BILINEAR( バイリニア補間 ) による ぼかし縮小は原理上2分の1以下の縮小は綺麗に表示できないので、予め 2分の1、 4分の1、8分の1に綺麗に縮小した画像を用意しておいて、縮小表示したい大きさに応じて 使う画像を「今回は7分の1くらいだから4分の1の画像と8分の1の画像を合成して補間表示しよう」 といった用途に使う、そのn分の1サイズの画像群や技術のことを「ミップマップ」といいます ) ありで生成してしまっていて、ミップマップの一番解像度の高い画像( 1分の1の画像 )の部分にのみ 動画像を転送して、2分の1の画像、4分の1の画像...n分の1の画像には動画像を 転送していなかったので、1分の1以下のサイズの画像をGPUが使った場合に 「1分の1の画像(動画像)と2分の1の画像(真っ黒の画像)を合成して使おう」 とした部分は動画像は見えるけど暗い表示に、 「2分の1の画像(真っ黒の画像)と4分の1の画像(真っ黒の画像)を合成して使おう」 とした部分は真っ黒になってしまうといったようなことになっていました ( ミップマップのどのレベルを使うか( 何分の何の画像を使うか )はピクセル毎に GPUが自動的に判断しています ) 私も前回の時点で確認していたのですが、背景を真っ黒にしていたのでライトによる 暗さだと勘違いしていました orz
Re: 動画のオブジェクトへの貼り付け ( No.4 )
名前:かち割氷(解決) 日時:2011/06/30 14:30

対応ありがとうございました。 用意したサイズを用いて、必要なサイズに合成・補間することで表現していたのですね。 上書きしたところ、遠く離れてもきれいに表示されました。 丁寧な説明と修正ありがとうございました。

Page: 1 |