我安装的是VC+DX9.0,可是DX8.0下的 例子运行不了,在网上找了好多资料都没有解决办法,只好重新开始学了。 下了一个。在WWW。GAMERES。COM的网站下,我下了3DGame,看了一下源码。和VC的WINMAIN下没有什么多大的区别,我感觉对我最有用处的是一个全屏显示和最小显示,并不是多难,在过程中,有一连灌的步聚,先初始化一个D3D9的接口
IDirect3D9* d3d9 = 0;
d3d9 = Direct3DCreate9(D3D_SDK_VERSION);
if( !d3d9 )
{
::MessageBox(0, "Direct3DCreate9() - FAILED", 0, 0);
return false;
}
如下则是显示WINDOWS里面的参数
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)d3d::WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(0, IDI_APPLICATION);
wc.hCursor = LoadCursor(0, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = 0;
wc.lpszClassName = "Direct3D9";
然后接着创建一个窗口
HWND hwnd = 0;
hwnd = ::CreateWindow("Direct3D9", "Direct3D9",
WS_OVERLAPPEDWINDOW,
0, 0, width, height,
0, 0 /, hInstance, 0 );
显示窗口。更新窗口
::ShowWindow(hwnd, SW_SHOW);
::UpdateWindow(hwnd);
接着取得硬件关联
D3DPRESENT_PARAMETERS d3dpp;
d3dpp.BackBufferWidth = width;
d3dpp.BackBufferHeight = height;
d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
d3dpp.BackBufferCount = 1;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality = 0;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow = hwnd;
d3dpp.Windowed = true;
d3dpp.EnableAutoDepthStencil = true;
d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
d3dpp.Flags = 0;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
最后就是一个取得设备相关。这好象是D3DX一个顺序,这只是我复习的一个方法,一点技术含量都没有。
只是在我的脑中过了一次电影一样,不过我还是想提出几个问题。以待我以后水平提高的时候再来解答我现在
心里想不明的疑团:
我要做的一个3D显示视频和声音,图片系统,到现在我还没有确定我的目的和方向是什么。
现在想不明白的,有高人看了就帮我解决一下,本人感激不尽
1。为什么DX9不支持DX8了?
找了相关资料,就是说如果要运行DX8的例子。就要
安装DX8.0 SDK,这是我不想要的,因为我想向一个新的方面发展。再装一个DX 8.0
也没有必要。
2。读3DMAX 的3DS文件,以前好象一个工具可以转为.X文件的。可是现在不记得怎么转换了。
.我实现的功能是读取3DS文件,还有视频文件,还有图片。很多功能要我写出来,我看要学一段时
间。我才能明白之间的道理。
表面来看。有一个全屏的功能是我现在第一件事要做的。下一步还是从最简单的开始,
在全屏中显示“Hello .world”这可是世上最经典的语句了。
有点困了,休息2个小时后再起来玩一下吧。