Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ DirectX拉伸像素_C++_Directx_Resolution_Directx 11_Pixels - Fatal编程技术网

C++ DirectX拉伸像素

C++ DirectX拉伸像素,c++,directx,resolution,directx-11,pixels,C++,Directx,Resolution,Directx 11,Pixels,我刚开始使用directX,遇到了像素拉伸的问题。当我创建窗口和所有directX产品时,我使用两个变量,宽度和高度。对于大多数测试,我将它们设置为800x600。当我在屏幕上画一个正方形时,它看起来被拉伸了。 但是,当我将resoltion设置为600x600时 它看起来很正常,很方正。这让我得出结论,这是某种像素拉伸。在directX中,如何修复此问题,并使像素为正方形 float aspectRatio = bufferWidth / bufferHeight; 这是完全正常的。投影

我刚开始使用directX,遇到了像素拉伸的问题。当我创建窗口和所有directX产品时,我使用两个变量,宽度和高度。对于大多数测试,我将它们设置为800x600。当我在屏幕上画一个正方形时,它看起来被拉伸了。

但是,当我将resoltion设置为600x600时

它看起来很正常,很方正。这让我得出结论,这是某种像素拉伸。在directX中,如何修复此问题,并使像素为正方形

float aspectRatio = bufferWidth / bufferHeight;
这是完全正常的。投影到标准化屏幕空间后,坐标从-1.0到1.0(从左到右)和-1.0到1.0(从下到上)。您可以看到屏幕上的两个方向具有相同的值范围。这意味着,如果在屏幕上绘制高度和宽度相等的正方形,则其宽度将比高度大aspectRatio倍。这解释了600x600时的良好性能,但800x600时的问题。(aspectRatio1.33)


如果你真的想要一个正方形,你可以做的就是将宽度除以纵横比,在你的例子中是800/600(1.33),得到一个宽度和高度相等的多边形。

你可以根据你的窗口大小来设置你的视口

例如:

// Setup the viewport for rendering.
viewport.Width = (float)screenWidth;
viewport.Height = (float)screenHeight;
viewport.MinDepth = 0.0f;
viewport.MaxDepth = 1.0f;
viewport.TopLeftX = 0.0f;
viewport.TopLeftY = 0.0f;

// Create the viewport.
m_deviceContext->RSSetViewports(1, &viewport);
您可以查看更多详细信息。

两个问题:1)如何创建投影矩阵,2)是否在调整大小时重新创建后缓冲区?