рендеринг точек в openGL и GLSL - PullRequest
4 голосов
/ 29 декабря 2011

Вопрос: Как мне рендерить точки в openGL, используя GLSL?


Информация: некоторое время назад я выполнил гравитационное моделирование в python и использовал рендеринг blender.Это выглядело как это .В качестве упражнения я портирую его на openGL и openCL.Я думаю, что на самом деле он уже работает в openCL.Только когда я потратил немало времени, работая в openCL, я понял, что трудно понять, правильно ли это, не имея возможности увидеть результат.Поэтому я начал играть с openGL.Я следовал учебнику openGL GLSL по вики-книгам, очень информативным, но он не охватывал точки или частицы.

Я не знаю, с чего начать.большинство уроков, которые я найду, предназначены для программы openGL по умолчанию.Я хочу сделать это с помощью GLSL.Я все еще новичок во всем этом, так что прости меня за мой потенциальный идиотизм, если ответ прямо у меня под носом.То, что я ищу, это как сделать ореолы вокруг точек, которые сливаются друг с другом.У меня есть приблизительное представление о том, как это сделать в фрагментном шейдере, но, насколько мне известно, я могу захватывать только те пиксели, которые заключены в многоугольники, созданные моими точками.Я уверен, что есть способ обойти это, было бы сумасшествием, если бы этого не было, но я в своем новичке не в курсе.Кто-нибудь может дать мне какое-то направление здесь?спасибо.

Ответы [ 2 ]

7 голосов
/ 30 декабря 2011

Я думаю, что вам нужно визуализировать частицы как GL_POINTS с включенным GL_POINT_SPRITE, затем использовать ваш фрагментный шейдер, чтобы либо отобразить текстуру обычным способом, либо процедурно сгенерировать градиент гало.

Когда вы выполняете рендеринг в режиме GL_POINTS, установите gl_PointSize в своем вершинном шейдере, чтобы установить размер частицы. Переменная vec2 gl_PointCoord даст вам координаты вашего фрагмента в шейдере фрагментов.

РЕДАКТИРОВАТЬ: Настройка gl_PointSize вступит в силу, только если GL_PROGRAM_POINT_SIZE был включен. В качестве альтернативы, просто используйте glPointSize, чтобы установить одинаковый размер для всех точек. Кроме того, в OpenGL 3.2 (ядро) флаг GL_POINT_SPRITE был удален и фактически всегда включен.

0 голосов
/ 30 декабря 2011

просто нарисуйте точечные спрайты (используя GL_POINT_SPRITE), используйте функции смешивания: gl_src_alpha и gl_one, и тогда должны быть видны «ореолы». Смешивание должно отвечать за «ореолы», поэтому поищите дополнительную информацию по этой теме. Также вы должны отключить глубину записи.

вот ссылка на это: http://content.gpwiki.org/index.php/OpenGL:Tutorials:Tutorial_Framework:Particles

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...