Компьютерная графика:Трассировка лучей и программирование 3D-рендеринга

StackOverflow https://stackoverflow.com/questions/445456

Вопрос

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

Пара проектов, которые я нашел в некоторых университетах, великолепны, хотя меня больше всего интересуют две вещи:

  • Трассировка лучей:
    • Я хочу написать Raytracer в течение следующих двух лет.Что мне нужно знать?Я еще не фантастический программист (Java, C и Prolog - мои основные языки на сегодняшний день), но я медленно учусь каждый день.Кроме того, мое математическое образование не так уж велико, поэтому любые указания на книги для чтения или советы по написанию такой программы были бы фантастическими.Я, как правило, довольно быстро разбираюсь в этих вещах, так что не стесняйтесь забрасывать меня ссылками.
  • Программирование 3D Визуализированных Моделей
    • Я просмотрел пару проектов, в которых студенты разрабатывали модели и использовали их в играх.Я сделал пару 2D-игр с растровыми изображениями, но никогда не работал с 3D-моделями.Чему мне нужно было бы научиться в отношении программирования этих моделей?Если это поможет, раньше меня вполне устраивали 3D Studio Max и Cinema4D (хотя, кажется, все курсы используют Maya), но я не прикасался к ним около четырех лет.

Извините, что задаю такие расплывчатые и, давайте будем честны, глупые вопросы.Это просто то, чем я хотел заняться некоторое время, и то, что было бы хорошо в качестве крупного проекта, который я мог бы разработать в свое время.

Сопутствующие Вопросы

Это было полезно?

Решение

Книга "Компьютерная графика:Принципы и практика" (известный в кругах компьютерной графики как "Foley-VanDam") является базовым для большинства курсов компьютерной графики и в нем очень подробно рассматривается тема реализации трассировщика лучей.Он довольно устарел, но все равно самый лучший, afaik, и основные принципы остаются теми же.

Я также поддерживаю рекомендацию относительно Математика Эрика Ленгиела для программирования 3D-игр и компьютерной графики.Она не такая подробная, но это замечательный обзор математических основ, необходимых для 3D-программирования, в конце каждой главы есть очень полезные резюме, и она написана доступным, не слишком пугающим образом.

Кроме того, вам, вероятно, понадобятся некоторые основы OpenGL или DirectX.Проще начать работать с 3D API, а затем изучить базовую математику, чем наоборот (на мой взгляд), но возможны оба варианта.Просто поищите OpenGL на SO, и вы также должны найти пару хороших ссылок.

Другие советы

Я могу порекомендовать пбрт, это книга и средство визуализации на физической основе, используемое для обучения выпускников компьютерных наук.Описание используемой математики приятное и понятное, и поскольку оно написано в разделе "грамотное программирование", вы также можете увидеть соответствующий код (на C ++).

В Конкурс ICFP по программированию 2000 года попросили участников создать трассировщик лучей за три дня.У них есть хорошая спецификация для простого трассировщика лучей, и вы также можете получить код для выигрышных записей и некоторых других записей.Там были записи на большом количестве различных языков программирования.Это может быть хорошим способом для вас начать работу.

Самый краткий полезный ответ, который я могу дать, заключается в том, что большинство важных алгоритмов можно найти в Рендеринг в реальном времени Томас Акенин-Меллер, Эрик Хейнс и Нати Хоффман, а библиография в конце содержит ссылки на необходимую математику.На их веб-сайте также есть список рекомендуемых книг для чтения.

Самая полезная книга по математике, которую я читал на эту тему, - это книга Эрика Ленгиела Математика для программирования 3D-игр и компьютерной графики.Математика, в которой вы нуждаетесь больше всего, - это геометрия (очевидно) и линейная алгебра (для работы со всеми матрицами).

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

У моего профессора есть сайт, расположенный здесь и там есть конспекты его лекций и наборы задач, с которыми вы можете ознакомиться.

Нашим последним проектом действительно был raytracer, но как только вы узнаете математику, стоящую за ним, кодирование (неэффективное) становится тривиальным.

Математическое введение в эти темы см.

http://graphics.idav.ucdavis.edu/education/GraphicsNotes/homepage.html

Проверить http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-1-writing-a-simple-raytracer/

Это очень хорошее место, чтобы узнать о трассировке лучей и рендеринге в целом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top