Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2014, 21:41   #1
Shkolota
Пользователь
 
Регистрация: 02.04.2013
Сообщений: 51
Восклицание OpenGL, шейдеры

Здравствуйте, возник такой вопрос - тем, кто работал с OpenGL и имеет опыт работы с шейдерами. Какие минимальные действия необходимо проделать для подключения шейдера и последующей обработки им финального кадра (Bloom, размытие, резкость...)? Допустим, у нас есть несколько 2D-объектов, выводящихся на экран при помощи glBegin-glEnd.

Второй вопрос заключается в следующем. Необходимы ли какие-либо знания языка разработки шейдеров (GLSL), если планируется лишь их использование, а на написание пока нет времени? Есть ли возможность использовать уже готовые шейдеры и где их можно взять?
Shkolota вне форума Ответить с цитированием
Старый 27.03.2014, 23:28   #2
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 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.
f.hump вне форума Ответить с цитированием
Старый 28.03.2014, 00:08   #3
Shkolota
Пользователь
 
Регистрация: 02.04.2013
Сообщений: 51
По умолчанию

Ну, к примеру, необходима реализация эффекта Blum в программе. Финальный кадр должен быть подвергнут постобработке. Я так понимаю, что необходимо, во-первых, как-то переключить вывод графики на текстуру (рендер в текстуру), затем, после завершения вывода передать эту текстуру в шейдер, отвечающий за реализацию этого эффекта и после, переключив вывод обратно на буфер, нарисовать финальную текстуру на нем. Так ли это?
Shkolota вне форума Ответить с цитированием
Старый 28.03.2014, 00:22   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Так ли это?
в общем так, но боюсь лучше почитать все же по теме.
Цитата:
их поддержка в ogl нынче опциональна.
deprecaded-устаревшее.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.03.2014, 00:31   #5
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

так это стандартная практика, когда все рисуется в offscreen framebuffer, который надет на текстуру. когда отрисовка в offscreen framebuffer окончена, текстура на которой он основан натягивается на что-то, что должно быть отрисовано в default framebuffer.
f.hump вне форума Ответить с цитированием
Старый 28.03.2014, 00:34   #6
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
deprecaded-устаревшее.
начиная с ogl 3.х весь deprecaded переведен в "compatibility extension", реализация которого оставлена на усмотрение производителей.
f.hump вне форума Ответить с цитированием
Старый 28.03.2014, 10:34   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от f.hump Посмотреть сообщение
начиная с ogl 3.х весь deprecaded переведен в "compatibility extension", реализация которого оставлена на усмотрение производителей.
я знаю, само расширение то да стандартно, но быть не обязано.
только все равно устаревшее и не рекомендуемое к применению.

кстати и если память не изменяет то к glBegin/glEnd шейдеры не распространяются.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.03.2014, 11:04   #8
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

glBegin/glEnd ничем по поведению не отличается от glDrawArrays, шейдеры всё так же работают.
Somebody вне форума Ответить с цитированием
Старый 28.03.2014, 12:14   #9
Shkolota
Пользователь
 
Регистрация: 02.04.2013
Сообщений: 51
По умолчанию

Раз уж зашел разговор о glDrawArrays (это VBO, если не ошибаюсь), то у меня с ним были проблемы, которые пока решить не удалось. Непонимание некоторых моментов. Например, в VBO есть несколько типов буферов: буфер вершин, буфер цветов, буфер текстурных координат и буфер нормалей. Вроде так. И вот такая ситуация: например, мне нужно нарисовать 100 объектов, но у каждого из них своя текстура - те же боевые единицы в игре, в каждый момент времени имеют свою текстуру, соответствующую кадру выводимой ими анимации (речь идет о рисовании 2D-прямоугольников с текстурами). Каким образом при таком подходе можно указать текстуру для каждого из рисуемых прямоугольников? Нигде подобной информации не нашел.

Второй вопрос состоит в использовании функций масштабирования и поворота (glScalef и glRotatef) - чем заменить их при рисовании, используя glDrawArrays? Ведль угол поворота у каждого объекта тоже может быть своим. И третий вопрос - что связано с функцией glBlendFunc - для определения режима наложения текстуры на кадр.

Вопросы не совсем по теме, но, также, имеют к ней косвенное отношение, поэтому, если кто-то с подобным сталкивался, я бы не отказался от помощи.
Shkolota вне форума Ответить с цитированием
Старый 28.03.2014, 12:32   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Shkolota Посмотреть сообщение
Раз уж зашел разговор о glDrawArrays (это VBO, если не ошибаюсь), то у меня с ним были проблемы, которые пока решить не удалось. Непонимание некоторых моментов. Например, в VBO есть несколько типов буферов: буфер вершин, буфер цветов, буфер текстурных координат и буфер нормалей. Вроде так. И вот такая ситуация: например, мне нужно нарисовать 100 объектов, но у каждого из них своя текстура - те же боевые единицы в игре, в каждый момент времени имеют свою текстуру, соответствующую кадру выводимой ими анимации (речь идет о рисовании 2D-прямоугольников с текстурами). Каким образом при таком подходе можно указать текстуру для каждого из рисуемых прямоугольников? Нигде подобной информации не нашел.

Второй вопрос состоит в использовании функций масштабирования и поворота (glScalef и glRotatef) - чем заменить их при рисовании, используя glDrawArrays? Ведль угол поворота у каждого объекта тоже может быть своим. И третий вопрос - что связано с функцией glBlendFunc - для определения режима наложения текстуры на кадр.

Вопросы не совсем по теме, но, также, имеют к ней косвенное отношение, поэтому, если кто-то с подобным сталкивался, я бы не отказался от помощи.
как я сказал читайте про шейдеры.
1)при 2д анимации, лучше не каждый кадр отдельная текстуры, а все кадры в одной текстуре, и потом просто рисовать кусочек нужный.
2-3)учим шейдеры.
http://programmersforum.ru/showpost....6&postcount=27
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шейдеры в 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