Зачем читать эту книгу?
Есть много бумажных книг для обучения графике. Есть еще много онлайн-репозиториев знаний, в виде вики, блогов, учебников и форумов. Так что же предлагает эта книга, чего нет у других?
Программируемость. Практически все вышеперечисленные исходники инструктируют начинающих использовать нечто, называемое "графический конвейер". Это конфигурация старых графических процессоров, которая определяет, как будет происходить та или иная операция рендеринга. Обычно считается, что проще всего обучить неофитов графике с помощью конвейера.
Это считается правдой, потому что с конвейером легко что-то сделать. Проще сделать так, чтобы картинки выглядели как нечто реальное. Конвейер похож на тренировочные колеса для велосипеда.
Есть и недостатки. Во-первых, многое из того, что усваивается при таком подходе, должно быть неизбежно брошено, когда пользователь сталкивается с графической проблемой, которая должна быть решена с помощью программируемости. Программируемость стирает почти весь конвейер, поэтому знания нелегко передать.
Более коварная проблема заключается в том, что конвейер может дать иллюзию знания. Пользователь может думать, что он понимает, что делает, но на самом деле он просто копирует и вставляет код. Таким образом, программирование становится сродни магическим ритуалам: вы ставите одни биты кода выше других, и кажется, что все работает.
Это делает отладку кошмаром. Поскольку пользователь никогда по-настоящему не понимал, что делает код, он не может диагностировать, что может означать конкретная проблема. А без этой возможности отладка становится серией случайных догадок о том, в чем проблема.
Напротив, невозможно успешно использовать программируемую систему, не разобравшись в ней. Работа с программируемым графическим железом означает столкновение с проблемами, которые часто берут начало в конвейере. В целом это может означать более медленное начало, но когда вы, наконец, дойдете до конца, вы по-настоящему знаете, как все работает.
Другая проблема заключается в том, что даже если вы действительно понимаете работу графического конвейера, это ограничивает ваши представления о том, как решать проблемы. Из-за своей негибкости он фокусирует ваш ум на определенных возможностях решения проблем и вдали от других. Это побуждает вас думать о текстурах как о картинках, о вершинах как о координатах текстуры, цветах или позициях, и тому подобное. По своей природе она ограничивает творческий потенциал и возможности решения проблем.
Наконец, даже в мобильных системах фиксированная функциональность, как правило, недоступна в графическом оборудовании. Программируемость - это порядок дня для большинства графического оборудования, и в будущем это станет еще более актуальным.
Эта книга предлагает обучение на начальном уровне, которое многие считают продвинутой концепцией. Она учит программированному рендерингу начинающих программистов с нуля.
В этой книге также рассмотрены некоторые важные материалы, которыми часто пренебрегают или иным образом отодвигают на задний план "продвинутые" концепции. Эти концепции не являются по-настоящему продвинутыми, но они часто игнорируются большинством вводных материалов, поскольку они не работают с конвейером.
Эта книга в первую очередь о том, как научиться быть программистом в области графики. Поэтому всякий раз, когда это возможно и практично, в этой книге будет представлен материал таким образом, чтобы читатель мог по-новому и интересно рассмотреть, что может сделать графическое железо. Хороший программист видит в графической аппаратуре набор инструментов для удовлетворения своих потребностей, и эта книга пытается поощрить такое мышление.
Однако эта книга не является книгой о графических API. Несмотря на то, что она использует OpenGL и из необходимости обучает концепциям рендеринга с точки зрения OpenGL, она не является исчерпывающим руководством по OpenGL API. Она будет охватывать большую часть API, как это необходимо для различных графических концепций, но в ней будет много функциональных возможностей, поддерживаемых API, которые не будут охвачены. Если вы уже знаете графику и нуждаетесь в книге, которая учит современному программированию на OpenGL, то эта книга может оказаться для вас слишком базовой. В этой книге вы узнаете львиную долю API, но эта книга в первую очередь ориентирована на графику больше, чем на сам API.
Эта книга предназначена для того, чтобы научить вас быть программистом в области графики. Она не нацелена на какую-либо конкретную область графики; она призвана охватить большинство основ 3D рендеринга. Так что если вы хотите быть разработчиком игр, CAD-программистом, заниматься компьютерной визуализацией или чем-то еще, то эта книга все равно может быть для вас ценным подспорьем. Это не означает, что она охватывает все, что связано с 3D графикой. Вряд ли. Она пытается заложить прочный фундамент для ваших дальнейших исследований в любой интересующей вас области 3D графики.
Одна из тем, которую эта книга не охватывает глубоко - оптимизация. Причина этого в том, что серьезная оптимизация - продвинутая тема. Оптимизации часто могут быть платформенно-специфическими, разными для разных видов оборудования. Они также могут быть специфичными для API, так как некоторые API имеют различные потребности в оптимизации. Оптимизации могут быть упомянуты здесь и там, но это просто слишком сложная тема для начинающего программиста-графика. В приложении есть глава, посвященная возможностям оптимизации, но она дает только достаточно высокоуровневый вид.