Вы можете прочитать readme на английском языке, нажав здесь
Minirt - это проект, который знакомит вас с увлекательным миром Raytracing. С помощью этого проекта вы научитесь рендеринг изображения, сгенерированные компьютером, используя базовые методы Raytraging. Узнайте, как реалистичные изображения создаются с нуля!
Вот несколько изображений, рендеринг с миниркой :
![]() | ![]() |
|---|---|
![]() | ![]() |
Эти изображения показывают, чего вы можете достичь с помощью проекта, и дают вам представление о том, как будут выглядеть окончательные результаты!
Минирта - это проект Raytracing, который позволяет вам:
Продолжайте чтение, чтобы получить более подробную информацию о том, как настроить и использовать Minirt , в том числе как определить карту, формулы пересечения и как управлять камерой и клавиатурой.
Карта определяет элементы, которые появятся на вашем изображении. Здесь мы покажем вам, как настроить каждый тип элемента:
Вот пример того, как элементы определены на карте:
A 0.3 255,255,255 (Luz de ambiente: intensidad, color)
C 0,1,-10 0,0,1 70 (Cámara: posición, vector de dirección, FOV)
L 0,10,-10 0.7 255,255,255 (Luz: posición, intensidad, color)
pl 0,0,0 0,1,0 100,100,100 (Plano: posición, vector normal, color)
sp 0,0,0 5 255,0,10 (Esfera: posición, radio, color)
cy 4,0,0 1,1,0 4 6 10,0,255 (Cilindro: posición, radio, altura, color)
Камера (c)
Свет окружающей среды (а)
Свет (L)
План (PL)
Сфера (SP)
Цилиндр (CY)
Формула трехмерной сферы:
[(x - h)^2 + (y - k)^2 + (z - l)^2 = r^2]
Где:
Эта формула описывает все точки ((x, y, z)), которые находятся на расстоянии (R) центра ((H, K, L)).
Изображение сферы:
3D -плоскость представлена как: [ax + by + cz + d = 0], где ((a, b, c)) является нормальным вектором на плоскость, а (d) - это расстояние от начала координат.
План изображения: 
Для цилиндра:
Изображение цилиндра: цилиндр
Чтобы отобразить изображение, мы нарисуем луч с камеры через каждый пиксель . Затем мы проверяем, пересекает ли это молния с объектом в сцене. Здесь мы объясняем, как это рассчитывается:
Для сферы:

Для 3D -самолета:

Для цилиндра:

Как только мы найдем точку пересечения, мы рассчитываем конечный цвет пикселя с этими шагами:
Начальный цвет:
Рассчитайте свет:
Оттенок:
Последний цвет:
Это приводит к более реалистичному изображению, регулируя яркость и цвет в соответствии с тем, как свет взаимодействует с объектами в сцене.

В проекте мы используем несколько структур данных для обработки информации сцены и конфигурации камеры. Здесь мы объясняем, как они организуют:
t_info и t_data ) t_info : Эта структура хранит информацию о объеме каждого типа элемента в сцене:
ambient_light : количество огней окружающей среды.camera : количество камер.lights : количество огней.planes : сумма планов.spheres : количество сфер.cylinders : количество цилиндров. t_data : Эта структура содержит всю информацию о изображении, которое будет представлено:
width и height : размеры изображения (широкие и высокие).info : Структура t_info подробно описывает объем каждого типа объекта в сцене.line : подсчитывайте обработанные линии.lights , planes , spheres , cylinders : списки, которые содержат объекты на сцене. В этих списках хранится информация о огнях, планах, сферах и цилиндрах соответственно.camera : информация о камере.ambient_light : информация о свете окружающей среды.t_camera )Камера отвечает за определение перспективы, с которой изображение отображается. Его структура включает в себя:
fov : поле зрения (FOV) камеры, которое определяет, сколько можно увидеть с камеры. Более высокое значение означает более широкое поле зрения.center : вектор, который представляет положение центра камеры в космосе.euler : вектор, который содержит углы Эйлера, используемый для направления камеры в трехмерном пространстве.q : Кватернион, который используется для представления вращения трехмерной камеры. Кватернионы полезны, чтобы избежать проблем с интерполяцией и 3D вращением. В проекте клавиши клавиатуры позволяют управлять камерой и регулировать вид сцены. Вот подробное объяснение того, как работает каждый ключ и почему мы используем определенные методы для управления камерой.
W Keys, A, S, D: Они используются для перемещения камеры в разных направлениях:
Эти ключи изменяют центр камеры, который является точкой, из которой камера смотрит сцену. Перемещение центра камеры меняет положение камеры в пространстве без ее вращения.
Космический ключ: поднимайте камеру вверх.
Ключ отключения: опустите камеру вниз.
Клавиши со стрелками выше (up_k) и ниже (down_k): они регулируют вертикальный наклон камеры:
Клавиши стрелки влево (левый_К) и правый (правая_К): они регулируют горизонтальное вращение камеры:
Эти ключи изменяют углы камеры Эйлера , которые являются углами, которые определяют, как камера ориентирована в пространстве. Углы Эйлера используются для регулировки наклона и вращения камеры простым способом.
Эйлер углы
Этот проект предназначен для совместимости как с Linux , так и с MacOS , и были реализованы конкретные конфигурации, чтобы гарантировать, что он работает без проблем в обеих операционных системах.
В проектах, которые обрабатывают графику и записи пользователя, такие как клавиши, это обычные коды, связанные с каждым ключом, варьируются в зависимости от операционной системы. Чтобы справиться с этими различиями:
Например:
Проект использует Minilibx (MLX) , которая представляет собой библиотеку света для 2D -графического программирования, специально разработанного для средств UNIX, таких как Linux и MacOS. Однако из -за различий между операционными системами необходимо правильно настроить библиотеки и маршруты их, чтобы проект был правильно компилирован в обеих системах.
Обнаружение операционной системы :
Конфигурация библиотеки :
Адаптивная компиляция :
Этот подход гарантирует, что проект не только портативен между различными операционными системами, но также остается оптимизированным и совместимым с особенностями каждой среды.
Чтобы проиллюстрировать, как работает проект на практике, мы подготовили серию видео, которые показывают различные аспекты и функции программы в действии. Эти видео охватывают:
Видео X4 в разрешении 800x400
Эти клипы дадут вам четкое представление о том, как использовать программу и того, что вы можете ожидать с точки зрения производительности и визуализации.
Если вы хотите внести свой вклад в проект:
ЗДЕСЬ
ЗДЕСЬ
◦ Отправьте электронное письмо ffornes-: [email protected]
◦ Напишите Gmacias-: [email protected]