C++ C++;,DirectX 9,Windows API-调整大小会更改我的坐标吗?

C++ C++;,DirectX 9,Windows API-调整大小会更改我的坐标吗?,c++,winapi,directx,image-resizing,C++,Winapi,Directx,Image Resizing,我画了一个500 x 500像素的矩形 我的窗户是1920 x 1080 当我将屏幕调整到1376 x 768时,原来是500 x 500像素的图像现在稍微变小了(它已被缩放和挤压)。。我如何防止这种情况 我假设这是这种设置的标志,但我找不到我需要的设置: ZeroMemory( &presParams, sizeof( presParams ) ); presParams.Windowed = TRUE; presParams.SwapEffect = D3DSWAPEFFECT_DI

我画了一个500 x 500像素的矩形

我的窗户是1920 x 1080

当我将屏幕调整到1376 x 768时,原来是500 x 500像素的图像现在稍微变小了(它已被缩放和挤压)。。我如何防止这种情况

我假设这是这种设置的标志,但我找不到我需要的设置:

ZeroMemory( &presParams, sizeof( presParams ) );
presParams.Windowed = TRUE;
presParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
presParams.BackBufferFormat = D3DFMT_UNKNOWN;
presParams.PresentationInterval = D3DPRESENT_INTERVAL_ONE;

d3dObject = Direct3DCreate9( D3D_SDK_VERSION );
hr = d3dObject->CreateDevice(
    D3DADAPTER_DEFAULT,
    D3DDEVTYPE_HAL,
    hWnd, 
    D3DCREATE_HARDWARE_VERTEXPROCESSING, 
    &presParams, 
    &d3dDevice
);  

场景的相对大小/形状受到后缓冲区大小和投影矩阵纵横比的影响,因此在调整窗口大小或更改屏幕分辨率时需要重置后缓冲区大小,这将防止场景被拉伸

presParams.BackBufferWidth = window_width or screen_width;
presParams.BackBufferHeight = window_height or screen_height;
然后,调用PD3DDEVICE->Reset(预参数)重置设备

在此之后,应重置投影矩阵,使纵横比=窗宽/窗高或屏宽/屏高,例如:

D3DXMatrixPerspectiveFovLH(&proj_matrix, D3DX_PI / 4, ration, 1.0f, 1000.0f);

啊,谢谢你,好先生!因此,当backbuffer被拉伸时,DirectX会自动缩放。太酷了。我回家后就试试这个!