各位大侠一个很菜的问题,来帮帮忙!

oarsman 2003-05-02 11:51:45
大家好!我是一个初学者,才开始学D3d,我想问一下,怎么能让D3d的程序全屏运行呢?谢谢帮助!
...全文
58 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
oarsman 2003-05-03
  • 打赏
  • 举报
回复
多谢了!我先看看!有问题的话再请教您!
mooncat2000 2003-05-03
  • 打赏
  • 举报
回复
Full Screen (全屏幕)
要使用全屏幕模式,我们需要调整一下InitialiseD3D模块:把D3DPRESENT_PARAMETERS结构的“Windowed”参数设置为FALSE,通知D3D我们要使用全屏幕模式;然后,我们还需要设置D3DPRESENT_PARAMETERS结构中的两个全屏幕参数:FullScreen_RefreshRateInHz用于设置屏幕刷新率,FullScreen_PresentationInterval用于设置页翻动的最大速度,我们选择了D3DPRESENT_INTERVAL_ONE标识来限定仅当屏幕刷新时完成页翻动。

译者注:上面的后几句是按照原意翻译的,但我想这样可能不太好懂,我要在此大概地说明一下:当电子束从上至下完成了屏幕上的每一行水平回扫后,会被暂时关闭,回到屏幕的左上角;此过程所需的时间被称为垂直回扫周期或屏幕空白周期。有时,程序能完成的刷新速率(页翻动速度)可能要比屏幕刷新率还高,所以我们要使它在限定的垂直回扫周期内完成刷新工作,否则将产生“图像撕裂”。原文上述的设定为至少等待一个垂直回扫周期(一次的屏幕刷新完成后)来完成页翻动操作。

d3dpp.Windowed = FALSE;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3dpp.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_ONE;

嗯,我们还应该选择正确的后缓冲区格式。我写了一个模块CheckDisplayMode用来测试正确的格式,此模块会在InitialiseD3D模块中被调用。

D3DFORMAT CGame::CheckDisplayMode(UINT nWidth, UINT nHeight, UINT nDepth)
{
UINT x;
D3DDISPLAYMODE d3ddm;

for(x = 0; x < m_pD3D->GetAdapterModeCount(0); x++)
{
m_pD3D->EnumAdapterModes(0, x, &d3ddm);
if(d3ddm.Width == nWidth)
{
if(d3ddm.Height == nHeight)
{
if((d3ddm.Format == D3DFMT_R5G6B5) ||
(d3ddm.Format == D3DFMT_X1R5G5B5) ||
(d3ddm.Format == D3DFMT_X4R4G4B4))
{
if(nDepth == 16)
{
return d3ddm.Format;
}
}
else if((d3ddm.Format == D3DFMT_R8G8B8) ||
(d3ddm.Format == D3DFMT_X8R8G8B8))
{
if(nDepth == 32)
{
return d3ddm.Format;
}
}
}
}
}

return D3DFMT_UNKNOWN;
}

还有一件要做的事就是我们修改了WinMain函数中的创建窗口部分,我们用了GetSystemMetrics函数得到了当前屏幕的宽与高,然后将我们的窗口设置成了与屏幕一样大。

8,324

社区成员

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

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