task4-v3 (794727), страница 3
Текст из файла (страница 3)
В предоставляемом Вам шаблонебудет небольшой класс RenderableTexture2D, который реализует работу с framebuffer-ом OpenGL.5.8 ПОДСКАЗКИ О СИМУЛЯЦИИ НА GPUВнимание! Симуляция на GPU – это достаточно сложная задача. Прежде всего, потому что наодну вершину действует сразу несколько пружин. А поскольку на GPU все операции записи вбуферы позиций и скоростей будут проходить параллельно, нельзя просто распараллелить работупо рёбрам (пружинам). Существует 2 варианта решения этой проблемы:1.
Рассчитать силы для каждой пружины, и суммировать силы в каждой вершине припомощи атомарных операций. Но это медленно! (хотя может быть быстрее, чем на CPU)2. Распараллеливать вычисления по вершинам и для каждой вершины на GPU передаватьсписки соединённых с ней пружинами других вершин. Эти списки можно составить,например, заранее и передать на GPU в виде буфера или текстуры с целочисленнымформатом.Для выполнения симуляции на GPU вы можете использовать 3 механизма:1.
Расчёт позиций и скоростей в вершинном шейдере и сохранение позиций искоростей при помощи transform feedback. Этот механизм хорош тем, что он имеетподдержку на достаточно большом числе GPU и минимизирует объём каквычислений, так и нагрузки на шину памяти, поскольку вычисленные позициивершин сразу отправляются дальше по графическому конвейеру, формируятреугольники и создавая дополнительную работу для фрагментного шейдера. Этотспособ самый эффективный и самый правильный с точки зрения индустрииgamedev-а.При реализации симуляции этим способом вам придётся вычислять нормали не повершинно а по треугольникам в геометрическом шейдере. В этом и только в этомслучае допускаются несглаженные нормали.2.
Расчёт позиций и скоростей в OpenGL Compute Shaders (4.3 и выше). Этот путьнемного проще, чем предыдущий, и менее эффективен, т.к. при последующемзапуске на отрисовку вершинный шейдер выполнит одну лишнюю операциючтения.13Расчёт нормалей должен быть выполнен как дополнительный вызов computeshader-a, вычисляющий сглаженные по-вершинные нормали.3. Расчёт позиций и скоростей в OpenСL и использования механизма взаимодействияс OpenGL чтобы OpenCL мог напрямую записывать данные в буфера, которыебудут доступны для OpenGL.С нормалями аналогично пункту 2. Должно быть отдельное ядро, рассчитывающеенормали.6 ЛИТЕРАТУРА[0] MSU Graphics & Media Lab OpenGL4 SDK.
URL = https://github.com/FROL256/msu-opengl4-sdk[1] Коэффициент Упругости. Закон Гука. Информация из википедии.https://ru.wikipedia.org/wiki/Коэффициент_упругости[2] Метод конечных элементов. Доц. Хандримайлов ХНАДУ. Кафедра теоретической механики игидравлики. URL =http://files.khadi.kharkov.ua/faily/item/download/5176_5d6ce64a0297a2f261d20213726a01a8.html[3] Боресков А. В. Модели Освещения. URL = http://steps3d.narod.ru/tutorials/lighting-tutorial.html[4] Texture Space Diffusion. http://http.developer.nvidia.com/GPUGems/gpugems_ch16.html[5] Уроки OpenGL3. https://code.google.com/p/gl33lessons/[6] Боресков А.В. Статьи по 3D графике.
URL = http://steps3d.narod.ru/articles.html[7] OpenGL Programming Guide. The official guide to learning OpenGL*, version 4.3 8 издание. URL =http://www.ics.uci.edu/~gopi/CS211B/opengl_programming_guide_8th_edition.pdf[8] Более неформальный цикл уроков по OpenGL4 http://triplepointfive.github.io/ogltutor/index.html[9] Jason L. McKesson. Learning Modern 3D Graphics Programminghttp://www.pdfiles.com/pdf/files/English/Designing_&_Graphics/Learning_Modern_3D_Graphics_Programming.pdf[10] Norbert Nopper’s samples https://github.com/McNopper[11] FIDESYS.
Отечественный промышленный пакет прочностного анализа, основанный на МКЭ.URL = http://www.cae-fidesys.com/ru.14.















