RayTracing
|
В конструкторе класса MainWindow cначала создается каркас окна при помощи средств программирования QT, затем задаются элементы классов Mater, Sphere, Thor, Light и начальное положение камеры(CamPos). Затем создается массив цветов для каждого пиксела и заполняется при помощи алгоритма рей-трейсинга: создается луч(Ray), затем ищем расстояние до ближайшего объекта и продвигаемся на это расстояние по направлению луча, снова считаем расстояние и т.д... до момента, когда расстояние от нынешней точки не стало больше 30, либо интенсивность цвета луча не станет равной 0; одновременно с этим, считаем влияние источников света на цвет объектов(считаем расстояние и по формуле вычисляем цвет), затем "обрезаем цвета"(если значение цвета не принадлежит [0; 255]). Создаем меню, статус-бар; Задаем соответствия нажатий клавиш, клавиш мыши и действий приложения. Также реализованы антиалиасинг и сериализация. Сериализация: При нажатии на соответствующее меню вызывается одна из 4-х функций, выставляющих параметры сериализации (чтение/запись, XML/Bin),затем вызывается основная функция сериализации, которая последовательно обрабатывает экран, положение камеры, 2 сферы, 3 тора и 2 источника света... или же выдается ошибка