我剛開始使用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)你是否在重新調整大小時重新創建後臺緩衝區? –