DirectX растянутые пиксели

Я только начинаю с DirectX и столкнулся с проблемой растянутых пикселей. Когда я создаю окно и все вкусности DirectX, я использую две переменные: ширину и высоту. Для большинства испытаний я установил их на 800×600. Когда я рисую квадрат на экране, он выглядит растянутым.
Res 800x600

Однако, когда я установил разрешение 600×600
Res 600x600

это выглядит нормально и квадратно. Это привело меня к выводу, что это было растяжение пикселя. В DirectX, как это исправить, и сделать пиксели квадратными.

0

Решение

float aspectRatio = bufferWidth / bufferHeight;

Это совершенно нормально. Как только вы проецируете в нормализованное пространство экрана, координаты переходят от -1,0 до 1,0 (слева направо) и от -1,0 до 1,0 (снизу вверх). Вы можете видеть, что оба направления на экране имеют одинаковый диапазон значений. Это означает, что если вы нарисуете квадрат на экране с равной высотой и шириной, он будет соотношение сторон раз больше по ширине, чем высота. Это объясняет хорошее поведение в 600×600, но проблема в 800×600. (соотношение сторон 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 Учебники Больше подробностей.

1

По вопросам рекламы [email protected]