Open GL

Open GL е мулти платформен АПИ за рендирање 2D и 3D компјутерска графика.
1 Историја на графичкиот софтвер
Во 1980-тите години развивањето на софтвер кој би можел да функционира со широк аспект на графички хардвер било вистински предизвик. Софтверските инженери пишувале општи инетрфејси и драјвери за секој хардверски дел. Ова било премногу скапо и резултирало во вложување на преголем труд. Во 1990-тите години SIilicon Graphics бил водач во 3Д графики за опслужувачки машини. Нивниот интерфејс бил прифатен како стандард во таа индустрија бидејќи тој интерфејс бил многу полесен за употреба бидејќи поддржувал можност за истовремено генерирање на графичките елементи. Но бидејќи Sun Microsystems, Hewlett-Packard и IBM исто така успеале да извадат хардверски компоненти кои поддржуваат друг стандард SGI во тоа време почнале да слабеат како компанија со нивниот производ IRIS GL интерфејс па морале да преземат нешто со кое што би ги зацврстиле своите позиции на тогашниот пазар. Како резултат на целата ситуација тие го пуштаат OpenGL стандардот. OpenGL како стандардизиран пристап до хардверот има голем придонес во обединувањето на графичкиот хардвер со тоа што почнале да го користат OpenGL како јазик кој имал повисоко ниво за 3Д развој на софтвер. Понатаму излегуваат се понови и поусовршени верзии на OpenGL од 1.0 до 4.1 излезена верзија во јули 2010 година. Директна конкуренција на OpenGL претставува Direct3D на Microsoft кој понатаму прават заеднички проект наречен Fahrenheit кој поради неуспех го напуштаат во 1999 година.
2 Општо за OpenGL
OpenGL (Open Graphics Library) претставува стандардна спецификација на ниско ниво која се користи на повеќе платформи за пишување апликации кои создаваат 2D и 3D компјутерска графика.
Овој најшироко прифатен графички стандард, што пред сè се должи на фактот дека е open-source и со тоа е достапен на сите, се состои од повеќе од 250 различни функциски повици кои можат да се користат за многу работи, вклучувајќи и комлексни тридимензионални сцени и тоа само од едноставни примитиви, како точки, линии, многуаголници, слики и битски карти, но и покомлексни примитиви и својства како списоци за приказ, трансформации за моделирање, осветлување и текстури, прозирност итн. OpenGL е создаден од Silicon Graphics Inc. (SGI) во 1992. Најмногу се користи во CAD, виртуелна реалност, научна визуелизација, информатичка визуелизација, симулација на летови итн. Како конкурент на DirectX се користи и при развој на видеоигри, со таа разлика што е независен од платформата, оперативниот систем, како и системот на прозорци кои се користи, что не е случај за DirectX.
Историјата на OpenGL започнува во 1990-тите кога Kurt Akeley и Mark Segal ја напишале првата OpenGL спецификација - OpenGL 1.0. Оттогаш се издадени уште неколку верзии 1.1, 1.2, 1.2.1, 1.3, 1.4, 1.5, 2.0 и најновата верзија OpenGL 3.0 која е издадена на 11 Август, 2008 година. Моментално OpenGL е управуван од непрофитабилен конзорциум што се занимава со технологија, Khronos Group, Inc.
Во ОpenGL основните операции е да прифаќа примитиви како точки, линии и многуаголници и да ги претвори нив во пиксели. Тоа е возможно и го прави графичкиот pipeline познат како ОpenGL state machine. Повеќето ОpenGL команди или му даваат примитиви на графичкиот pipeline или наоѓаат начин како да ги обработи. ОpenGL претставува интерфејс на ниско ниво со што се бара од програмерите да ги пишуваат сите чекори поединечно за да изгенерираат некоја сцена. Таквиот дизајн на ОpenGL
бара програмерите да имаат добро познавање на графичкиот pipeline но исто така дава можност за поголема слобода за имплементација на нови алгоритми за генерирање.
3 Open GL текстови
OpenGL не поддржува фонтови и со тоа следи дека не е компатибилен за директна поддршка на текстови, но OpenGL поддржува мапа од битови наречена bitmap и таа може да биде искористена за создавање на различни текстови наречени bitmap фонтови. За тоа се користат ортографски проекции за 2Д текст а за подобрување на перформансите се користат display lists. Каде се користат OpenGL фонтовите во денешно време? Најчесто се користат во Авио Контролните инструменти, во географијата со обележување на имиња на мапи, во видео игрите кога се прикажуваат текстови како ранг листи, и каков било текст исто така се користат и во други видео материјали како преводи и друг информативен текст. Постојат три пристапи за генерирање текст во OpenGL. Тие се Bitmap (Raster) фонтови, Geometric (polygonal), и Texture Mapped фонтови.
3.1 Open GL фонтови
OpenGL не поддржува фонтови и со тоа следи дека не е компатибилен за директна поддршка на текстови, но OpenGL поддржува мапа од битови наречена bitmap и таа може да биде искористена за создавање на различни текстови наречени bitmap фонтови. За тоа се користат ортографски проекции за 2Д текст а за подобрување на перформансите се користат display lists. Каде се користат OpenGL фонтовите во денешно време? Најчесто се користат во Авио Контролните инструменти, во географијата со обележување на имиња на мапи, во видео игрите кога се прикажуваат текстови како ранг листи, и каков било текст исто така се користат и во други видео материјали како преводи и друг информативен текст. Постојат три пристапи за генерирање текст во OpenGL. Тие се Bitmap (Raster) фонтови, Geometric (polygonal), и Texture Mapped фонтови.
3.1.1 Bitmap (Raster) фонтови
Овој тип на фонтови се совршени за менување на големината и ротирање. Бидејќи bitmap фонтовите се по природа растеризирани тие се генерираат многу брзо и претставуваат одличен избор каде што е потребна голема брзина. Функцијата со која што се одредува позицијата на фонтот е glRasterPos(). Вообичаени проблеми кои се појавуваат со овие фонтови е што битовите исчезнуваат кога растер позицијата е надвор од видното поле иако останатиот дел од битовите се внатре во видливото поле. Иако овие фонтови изгледаат како успешни потребна е огромна моќ за да се прикаже обичен текст. Количината на податоци потребна за да се прикаже текстот е голема бидејќи секоја рамка се праќа од обработувачот до графичката картичка за секој карактер во рамката. Тоа доведува до значително искористување на ресурсите кои ги поседува машината. Имплементацијата на OpenGL скоро секогаш ја *испревртува содржината на податоцит50е во некој облик помеѓу обработувачот и баферот на рамката. Многу од 3Д графичите чипови не се дизајнирани да цртаат bitmap воопшто, OpenGL софтверскиот драјвер мора да чека сè додека 3Д хардверот не заврши комплетно со цртање па потоа да ги проследи пикселите на баферот. Додека тоа се случува графичкиот хардвер безпотребно чека. Овој тип на фонтови имаат една голема предност во однос на другите типови бидејќи во софтверските OpenGL имплементации е побрз од сите други.
3.1.2 Geometric (Polygonal) фонтови
Секоја буква или знак кај овој вид на фонтови се исцртува со помош на линии и точки таканаречени геометриски примитиви. Може да се бира дали многуаголниците ќе бидат исполнети или празни. За многуаголниците важат истите функции како и за било кој друг многуаголник како што се ротирање, намалување, зголемување, боја, осветлување, текстура. Негативни работи кај овој тип на графички фонтови се тоа што дизајнирањето на фонтовите е доста комплицирано и скапо чини, бројот на линии и многуаголници потребен за да се создава некоја буква или знак може да биде многу голем со тоа што ќе ги злоупотреби перформансите на машината.
3.1.3 Texture - Mapped фонтови
Овој фонт е зачуван во една или две текстурни мапи и секоја буква е нацртана како еден четириаголник. За да се направи ваков тип на фонт потребно ни е bitmap од фонтот и објаснување каде во мапата се наоѓаат буквите. Димензиите на буквите се зачувани во податочната структура во сликовните податоци. За да се создава текстура на фонтот прво се создава фонт се запишуваат димензиите на секој знак и се печатат знаците на мапата од битови. Координатите на текстурата се зачувуваат во glxGLYPHDATA структурата и се печатат понатаму во мапата од битови. Недостатоците кај овие фонтови се тоа што големината на текстурната мапа може да биде многу голема особено ако се потребни и големи и мали букви или ако е потребно фонтот да изгледа убаво и на големи димензии. Ова претставува проблем кај некои графички хардвери кои поддржуваат мали текстурни мапи ( пр. 3Dfx Voodoo генерира мапи до 256 х 256 пиксели). Ако се користи MIP мапирање со намалување или зголемување на фонтовите се добива матен изглед .
3.2 GLX
Пристапот до фонтот се изведува на нормален начин со функцијата XLoadQueryFont().Со користење на glXUseXFont() се создаваат дисплеј листи една за секој знак/буква. Предности се што може да го користи било кој фонт што се наоѓа на системската машина и тоа што лесно се додаваат фонтови за лична употреба со додавање на патеката од фонтот до нашата патека %xsetfp+/usr/people/gerard/fonts
% xset fp rehash
Недостатоци се што користи само bitmap, нема можност за 3Д и работи само на Unix системи.
3.3 GLC
Ова е библиотека која користи Adobe Type1 фонтови. Поддржува bitmap, линии, триаголници како генерирачки стилови. Оваа библиотека е достапна само на SGI опслужувачи под името IRIX 6.2 или понова. Предности се што користи Adobe Type1 фонтови и што може да црта bitmap со ротирање. Недостатоци се што само користи ASCII фонтови кои треба да се претвораат со pfb2pfa.
3.4 GLTT
GLTT претставува бесплатен и квалитетен TrueType платформа. GLTT користи FreeType за да ги извади контурите за растеризирање и има едноставен но моќен интерфејс за генерирање текст. GLTT ги поддржува bitmap, geometric, polygonized стилови на генерирање текст. Предностите се тоа што многу лесно се користи и доста е моќен. Исто така работи и на Windows и на Unix платформа. Недостатоци се тоа што е доста побавен во однос на texure-mapped стилот но и покрај тоа GLTT е многу корисен за генерирање на фонтови од тексурирани слики.
3.5 FTGL
FTGL претставува наследникот на GLTT. FTGL е напишан против FreeType2 интерфејсот. FTGL ги поддржува Geometric, Polygonal, Texture - Mapped, Bitmapped, Antialiased pixmapped стиловите на генерирање. Предности се тоа што многу лесно се користи и е моќно и повеќенаменско. Исто така работи и на Windows и на Unix платформа. Може да го користи било кој TrueType фонт. Недостатоци се тоа што е потребно многу време за вчитување на фонтовите.
3.6 WGL
Овој фонт е наменет исклучиво за Windows платформата. Постојат две опции:
Bitmap - wglUseFontBitmaps()
Outline - wglUseFontOutlines()
Предности: Лесен за употреба и може да користи кој било Windows фонт вклучувајќи TrueType.
Недостатоци: Само за Windows платформа, нема пристап до контурите на фонтот директно. Пристап до димензиите на фонтовите преку Win32 API.
3.7 GLF
Овој тип на генерирачки фонт е создаден од Роман Подобедов. Оваа библиотека поддржува најразлични техники за генерирање на текст вклучувајќи bitmapped, geometric, и texture-mapped. Со GLF може да се прикаже најразличен вид на текст како исполнет, само со контурите и 3Д. Интерфејсот на GLF е јасен но многу обемен. Недостатокот кај овој фонт генератор е тоа што не е документиран и не е можно да се претвораат фонтови во .glf формат.