![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 02.04.2013
Сообщений: 51
|
![]()
Здравствуйте, возник такой вопрос - тем, кто работал с OpenGL и имеет опыт работы с шейдерами. Какие минимальные действия необходимо проделать для подключения шейдера и последующей обработки им финального кадра (Bloom, размытие, резкость...)? Допустим, у нас есть несколько 2D-объектов, выводящихся на экран при помощи glBegin-glEnd.
Второй вопрос заключается в следующем. Необходимы ли какие-либо знания языка разработки шейдеров (GLSL), если планируется лишь их использование, а на написание пока нет времени? Есть ли возможность использовать уже готовые шейдеры и где их можно взять? |
![]() |
![]() |
![]() |
#2 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
![]()
в целом все как обычно:
- создать ogl контекст - загрузить код шейдера, компильнуть, линкануть - инициализировать все что нужно инициализировать (frame buffer object, vertex array object, attribute arrays) - подключить шейдер, инициализировать uniforms - glDrawArrays кстати, не слышал, чтобы glBegin/glEnd работали с шейдерами, их поддержка в ogl нынче опциональна. я еще могу представить использование шейдеров без знания GLSL, но их использование без знания ogl хотя бы версии 3.2 я представить не могу. Последний раз редактировалось f.hump; 27.03.2014 в 23:36. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 02.04.2013
Сообщений: 51
|
![]()
Ну, к примеру, необходима реализация эффекта Blum в программе. Финальный кадр должен быть подвергнут постобработке. Я так понимаю, что необходимо, во-первых, как-то переключить вывод графики на текстуру (рендер в текстуру), затем, после завершения вывода передать эту текстуру в шейдер, отвечающий за реализацию этого эффекта и после, переключив вывод обратно на буфер, нарисовать финальную текстуру на нем. Так ли это?
|
![]() |
![]() |
![]() |
#4 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
![]() |
![]() |
![]() |
#5 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
![]()
так это стандартная практика, когда все рисуется в offscreen framebuffer, который надет на текстуру. когда отрисовка в offscreen framebuffer окончена, текстура на которой он основан натягивается на что-то, что должно быть отрисовано в default framebuffer.
|
![]() |
![]() |
![]() |
#6 | |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
только все равно устаревшее и не рекомендуемое к применению. кстати и если память не изменяет то к glBegin/glEnd шейдеры не распространяются. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
#8 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
![]()
glBegin/glEnd ничем по поведению не отличается от glDrawArrays, шейдеры всё так же работают.
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 02.04.2013
Сообщений: 51
|
![]()
Раз уж зашел разговор о glDrawArrays (это VBO, если не ошибаюсь), то у меня с ним были проблемы, которые пока решить не удалось. Непонимание некоторых моментов. Например, в VBO есть несколько типов буферов: буфер вершин, буфер цветов, буфер текстурных координат и буфер нормалей. Вроде так. И вот такая ситуация: например, мне нужно нарисовать 100 объектов, но у каждого из них своя текстура - те же боевые единицы в игре, в каждый момент времени имеют свою текстуру, соответствующую кадру выводимой ими анимации (речь идет о рисовании 2D-прямоугольников с текстурами). Каким образом при таком подходе можно указать текстуру для каждого из рисуемых прямоугольников? Нигде подобной информации не нашел.
Второй вопрос состоит в использовании функций масштабирования и поворота (glScalef и glRotatef) - чем заменить их при рисовании, используя glDrawArrays? Ведль угол поворота у каждого объекта тоже может быть своим. И третий вопрос - что связано с функцией glBlendFunc - для определения режима наложения текстуры на кадр. Вопросы не совсем по теме, но, также, имеют к ней косвенное отношение, поэтому, если кто-то с подобным сталкивался, я бы не отказался от помощи. |
![]() |
![]() |
![]() |
#10 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
1)при 2д анимации, лучше не каждый кадр отдельная текстуры, а все кадры в одной текстуре, и потом просто рисовать кусочек нужный. 2-3)учим шейдеры. http://programmersforum.ru/showpost....6&postcount=27 Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Шейдеры в OpenGL для начинающих. | _PROGRAMM_ | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 12 | 21.12.2020 23:43 |
шейдеры | ser70 | Общие вопросы C/C++ | 2 | 05.11.2014 09:54 |
Шейдеры | Inv1s | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 3 | 28.06.2012 13:46 |
Шейдеры (HLSL) и OpenGL | ImmortalAlexSan | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 3 | 11.04.2012 18:54 |
Шейдеры | _-Re@l-_ | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 7 | 01.08.2010 14:33 |