![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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. Глава 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; просмотров: 289; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.225.92.173 (0.009 с.) |