Я использую OpenGL и рисую многоугольники в 2D-представлении. Как я мог размыть полигон, не используя glsl, и только такие вещи, как буфер трафарета и прочее. СпасибоРазмытие с OpenGL?
ответ
Обычный метод использует буфер накопления вместо буфера трафарета. Вы в основном повторно рисуете свои полигоны (ы) несколько раз, но каждый раз меняете вид просмотра. Именно то, что вы меняете, определяет стиль размытия, который вы получаете. Например, если вам нужен эффект, например масштабирование объектива камеры, вы можете слегка изменить вид усечения между кадрами. Если вы хотите размытие изображения, вместо этого вы меняете угол обзора камеры. С некоторой дополнительной работой вы можете сделать несколько странно выглядящих эффектов, таких как перемещение точки обзора вперед и одновременное масштабирование, поэтому (большая часть) сцена остается примерно того же размера, но перспектива, которую вы просматриваете он от постоянных изменений.
Остерегайтесь того факта, что использование буфера накопления может быть чрезвычайно медленным (как из-за необходимой перерисовки, так и из множества графических чипсетов потребительского класса, не обеспечивающих буфер ускоренного накопления аппаратного ускорения). –
@Greg: Это, к сожалению, слишком верно! –
Есть два быстрых и грязных пути. GLSL или Cg - безусловно лучшее решение, особенно если вам нужно приличное размытие (гауссовское, box, motion и т. Д.). Однако вы можете:
- Измените изображение с более низким разрешением, как правило, на текстуру, затем визуализируйте эту текстуру на экране при высоком разрешении. Это размывает изображение, но вам нужно использовать трилинейную или анистропическую фильтрацию, чтобы он выглядел хорошо. Обычно этого все равно не будет, но это поможет.
- Измените изображение на текстуру, визуализируйте один раз на экран с полной непрозрачностью, затем включите смешение, поверните альфа и визуализируйте изображение влево немного, немного немного, немного вверх, немного вниз ... и т. д. Вам нужна малая непрозрачность для внутренних визуализаторов, но они будут эффективно размывать сцену. Вы также можете играть с режимами смешивания, может быть полезным SrcColor/InvSrcColor или DstColor/InvDstColor.
Есть несколько способов сделать это без шейдеров, но ни один из них не является оптимальным.
- 1. Размытие Cocos2d с шейдерами
- 2. Размытие видео в реальном времени с OpenGL 2.0 на Android
- 3. Модель Размытие в углу при повороте в opengl
- 4. Android Размытие с Renderscript
- 5. Размытие страницы с CSS
- 6. Размытие и размытие элементов на моем html
- 7. Размытие/Размытие 2 разных фонов при наведении
- 8. Буксировочное размытие?
- 9. быстро радиальное размытие в ИОС
- 10. Размытие части изображения с CSS
- 11. Размытие тела с помощью javascript
- 12. Размытие UIImageView с градиентом alpha
- 13. «Радиальное размытие» с использованием OpenMP
- 14. Размытие изображения с неравномерным фильтром
- 15. неразрушающий фильтр в OpenGL
- 16. Оказание от текстуры от FBO вызывает размытие
- 17. Размытие границы формы холста
- 18. Qml и размытие изображения
- 19. Размытие фона контейнера только
- 20. Как предотвратить размытие рисунка?
- 21. Размытие ядра низкокачественной камеры
- 22. Как это размытие работает
- 23. Drawable resize вызывает размытие
- 24. Размытие эффекта на слайдере
- 25. входное размытие не срабатывает
- 26. Размытие рисунка на изображении
- 27. Строительство Гауссово размытие?
- 28. JQuery: Введите размытие
- 29. размытие, фильтры и шум
- 30. Создать пользовательский размытие UIView
Что относительно карты текстуры? Вы можете генерировать квадраты с соответствующим образом размытым взглядом (альфа уменьшается к краю или чем-то еще), а затем текстура отображает ваши полигоны, чтобы их края тоже шли. Это только размывается внутри. Однако истинное размывание будет выходить за пределы границы многоугольника. – cape1232
Я, конечно, не специалист в OpenGL, но я бы не стал спорить, что самое простое решение исключает GLSL. – zneak
OpenSceneGraph имеет атрибут [Fog] [http://www.openscenegraph.org/projects/osg/wiki/Support/Tutorials/StateSets], который можно включить в наборе состояний. OSG основана на OpenGL (правильно?), Поэтому должен быть способ дублирования эффекта. – cape1232