2014-01-29 91 views
0

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

然而,当我设置resoltion到600×600 Res of 600x600

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

+1

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

回答

1
float aspectRatio = bufferWidth/bufferHeight; 

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

如果你真的想要一个平方,你能做的就是简单地通过您的长宽比划分宽度什么而你的情况是800/600 (1.33)得到一个宽度和高度相等的多边形。

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查询详细情况。