質問

私へのフォローアップで 前の質問, 、Direct3DDeviceのバックバッファーを表面に保存することができます。

DirectX SDKでd3dxsavesurfacetofileをすでに見つけましたが、正常に動作します。ただし、取得した表面をAVIファイルに記録したいと思います。

私も見つけました Avifile Reference しかし、それらは明らかにDirectXサーフェスとまっすぐに互換性がありません。

この問題にアプローチする最良の方法は何でしょうか? HDCをつかんでいるGDI+/MVCベースのソリューションが多数見られましたが、それらは問題外です。また、Avifileがどのようなデータを期待しているのか、D3DSurfaceからどのように抽出するかはわかりません。

お知らせ下さい! :)

編集:

後処理もオプションです。指定されたいくつかの形式で表面データをキャプチャできます ここ, 、記憶に d3dxsavesurfacetofileinmemory. 。その後、このデータを圧縮してからディスクに保存できました。

データをどのように圧縮する必要がありますか?どのように保管すればよいですか?タイムスタンプを一緒に保管しますか?録音後、生成されたデータをどのようにAVIファイルに変える必要がありますか?

役に立ちましたか?

解決

このリンクのソースコードでは、それを行う方法を示します。

http://gpalem.web.officelive.com/simulationRecording.html

編集: :まあ、あなたはそのリンクされたコードとまったく同じことをする必要はありません。 d3dsurfaceを持っているので、ビットをつかんでキャビファイルに渡すだけで渡すことができます:: appendframeusual ...その形式を変更したい場合は、使用してください。 D3DXLOADSURFACEFROMSURFACe。リンクは完璧なソリューションであるとは言いませんでしたが、フレームをAVIファイルに書き込む方法を示しています。

編集2: :私はあなたの編集に答えなかったので、私はすべきです。まず、圧縮されていない動作が得られるまで圧縮を気にしないでください。圧縮は正しくなるための非常に複雑なものであり、さまざまなD3DXSurfaceコピー機能を使用するだけで適切な圧縮を取得することはできません。彼らはあなたが望んでいる種類の圧縮をサポートしていません。 D3DXは3Dレンダリング用であり、ビデオ圧縮ではありません。

ビデオ圧縮には、できる限りDirectshowを使用して、希望するコンプレッサーを追加するのが最善です。ただし、これは、グラフをオフにできる「ソースフィルター」を作成する必要があることを意味します。 Directshowは簡単に使用することではなく、非常に強力です。 「ソースフィルター」の記述に関する限り、Windows SDKの「プッシュソース」の例を確認できます。ただし、取得しているデータを取得するために適応する必要があります。

余談ですが、私の元の編集でさらに進むと、より多くのD3D9呼び出しを傍受することで、そのコードを使用できます。 SetrenderTargetコールをフックすると、そこに好きなレンダリングターゲットを挿入して、以前にリンクされたコードを直接使用できます...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top