Я пытаюсь закрасить круг вокруг игрока в моем боковом 2D-скроллере, но получаю овал! Вот часть кода, которую я использую, которая имеет значение:

    if(length(abs(coords - playerCoords)) < .1)
    {
        color = color *float4(1,0,1,1);
    }

  return color;

Размер моего экрана составляет 1280 в ширину и 720 в высоту. Я знаю, что это причина искажения, но я недостаточно знаю о своей проблеме, чтобы придумать или найти решение. Может мне кто-нибудь объяснить, как компенсировать растяжение экрана?

Благодарность!

-ATD

0
ATD 24 Янв 2013 в 06:03

1 ответ

Лучший ответ

Умножьте термин «abs ()» на «float2 ((720./1280.), 1.0)» - или каким бы ни было ваше соотношение сторон y / x.

Используемые вами координаты нормализованы в интервале 0-1, поэтому просто исправьте их.

0
bjorke 24 Янв 2013 в 07:59
Кстати, abs () не нужен - length () всегда положительный. Это правда, что для всех известных мне графических процессоров abs - это модификатор хранилища, поэтому он, по сути, бесплатный, но: здесь он не требуется.
 – 
bjorke
30 Янв 2013 в 07:11
Да, ты прав. Не знаю, зачем я это туда положил. Я даже знал это.
 – 
ATD
31 Янв 2013 в 00:24