为什么d3d给的这几个Tutorials我基本上都不能运行?

codeclub 2003-09-15 11:07:09
编译都是没有错误的(dx8sdk,dx9sdk都试了)!可就是一运行就是什么都没有!
(也许窗口闪了一下就消失了,太快了!)
我跟踪了一下第一个 Tut01_CreateDevice 程序!
发现运行到CreateDevice好像失败退出了:
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&g_pd3dDevice ) ) )
{
return E_FAIL; //程序跳到了这里?
}
为什么会CreateDevice失败?如果说我的显卡(Voodoo3000)不支持HAL的话,可我玩反恐什么的
选为d3d硬件加速都是没问题的,运行 d3d自带的那些什么Meshes 例子也是可以看到那个贴图的
老虎和走动小人的,我也试了一下模式D3DDEVTYPE_REF 和 D3DDEVTYPE_SW 也都是失败的!
为什么会这样?他们那些例子是怎么创建d3d的,我刚看d3d一天,实在看不懂Meshes那些大量的
代码,看这几个Tutorials还勉强可以看懂,结果一个也出不来结果,郁闷!那位大虾指点一下迷津?

...全文
35 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
codeclub 2003-09-17
  • 打赏
  • 举报
回复
hehe,终于解决了!原来是voodoo不支持32色深d3d的问题!
程序默认取桌面分辨率和色深,我桌面是32色深(2d还
是支持的),照成创建失败!

将d3dpp强行设为16D就搞定了!(或者将当前桌面色深设为16D也可)
brainf 2003-09-16
  • 打赏
  • 举报
回复
试试把d3dpp置为全屏模式!
d3dpp.BackBufferWidth=800;
d3dpp.BackBufferHeight=600;
d3dpp.Windowed = false;
voodoo的窗口模式好像有问题!
houdy 2003-09-16
  • 打赏
  • 举报
回复
如果是这样的化,我也没有办法了。我也是刚学D3D,知道的也不多。
期待高手。。。
弟十六 2003-09-16
  • 打赏
  • 举报
回复
更新显卡驱动程序!
pzh508 2003-09-15
  • 打赏
  • 举报
回复
一般来说CreateDevice失败都是由硬件引起的,你重新安装显卡驱动程序看看
codeclub 2003-09-15
  • 打赏
  • 举报
回复
郁闷!没准还真是voodoo3显卡的问题,我把编译好的程序拿到我邻居家的TNT显卡上是
可以正常运行的!按照你那样改了以后,在我机器上弹出了IDS_ERROR_CREATEDEVICE
的错误对话框!在我邻居家还是正常!
我又试了好几个dx程序,其他的什么关于ddraw、meshes的程序都正常!
但只要一含有 m_pD3D->CreateDevice 绝对会出错!
难道voodoo3支持d3d有问题?难道真要把我这voodoo3拒于3d游戏开发门外?
真是不甘心!
应该不是驱动安装错误的问题,因为我还在我比较纯净的98上试了一下,也会弹出
IDS_ERROR_CREATEDEVICE的错误对话框!(98上基本什么都没安,反恐用的是
绿色硬盘版,用d3d加速可正常玩)
不知道那个meshes例子的3d贴图老虎怎么做的?我这里可正常运行那个程序!
(代码太多、我有点看得晕头转向) 那个程序里还真没见到CreateDevice这句
不知道怎么初始化d3d的?

短期我还没银子换显卡,那位大虾有过在voodoo3上开发d3d的经验?
houdy 2003-09-15
  • 打赏
  • 举报
回复
根据你提供的情况,我觉得不像是硬件的问题(因为根据你说的,你的硬件好像没有什么问题),可能是你传入的几个参数那个有问题了,仔细看看你的代码,看看传入的参数是否正确。下面是我写的一个初始化3D中的代码,和你的比较一下,看看有没有问题。
m_pD3D=Direct3DCreate8(D3D_SDK_VERSION); //创建IDirect3D8对象
if(m_pD3D==NULL)
{
AfxMessageBox(IDS_ERROR_DIRECT3DCREATE);
return E_FAIL;
}

D3DDISPLAYMODE d3ddm; //获得适配器(显卡)的显示模式
if( FAILED(m_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm)) )
{
AfxMessageBox(IDS_ERROR_GETADAPTERDISPLAYMODE);
return E_FAIL;
}

D3DPRESENT_PARAMETERS d3dpp; //设置D3D的表现所需要的参数
ZeroMemory(&d3dpp,sizeof(d3dpp));
d3dpp.Windowed=TRUE; //是否在窗口中表现
d3dpp.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC;
d3dpp.BackBufferFormat = d3ddm.Format;
d3dpp.AutoDepthStencilFormat=D3DFMT_D16;
d3dpp.EnableAutoDepthStencil=TRUE;

if( FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,
m_hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&m_pDevice)) )
{
AfxMessageBox(IDS_ERROR_CREATEDEVICE); //创建一个和适配器兼容的设备
return E_FAIL;
}
如果还有问题,发短信给我。我也是刚学Direct3D,也需要和大家共同研究,这样才有进步。

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧