DirectX拉伸像素

时间:2014-01-29 02:53:56

标签: c++ directx resolution directx-11 pixels

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

然而,当我将resoltion设置为600x600时 Res of 600x600

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

2 个答案:

答案 0 :(得分:1)

float aspectRatio = bufferWidth / bufferHeight;

这是完全正常的。一旦投影到标准化的屏幕空间,坐标将从-1.0到1.0(从左到右)和-1.0到1.0(从下到上)。您可以看到屏幕上的两个方向都具有相同的值范围。这意味着如果您在屏幕上绘制一个高度和宽度相等的正方形,则宽度 aspectRatio 的宽度将大于高度。这解释了600x600的良好行为,但800x600的问题。( aspectRatio 为1.33)

如果你真的想要一个正方形,你可以做的只是将宽度除以宽高比,在你的情况下为800/600(1.33),得到宽度和高度相等的多边形。

答案 1 :(得分:1)

您可能希望根据窗口大小设置视口。

例如:

// 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);

您可以查看Rastertek Tutorials了解详情。