Я только начинаю с DirectX и столкнулся с проблемой растянутых пикселей. Когда я создаю окно и все вкусности DirectX, я использую две переменные: ширину и высоту. Для большинства испытаний я установил их на 800×600. Когда я рисую квадрат на экране, он выглядит растянутым.
Однако, когда я установил разрешение 600×600
это выглядит нормально и квадратно. Это привело меня к выводу, что это было растяжение пикселя. В DirectX, как это исправить, и сделать пиксели квадратными.
float aspectRatio = bufferWidth / bufferHeight;
Это совершенно нормально. Как только вы проецируете в нормализованное пространство экрана, координаты переходят от -1,0 до 1,0 (слева направо) и от -1,0 до 1,0 (снизу вверх). Вы можете видеть, что оба направления на экране имеют одинаковый диапазон значений. Это означает, что если вы нарисуете квадрат на экране с равной высотой и шириной, он будет соотношение сторон раз больше по ширине, чем высота. Это объясняет хорошее поведение в 600×600, но проблема в 800×600. (соотношение сторон 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 Учебники Больше подробностей.