【问题标题】:How to prevent stretching/scaling of a DirectX C++ program如何防止 DirectX C++ 程序的拉伸/缩放
【发布时间】:2020-04-11 11:06:14
【问题描述】:

我使用 DirectX9 构建了一个非常简单的 C++ 程序,可以在屏幕上显示图像和文本。我已经将它编译为 1024 x 768,我想确保它在任何屏幕分辨率上都兼容。当尝试在 1920 x 1080 显示器上运行我的可执行文件时,程序会自动水平拉伸(因为此显示器是宽屏)并扭曲图像和文本。有人告诉我,在初始化 DirectX 时我可以更改一个标志,这将防止任何拉伸,并确保程序打开时两侧都有垂直黑条,以保留所有我想要的格式。有人知道怎么做这个吗?这是我初始化 DirectX 的代码的摘录。 PS:我将刷新率设置为 0,这样我的程序就可以在任何显示器的原生刷新率上运行。 谢谢!

/*-----------------------------------------------------------------------------
Name: InitD3D()
Desc: Creates the D3D object using Direct3D
-------------------------------------------------------------------------------*/
HRESULT InitD3D(HWND hWnd) {
   if (NULL == (pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
      return E_FAIL;

   D3DPRESENT_PARAMETERS d3dpp;
   ZeroMemory(&d3dpp, sizeof(d3dpp));
   d3dpp.Windowed = FALSE;
   d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
   d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
   d3dpp.BackBufferCount = 1;
   d3dpp.BackBufferWidth = 1024;
   d3dpp.BackBufferHeight = 768;
   d3dpp.FullScreen_RefreshRateInHz = 0;

   if (FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
      &d3dpp, &pd3dDevice)))
      return E_FAIL;

   return S_OK;
}

【问题讨论】:

  • 无关:你为什么要在这个时候学习directx9?如果您的目标是构建游戏,那么您不应该真正关心学习图形 API,除非您对 GPU 的大量优化感兴趣,也许学习 Unity 或 Unreal Engine 来构建游戏。但是,了解和了解幕后工作原理是个好主意,如果是这样,我建议您选择 Directx 11.2,因为 Directx9 是旧版。

标签: c++ winapi visual-studio-2017 directx screen-resolution


【解决方案1】:

也许视口(D3DEVIEWPORT9)可以帮助你,你可以通过这个结构来设置你的图像在窗口上的位置。然后有一个API来获取显示器的分辨率。显示器的分辨率减去图像的分辨率,最后除以2,结果就是你的图像在屏幕左上角的位置。以下代码供您参考。

int nScreenWidth, nScreenHeight;
nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
D3DEVIEWPORT9 vp = { (nScreenWidth - 1024) / 2,(nScreenHeight - 768) / 2,1024,768,0,1 };
pd3dDevice->SetViewport(&vp);

【讨论】:

    猜你喜欢
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2010-11-14
    相关资源
    最近更新 更多