Как создать шахматную доску на основе заданной позиции и постоянного центра? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь создать фон для симуляции трассировки лучей.В настоящий момент я настроил его так, что, когда луч попадает на объект, он возвращает яркость.Камера посылает лучи на каждый пиксель сцены.Функция get_luminance имеет параметр, соответствующий позиции на экране, в которую она попала.

Например, у меня уже есть объект, который меняет цвета в зависимости от того, в каком квадранте он находится. Поэтому, если позиция имеет оба положительных или обоих отрицательных значения, она будет окрашена в ярко-красный цвет, например (1,1) или(-1, -1).Если позиция имеет только одну из них, она будет окрашена в более темный красный цвет, например (-1, 1) или (1, -1).Вот логика для этого:

relative_direction = in_position - self.origin
if sum(1 if i > 0 else 0 for i in relative_direction) % 2 == 0:
    return Spectrum(0, 255, 0)

return Spectrum(0, 128, 0)

Теперь я хочу применить аналогичную логику для определения типа шахматной доски для фона.Я не совсем уверен, как это сделать.Я бы предположил, что там будет какая-то модульная арифметика, где каждый, скажем, 8 пикселей будет менять цвета, но кроме того, я не совсем уверен, как действовать.

Вот грубое изображениеиз того, что я хочу сделать, с цветами, чередующимися каждые 2 пикселя: https://i.stack.imgur.com/7EMfZ.png

РЕДАКТИРОВАТЬ: я пытался что-то вроде этого:

relative_direction = out_position - self.origin
        print(relative_direction)
        if round(relative_direction[0]/10000) + round(relative_direction[1]/10000) % 2 == 0:
            return Spectrum(0, 255, 0)

        return Spectrum(255, 255, 0)

Логика здесь заключается в том, что индексы вкаждая координата должна складываться как четная или нечетная.Дополнения, которые складываются, чтобы быть даже, будут окрашены в зеленый, иначе желтый.(если вам интересно, почему я делю на 10000, то это потому, что координаты имеют величину до 50000 единиц). Однако, это просто создает это изображение:

https://i.stack.imgur.com/3mpM5.png

Есть некоторая ошибка, потому что я отказался от дельта-т для моей трассировки лучей, которая объясняет, почему они не являются идеальными квадратами, но в любом случае, я не понимаю, почему паттерн не распространяется за середину ... Очень странно.

РЕДАКТИРОВАТЬ: Оказывается, все, что мне нужно было сделать, это напечатать все выражение в операторе if.Фигуры.

...