mini3d
Учебное пособие по рендерингу 3D не имеет оптимизации производительности и в основном объясняет людям, как написать фиксированный визуализатор программного обеспечения. Хотя основной код составляет всего 700 строк, воробей маленький и имеет все внутренние органы.
【Ридме на английском】
характеристика
- Одиночный файл: исходный код имеет только один mini3d.c, а один файл реализует все, и его легко читать.
- Независимая компиляция: нет сторонних библиотечных зависимостей, нет сложных инженерных каталогов.
- Стандарт модели: стандартная модель координат D3D, левша System Plus World / View / Projection Three Matrix
- Реализация обрезки: простая обрезка CVV
- Поддержка текстур: максимальная поддержка для 1024 x 1024 текстур
- Кэш глубины: используйте кеш глубины, чтобы определить изображение до и после
- Перспективная карта: картирование текстуры перспективы и наполнение цвета перспективы
- Крайние вычисления: точный расчет охвата края многоугольника
- Оптимизированная реализация: двигатель рендеринга имеет всего 700 строк, модули ясны, а основная цепь заметна.
- Подробные комментарии: подробные комментарии по основному коду
Компиляция
- Mingw: GCC -O3 mini3d.c -o mini3d.exe -lgdi32
- MSVC: CL -O2 -Nologo mini3d.c
- Скомпилированная версия: https://github.com/skywind3000/mini3d/releases
Демо
Заполнение текстуры: render_state_texture
Цветная начинка: render_state_color
Рисунок каркаса: render_state_wireframe
Увеличьте освещение и квадратичную линейную интерполяцию (скриншот эффекта освещения, добавленного другом в Mini3d)
Основное домашнее задание
- Добавить обратно
- Добавить простой свет
- Обеспечить больше режимов рендеринга
- Реализовать чтение текстуры квадратичной линейной разницы
Продвинутая домашняя работа
- Вывести и доказать все геометрические знания, используемые в программе
- Оптимизировать производительность вычислений вершин
- Оптимизировать производительность draw_scanline
- Загрузка текстуры из файла BMP/TGA
- Загрузите сценарий BSP и реализовать роуминг
Принцип объяснения
- Wei Yixiao: Как OpenGL и DirectX получают местоположения пикселей, когда известны только вершины?
- Wei Yixiao: Как компьютер доступ к видеокарте?
Связанные проекты
- RenderHelp: еще одна оптимизированная реализация мягкого рендеринга, которая поддерживает программируемые конвейеры рендеринга, см. Введение для деталей.
Пожертвования приветствуются
Ваше пожертвование является наибольшим утверждением этого урока. Пожертвование будет использовано для улучшения учебной документации и легенд, а также помогать мне написать более интересные учебные пособия.
Добро пожаловать, чтобы следовать
Блог: https://skywind.me/blog
Zhihu: https://www.zhihu.com/people/skywind3000