Освоил ARB в idTech4 с помощью заметок Тревора Хогана, вытащенных из wayback machine, и книг по DirectX. После чего понял, что на самом деле сабж основан на OpenGL. Забавно.
Фактически, это простенький ассемблер для GPU. Сложность заключается в понимании тех преобразований, которые он выполняет с входными данными.
Понимание преобразований начинается с конвейера визуализации (преобразования локальных координат в мировые, пространство вида и пр.).
Предположения:
Формат данных - float4 (4 числа с плавающей запятой), нативный формат для GPU. Меньшая разрядность (float1,2,3) расширяется до float4.
Для вершинной программы (VP) входные данные - атрибуты ( ATTRIB ) вершины, получаемые с помощью vertex.[attrib] (чаще всего, это координаты вершины или vertex.position). Преобразования с ними осуществляются с помощью матриц преобразования, доступ к которым VP может получить через состояния OpenGL state.matrix., задаваемые в качестве параметров-констант (PARAM). Для промежуточных вычислений используются временные переменные (TEMP), доступные как для чтения, так и для записи.
Фрагментные программы (FP) получают доступ к данным, обработанным VP (их работа вторична), и используются для вычисления цвета конкретного пиксела. Грубо говоря, это раскраска треугольников, из которых состоят трехмерные объекты, с учетом их положения в трехмерной сцене, параметров окружения, освещения, текстур. Вычисления связаны, как правило, с преобразованием цвета пиксела путем сопоставления ему соответствующего тексела текстуры (текстур).
Смысл всего - проекция трехмерной сцены с правильно расставленными, освещенными и текстурированными объектами в плоскость экрана.
Заметки на полях:
источник
fragmentProgram <prog> Use an ARB fragment program with this stage
vertexProgram <prog> Use an ARB vertex program with this stage program <prog> Shortcut for:
fragmentProgram <prog>
vertexProgram <prog>
vertexParm <index> <exp0> [,exp1] [,exp2] [,exp3] Values to pass to the vertex program. One expression gets repeated across all 4 values. Two expressions put 0, 1 in z, w. Three expressions put 1 in w.
fragmentMap <index> [options] <map> The image map to use for texture unit <index>. [options] can be cubeMap, cameraCubeMap, nearest, linear, clamp, noclamp, zeroclamp, alphazeroclamp, forceHighQuality, uncompressed, highquality, or nopicmip
источник
З.Ы. Doom3 написан на C++ и использует OpenGL API версии 1.1 (1.4?) с расширениями.
Теги: steps3D, state.matrix.mvp, F.Luna, origin, dot product, TEXCOORD.
См. также Сент-Лаурент, Шейдеры для программистов и художников (марево).
-
Скрыть объявление
Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.
-
Скрыть объявлениеЕсли Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.
Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
- Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
- Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
- Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
- Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
С уважением, администрация форума Old-Games.RU
Комментарии
Сортировать комментарии по