我想在我的免费游戏中使用Direct3D9纹理实现过场动画播放,并同步播放声音。
我正在使用面向Windows XP或更高版本的Visual C ++ 2010 Express,DirectX9,FMOD。
我对视频或音频没有任何经验。
我尝试过DirectShow,但无法将其编译而且Bink超出了我的预算。
答案 0 :(得分:0)
您可以将其转换为:http://nehe.gamedev.net/tutorial/playing_avi_files_in_opengl/23001/
也许可以使用FMOD将声音播放为MP3。
答案 1 :(得分:0)
使用直接演示,你应该能够播放视频和播放音频。如果没有,则可以使用直接显示视频,然后使用FMOD播放声音。以编程方式,您必须创建声音以及要播放的视频,然后设置音频在视频播放状态下播放的触发器,然后在视频状态退出时结束。对于直接演示,您需要从这些开始创建comobjects ////////////////////////////////////////////////////////////////////////
// DirectShow COM Object Creation
////////////////////////////////////////////////////////////////////////
IGraphBuilder *videoGraph;
IMediaControl *videoControl;
IMediaEvent *videoEvent;
IVideoWindow *videoWindow;
//HRESULT *isVideoDone;
long evCode;
LONG_PTR eventParam1, eventParam2;
HWND hwnd;
然后在你的cpp文件中用这样的方法启动它:
void InitVideo(LPCWSTR vidName)
{ CoInitialize的(NULL);
CoCreateInstance( CLSID_FilterGraph, NULL,
CLSCTX_INPROC_SERVER, IID_IGraphBuilder,
(void**)&videoGraph);
videoGraph->QueryInterface(IID_IMediaControl,
(void**)&videoControl);
videoGraph->QueryInterface(IID_IMediaEvent,
(void**)&videoEvent);
// building a filter graph for our video
videoGraph->RenderFile(vidName, NULL);
//video window
videoControl->QueryInterface(IID_IVideoWindow,
(void**)&videoWindow);
// setup the window
videoWindow->put_Owner((OAHWND)hwnd);
// Set the style
videoWindow->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE);
// Obtain the size of the window
RECT WinRect;
GetClientRect(hwnd, &WinRect);
//GetWindowRect(hwnd, &WinRect);
// Set the video size to the size of the window
videoWindow->SetWindowPosition(WinRect.left, WinRect.top,
WinRect.right, WinRect.bottom);
videoWindow->put_Visible(OATRUE);
}