Visual c++ Direct3D窗口->;Bounds.Width/Height与实际分辨率不同
我注意到在执行操作时Direct3D有一种奇怪的行为 我从窗口对象获得的尺寸与配置的窗口分辨率不同。在那里我设置了1920*1080,从Winows对象的宽度和高度是1371*771Visual c++ Direct3D窗口->;Bounds.Width/Height与实际分辨率不同,visual-c++,directx-11,Visual C++,Directx 11,我注意到在执行操作时Direct3D有一种奇怪的行为 我从窗口对象获得的尺寸与配置的窗口分辨率不同。在那里我设置了1920*1080,从Winows对象的宽度和高度是1371*771 CoreWindow^ Window = CoreWindow::GetForCurrentThread(); // set the viewport D3D11_VIEWPORT viewport = { 0 }; viewport.TopLeftX = 0; viewport.TopLeftY = 0; vi
CoreWindow^ Window = CoreWindow::GetForCurrentThread();
// set the viewport
D3D11_VIEWPORT viewport = { 0 };
viewport.TopLeftX = 0;
viewport.TopLeftY = 0;
viewport.Width = Window->Bounds.Width; //should be 1920, actually is 1371
viewport.Height = Window->Bounds.Height; //should be 1080, actually is 771
我正在Alienware 14上开发,可能这导致了这个问题,但我找不到任何答案。核心窗口大小、指针位置等都不是以像素表示的。它们以设备独立像素(DIP)表示。要转换为/转换为像素,需要使用每英寸点数(DPI)值
m_DPI
来自DisplayInformation::GetForCurrentView()->LogicalDpi
,如果它发生更改,您将获得DpiChanged
事件
有关更多详细信息,请参阅
您应该查看上的Direct3D UWP游戏模板,并查看如何在
Main.cpp
中处理此问题。感谢您提供有关dpi的信息!我还没有被这件事绊倒。顺便说一句:你的回购协议中的代码似乎对我很有帮助,编码风格与我现在学到的非常相似。所以,也谢谢你:)
inline int ConvertDipsToPixels(float dips) const
{
return int(dips * m_DPI / 96.f + 0.5f);
}
inline float ConvertPixelsToDips(int pixels) const
{
return (float(pixels) * 96.f / m_DPI);
}