我刚开始使用directX,并遇到拉伸像素的问题。当我创建窗口和所有directX好东西时,我使用两个变量,宽度和高度。对于大多数测试,我将它们设置为800x600。当我在屏幕上画一个正方形时,它看起来很舒服。 DirectX延伸像素
然而,当我设置resoltion到600×600
它看起来正常和方形。这导致我得出结论,这是一种像素拉伸。在directX中,我如何解决这个问题,并使像素成为正方形。
我刚开始使用directX,并遇到拉伸像素的问题。当我创建窗口和所有directX好东西时,我使用两个变量,宽度和高度。对于大多数测试,我将它们设置为800x600。当我在屏幕上画一个正方形时,它看起来很舒服。 DirectX延伸像素
然而,当我设置resoltion到600×600
它看起来正常和方形。这导致我得出结论,这是一种像素拉伸。在directX中,我如何解决这个问题,并使像素成为正方形。
float aspectRatio = bufferWidth/bufferHeight;
这是完全正常的。一旦你投影到标准化的屏幕空间,坐标从-1.0到1.0(从左到右)和-1.0到1.0(从下到上)。您可以看到屏幕上的两个方向具有相同的值范围。这意味着如果您在屏幕上以相同的高度和宽度绘制正方形,则其宽度比高度宽度更宽。这就解释了在600×600的良好的行为,但在800x600的一个问题。(的aspectRatio 1.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);
您可以在Rastertek Tutorials查询详细情况。
有两个问题:1)你如何创建你的投影矩阵,2)你是否在重新调整大小时重新创建后台缓冲区? –