Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Глава 45. Шейдеры GLSL. Псевдо-инстансингСодержание книги
Поиск на нашем сайте
Видовая матрица — это матрица 4x4, которая содержит все преобразования объекта в мировых координатах (масштабирование, параллельные перенос и поворот). Итак, инстансинг — дешёвое в плане производительности копирование уже существующей геометрии. Мы рассмотрим здесь самый лучший вариант копирования геометрии для карт без OpenGL 3.1. Суть псевдо-инстансинга вот в чём: передаём в шейдер мировую (модельно-видовую) матрицу инстанса и рассчитываем в нём позицию каждой вершины. Ближе к делу. Про псевдо-подход к инстансингу, предложенный в 2004 году, можете прочитать в документации от NVidia: http://developer.download.nvidia.com/SDK/9.5/Samples/DEMOS/OpenGL/src/glsl_pseudo_instancing/docs/glsl_pseudo_instancing.pdf. Перевод можете посмотреть на этом сайте с открытым редактированием (как редактировать материалы см. FAQ на сайте): http://trueimpostors.ucoz.ru/publ/1-1-0-3. Существует два предложенных варианта реализации инстансинга. Первый — это педавать view трансформации инстанса через текстурные координаты. Этот подход оправдывает себя с незкополигональными объектами. Если полигонов в объекте много, то для создания инстансов лучше подойдёт инстансинг через uniform переменные. Итак, давайте реализуем псевдо-инстансинг. Вам понадобятся шейдеры следующего вида. Вершинный, выполняет основную работу: #version 120 uniform vec4 worldMatrix[3]; uniform mat4 viewMatrix;
void main(void) { vec4 positionWorld; vec4 positionView; positionWorld. x = dot(worldMatrix[0], gl_Vertex); positionWorld. y = dot(worldMatrix[1], gl_Vertex); positionWorld. z = dot(worldMatrix[2], gl_Vertex); positionWorld. w = 1.0; positionView = viewMatrix * positionWorld; gl_Position = gl_ProjectionMatrix * positionView; } Фрагментный: void main(void){ gl_FragColor = vec4(0. 5,0. 5,0. 5,1); } Рассмотрим вершинный шейдер, который и выполняет инстансинг (фрагментный здесь только окрашивает пиксели). viewMatrix должна содержать видовую матрицу, её легко вытянуть, получив значение GLSceneViewer.Buffer.ModelViewMatrix.worldMatrix — это будущая модельная матрица. Мы, в процессе работы приложения, сформируем её из матриц масштаба, поворота и позиции. Для этого формирования создайте в вашем проекте такую функцию: function CreateWorldMatrix(Scale, Pos, Axis: TVector; Angle: single): TMatrix; var mw: TMatrix; begin mw:= MatrixMultiply(CreateRotationMatrix(Axis, 10 * Angle), CreateTranslationMatrix(Pos)); mw:= MatrixMultiply(mw, CreateScaleMatrix(Scale)); TransposeMatrix(mw); // Результат - модельная матрица, которую нужно передавать в шейдер. Result:= mw; end;
Глава 46. Шейдеры GLSL. Пишем сами
Пришло время попробовать свои силы в самостоятельном написании GLSL шейдеров. В этой главе я буду давать вам задания по написанию разных шейдеров и буду давать подсказки на всякий случай. Вы можете пользоваться как классом TGLProgramHandle, так и компонентом GLSLShader. Напишите шейдер, который закрасит кубик в ваш любимый цвет. Подсказка №1: не забудьте, что все числа в шейдере задаются с точкой, т.е. 1.0, 5.2, 3.0. Используя шейдеры из главы про текстурирование и из главы про освещение по Фонгу, составьте такую шейдерную программу, которая позволит вам рассчитывать освещение для затекстурированного объекта. Подсказка №1: лучше взять за основу шейдер освещения по Фонгу; в вершинном шейдере для использования текстуры нужно рассчитать текстурные координаты, а во фрагментном нужно умножить цвет текущей вершины на ambient и diffuse составляющие. Глава 47. ATI RenderMonkey
Создание шейдеров — трудная задача, поэтому очень удобно создавать их в специальных программах. Также в этих программах очень удобно настраивать шейдер, а уже потом экспортировать его код. Самой известной программой в этой области является RenderMonkey. Бесплатно скачать самую свежую версию RenderMonkey можно здесь: http://developer.amd.com/gpu/rendermonkey/Pages/default.aspx Хорошие уроки по использованию RenderMonkey можно посмотреть здесь: http://www.dtf.ru/articles/print.php?id=38592 Интерфейс RenderMonkey интуитивен и похож на интерфейс MS Visual Studio. Рабочее пространство разделено на три основные зоны: браузера эффектов, служебных сообщений и визуализации. Согласно терминологии, которой придерживаются разработчики из ATI, совокупность элементов древовидной структуры, отображаемой в окне браузера, называется эффектом. В комплект поставки входят 35 готовых эффектов для OpenGL, позволяющих визуализовать поверхности мыльных пузырей, воды, древесины, металла, меха, огня и др. Двойной щелчок левой клавишей мыши по любому из элементов дерева приводит к вызову соответствующих инструментов его редактирования. Синтаксические конструкции исходного кода шейдеров выделяются разными цветами. Всякое изменение любого элемента приводит к мгновенному перерисовыванию содержимого окна визуализации. Для сохранения результатов используется стандартный формат XML, позволяющий разработчикам легко организовывать импорт настроек эффекта в свои приложения. Впечатления от RenderMonkey напоминают нечто среднее между опытом работы с материалами в 3DS Max или Maya и опытом программирования в современной оконной среде IDE. Несмотря на оригинальность общей идеи и множество неоспоримых частных достоинств, RenderMonkey, прежде всего, является оружием конкурентной борьбы в руках ATI. Поэтому нет ничего удивительного в том, что наиболее эффективно и устойчиво она работает с чипами серии Radeon, и вряд ли в будущем нам стоит надеяться на исправление этого перекоса. В заключение хотелось бы дать пару практических советов всем программистам, желающим перенести эффект из этой среды в GLScene. В RenderMonkey есть «predefined» переменные, они рассчитываются по какому-то алгоритму. Например, fTime0_X выдаёт числа по порядку. Переменные типа color — это обычные vec4; а специальный раздел в среде для них только для удобства выбора цвета.
|
||||
Последнее изменение этой страницы: 2016-04-19; просмотров: 280; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.188.137.209 (0.009 с.) |