LINUX.ORG.RU

openGL, cairo, ...


0

0

Всем добрый вечер

Давно хочу заняться компьютерной графикой (аля demoscene, но в 2d и без ассемблерного безумия), сейчас, вроде достаточно разобрался с C, поэтому могу это себе позволить

После долгого гугления определились два кандидата: openGL и Cairo

По OpenGL:

- Везде написано, что он невероятно красив и продуктивен, тогда почему каждый большой проект придумывает свои графические системы (gnome, inkskape - cairo, GIMP - GEGL, QT - ???), а не используют opengl

- Рационально ли использовать его для 2D вещей (все-таки, 3d-движок, как-никак)

- Интересует, почему такой разброс мнений про GLUT - от ненависти до обожания. Что есть этот GLUT и можно ли без него

- как у него со сглаживанием кривых и прозрачностью

По cairo:

- Достаточно ли он быстр? (то есть, если написать аналог флеш-игры на cairo c кучей меняющихся во времени кривых безье с антиалиасингом - не будет CPU:100% как в случае со флеш?)

- Как я понял, cairo пофиг куда выводить, т.е, есть обертки под winapi и под иксы, возвращающие хэндлеры (или что там). А есть ли, что-то более общее, как в опенгл, типа create_window(w, h, ..), чтобы работало везде и чтобы мне ничего не знать про gtk/winapi

★★★★★

> - Рационально ли использовать его для 2D вещей (все-таки, 3d-движок, как-никак)

Почему же нет? Все эффекты перекладываются с CPU на GPU. Масштабирование, вращение, искажения, вертексное освещение, альфа,..
При желании приделываются шейдеры.

andreyu ★★★★★
()

ru.wikipedia.org/wiki/Cairo
Cairo — программная библиотека предназначенная для рендеринга векторной графики с независимым от оборудования API.

ru.wikipedia.org/wiki/OpenGL
OpenGL (Open Graphics Library — открытая графическая библиотека) — спецификация, определяющая независимый от языка программирования кросс-платформенный программный интерфейс для написания приложений, использующих двумерную и трёхмерную компьютерную графику.

Дальше продолжать, или сам разницу поймешь?

eXire ★★
()
Ответ на: комментарий от andreyu

>>Почему же нет? Все эффекты перекладываются с CPU на GPU. Масштабирование, вращение, искажения, вертексное освещение, альфа,..

Ну если так, то да. Хотя, у некоторых vesa драйвера стоят (влом разбираться). И все-таки, осадок есть: 2д-графика, а пространство трехмерное. Есть там pure 2d mode?

makoven ★★★★★
() автор топика
Ответ на: комментарий от eXire

>>ru.wikipedia.org/wiki/Cairo

>>ru.wikipedia.org/wiki/OpenGL

Разницу понимаю, но на уровне libgl.a\libcairo.a, разница не такая очевидная (putpixel, moveto, ...)

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

>И все-таки, осадок есть: 2д-графика, а пространство трехмерное. Есть там pure 2d mode?

Это самый рулез что 3d: имеешь например Z-буфер нахаляву - не нужно думать что чего перекрывает, т.е если надо чтобы элемент был на переднем плане, делаешь координату Z поменьше, если на заднем - побольше. А 2d это тоже самое 3d, только вместо параметров перспективной проекции стоят единички в матрице отрисовки. Если это программа для построения чертежей, можно элементарно сделать вид детали сверху, сбоку и спереди - надо только x, y и z в матрице отображения перетасовать и все.

Absurd ★★★
()
Ответ на: комментарий от Absurd

>>Это самый рулез что 3d: имеешь например Z-буфер нахаляву - не нужно думать что чего перекрывает, т.е если надо чтобы элемент был на переднем плане, делаешь координату Z поменьше, если на заднем - побольше. А 2d это тоже самое 3d, только вместо параметров перспективной проекции стоят единички в матрице отрисовки. Если это программа для построения чертежей, можно элементарно сделать вид детали сверху, сбоку и спереди - надо только x, y и z в матрице отображения перетасовать и все.

Щас представил все это - действительно рулез. Впрочем, в двухмерных игрухах это легко решается при помощи слоев - следующий слой тупо рисуется поверх предыдущего. Всех проблем это не решает, но во многих случаях - достаточно.

Меня больше интересует, что там с GLUT и насколько тормозной cairo, если делать на нем магию с кучей сглаженных безье

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

OpenGL не работает с оконной системой, для этого нужен GLUT, чтоб на разных платформах не использовать разные API (glx, wgl и т.п.) для работы с оконной системой.

Reset ★★★★★
()
Ответ на: комментарий от naryl

> для этого нужен GLUT >Или SDL

Впрочем, это не существенно: gtk все равно придется использовать во все поля. Смущает только, что libgtk.dll около 4Mib (lol) весит и иже с ней glib, libpng, libcairo, libpango. Все вместе мегабайт на 10 если не больше..

makoven ★★★★★
() автор топика

Короче, буду курить каир, авось не подведет с производительностью. Недаром же гномоводы его везде суют..

makoven ★★★★★
() автор топика

cairo - сырая тормозная поделка, подходит только для рендеринга статичных изображений;

OpenGL - промышленный стандарт, на нём можно и динамичные сцены делать, и аппаратное ускорение использовать.

anonymous
()
Ответ на: комментарий от anonymous

>>cairo - сырая тормозная поделка, подходит только для рендеринга статичных изображений;

блина, теперь я снова в состоянии неопределенности Гейзенберга.

Но все-же интерестно, почему тогда гномосекоразработчики перешли на сырую тормозную поделку, а не на промышленный стандарт

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

> Но все-же интерестно, почему тогда гномосекоразработчики перешли на сырую тормозную поделку, а не на промышленный стандарт

Потому что им нужна библиотека для красивой статичной (или с минимальной динамикой) 2D-графики, желательно с прозрачной завязкой на SVG и чтобы поддерживалось всё что нужно для рендеринга PDF. При такой постановке задачи OpenGL тут как-бы ни при чём.

Есть задумка ускорять в cairo тяжёлые операции (типа alpha-blending'а) через opengl (glitz такой мост называется), но пока всё идёт к тому, что эти планы с ускорением так навсегда в стадии эксперимента и останутся, т.к. и без этих сложностей всё терпимо работает.

Так что если хочешь игрушку писать, то либо OpenGL, либо 2d-графика в стиле "ретро" и SDL. Для 2-d графики можно порендерить спрайты через cairo _один раз_ перед запуском на этапе "loading", на этом полезность cairo заканчивается.

Чтобы оценить, как выглядит простенькая игрушка на OpenGL, как всё это замечательно работает, когда етсь аппаратное ускорение, и как всё нещадно неиграбельно тормозит, когда его нет, рекомендую посмотреть игру "Chromium". Она в репозиториях есть на всех мажорных дистрах.

anonymous
()
Ответ на: комментарий от anonymous

> игру "Chromium"

я к тому, что это как раз 2-d игра, но сделана на opengl.

anonymous
()
Ответ на: комментарий от anonymous

>>Так что если хочешь игрушку писать, то либо OpenGL, либо 2d-графика в стиле "ретро" и SDL

А что за стиль - "ретро" для 2d графики? Что-то, связанное с SDL? Если да, то какие инструменты SDL предоставляет для рисования?

>>Чтобы оценить, как выглядит простенькая игрушка на OpenGL, как всё это замечательно работает, когда етсь аппаратное ускорение, и как всё нещадно неиграбельно тормозит, когда его нет, рекомендую посмотреть игру "Chromium"

Тормозит та ведь из-за opengl.. А если писать на чем-то заведомо двухмерном - наверное не так сильно будет тормозить. Вот только на чем? Каир обкакали..

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

>>какие инструменты SDL предоставляет для рисования?

то есть, для работы с видео\графикой

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

Там, по сути, один инструмент - рисование изображений (квадратиков) на холсте. Полагаю, что изображения могут быть полупрозрачными. А уж как ты эти изображения будешь формировать - это твоё дело. А под "ретро" я имею в виду, что по сравнению с играми на opengl 2-d графика выглядит как ретроо :)

anonymous
()

Если нужна качественная 2D графика с антиалисингом и субпиксельным позиционированием, то чистый OpenGL не подходит. Вот статья: http://homepage.mac.com/arekkusu/bugs/invariance/HWAA.html Она немного устарела, но ситуация в принципе не изменилась, т.к. видеокарточки затачивают практически только под 3D игрушки и спецэффекты в них. Поэтому только часть операций может использовать hardware acceleration, а часть все равно будет задействовать CPU.

Если нужно именно качественное 2D, то лучше использовать что-то вроде Cairo или QtArthur. А если можно обойтись просто спрайтовой графикой, то SDL или даже чистый OpenGL подойдут.

anonymous
()
Ответ на: комментарий от anonymous

>Чтобы оценить, как выглядит простенькая игрушка на OpenGL, как всё это замечательно работает, когда етсь аппаратное ускорение, и как всё нещадно неиграбельно тормозит, когда его нет, рекомендую посмотреть игру "Chromium". Она в репозиториях есть на всех мажорных дистрах.

Есть еще такая игрушка gish - правда платная, но в 2D и SDL+OpenGL. Очень красиво и не тормозит. Там еще OpenGL'овское освещение используется вовсю. Можно найти демку.

imp ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.