2014-01-29 89 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查詢詳細情況。