Wat is OpenGL?

ArticleCategory:

Graphics

AuthorImage:

[Foto van de Auteur]

TranslationInfo:

original in es Miguel A. Sepúlveda

es to en Miguel A. Sepúlveda

en to nl Alexander Van Hecke

AboutTheAuthor:

Studeerde af aan de Universiteit van Washington (USA) in 1993. Werkt nu bij de Hollywood- special effect firma digital domain en deed daarvoor wetenschappelijk werk in Spanje, Israël, Japan en de VS. Ontdekte Linux voor het eerst in de periode rond de kernel versie 0.98 (Liefde op het eerste gezicht). Hij is stichter en ex-hoofdredacteur van LinuxFocus magazine.

Abstract:

Dit artikel is de eerste in een reeks artikels over OpenGL en de ondersteuning voor OpenGL in Linux. Het is bedoeld voor programmeurs die willen leren hoe ze snelle 2D en 3D graphics aan hun applicaties kunnen toevoegen.

ArticleIllustration:

[Illustratie]

ArticleBody:

Introductie

OpenGL is zonder twijfel de API die het meest gebruikt wordt in de industrie voor het ontwikkelen van 2D en 3D grafische applicaties. Men zou kunnen zeggen dat het de opvolger is van de fantastische Silicon Graphics IRIS GL-bibliotheek die de SGI workstations zo populair maakte als het beste platform voor wetenschappelijke, engineering en speciale effecten ontwikkeling.SGI heeft in OpenGL veel van hun expertise gestoken om een gemakkelijk te gebruiken, intuitieve, overdraagbare en netwerkcapabele API voor de toekomst te maken. We moeten SGI ook krediet geven omdat zij inzagen dat open standaarden belangrijk zijn. Verschillende hardware en softwaremakers werkten mee aan de OpenGL specificatie en staan er ook volledig achter. Hierdoor kunnen OpenGL applicaties vrij gemakkelijk naar (bijna) elk platform overgedragen worden, van PC windows95, tot ons glorieus Linux systeem, high-end UNIX workstations, zelfs mainframe supercomputers. De Architectural Review Board controleert de OpenGL specificaties, en accepteert of weigert veranderingen en stelt conformantie testen voor.

In tegenstelling tot de oude IRIS GL-bibliotheek is OpenGL door zijn ontwerp, platform- en besturingssysteemonafhankelijk. Het kan omgaan met netwerken, dus het is mogelijk om onze OpenGL applicatie te splitsen in een server en een client, die het eigenlijke renderen van de graphics doet. Er is een speciaal protocol om OpenGL commando's via een netwerk door te geven van server naar client of omgekeerd. Dankzij de besturingssysteemonafhankelijkheid, hoeven server en client niet op hetzelfde platform te draaien. Vrij dikwijls is de server een supercomputer die een complexe simulatie draait terwijl de client een eenvoudige workstation is die niet veel meer doet dan de grafische visualisatie. OpenGL maakt het ontwikkelaars gemakkelijk om applicaties te schrijven die eenvoudig gebruikt kunnen worden op meerdere platforms.

Boven alles is OpenGL een gestroomlijnde, supersnelle grafische rendering bibliotheek en er zijn veel grafische acceleratie kaarten en gespecializeerde 3D kaarten die de basis van OpenGL implementeren op hardware niveau. Tot voor kort kostten deze geavanceerde grafische kaarten veel en waren ze enkel beschikbaar voor SGI workstations en andere UNIX workstations. Maar nu, door de opkomst van 3D-games en de driver ontwikkelkit van Silicon Graphics zijn er veel snelle 3D-kaarten te koop die OpenGL versnellen. Linux gebruikers kunnen hiervan profiteren.� Bijvoorbeeld 3Dfx Interactive maakt een serie 3D grafische kaarten met ondersteuning voor het Linux besturingssysteem dankzij hun Glide bibliotheek. Er is een ander artikel hierover geschreven door Phillip Ross (3Dfx Grafische kaart) dat meer in detail ingaat op de 3Dfx grafische kaarten die er voor Linux gebruikers zijn. Dit artikel toont aan dat er een verandering van houding is van sommige hardware fabrikanten, ze beginnen namelijk eindelijk in te zien dat de Linux markt niet te verwaarlozen is en ook niet onmiddellijk zal ophouden te bestaan. Linux fans zouden dit soort initiatieven moeten aanmoedigen en ondersteunen.

Architectuur

Om OpenGL hardwareonafhankelijk te kunnen maken, werden commando's voor vensteropdrachten en voor het verkrijgen van gebruikersinvoer buiten beschouwing gelaten. Op het eerste zicht lijkt dit een serieus nadeel van OpenGL, maar zoals we later zullen zien (zie de GLUT Programming Series), is het mogelijk om OpenGL te combineren met andere flexibele programmeerbibliotheken die wel vensteropdrachten en gebruikersinvoer afhandelen. Wat meer is, OpenGL voorziet ook geen opdrachten om complexe modellen te beschrijven (molecules, vliegtuigen, huizen, vogels, enz...). In OpenGL vind je enkel de meest eenvoudige geometrische objecten (punten, lijnen en polygonen). De ontwikkelaar moet zijn/haar eigen model opbouwen gebruik makende van deze eenvoudige basis. Er bestaan wel OpenGL-gerelateerde bibliotheken die meer complexe modellen voorzien, en elke gebruiker kan deze deze bibliotheken gebruiken om zelf bibliotheken te maken.

In onze reeks artikelen over OpenGL programmering zullen we de C interface voor OpenGL gebruiken omdat dit de meest gebruikte is. Maar de lezer moet er zich van bewust zijn dat ook andere talen kunnen gebruikt worden : FORTRAN, C++, Ada en Java. Later in deze reeks, nadat de lezer vertrouwd is met de C interface voor OpenGL zullen we iets zeggen over Open-Inventor, een C++ bibliotheek extensie van OpenGL.

Zonder al te veel in detail te gaan, geeft het volgende overzicht sommige zaken weer die OpenGL implementeert :

Zoals we reeds vermeldden, om OpenGL werkelijk overdraagbaar en platformonafhankelijk te maken, was het noodzakelijk om alle commando's die iets te maken hebben met het venstersysteem overboord te gooien, bijvoorbeeld het openen van een venster, het sluiten van een venster, het schaleren van een venster, een venster van vorm doen veranderen, het inlezen van de cursor positie, hetzelfde geldt voor alle commando's die te maken hebben met invoerapparaten zoals bijvoorbeeld het inlezen van toetsenbordinvoer enz... Deze acties zijn immers allemaal zeer besturingssysteemafhankelijk. In het begin had de GL bibliotheek wel een eigen set van window en randapparatuur commando's maar deze waren specifiek voor IRIX (het UNIX besturingssysteem van SGI). De ontwikkelaar die OpenGL gebruikt wordt dus verondersteld zijn eigen platform te kennen en zelf vensters enzovoorts af te handelen.

GLUT

Dankzij Mark J. Kilgard van SGI is er een extra bibliotheek die dit probleem oplost. Mark schreef de GLUT bibliotheek, een GL hulpbibliotheek die de oude AUX bibliotheek vervangt (trek je niets aan van wat de AUX bibliotheek was, vergeet die maar!). De GLUT bibliotheek is gratis verkrijgbaar. Net zoals bij OpenGL kan je van GLUT zowel de broncode als de binaries krijgen. De implementatie van de GLUT bibliotheek is dus wel platform afhankelijk, en het levert een goede interface voor venster en randapparatuur commando's. Dus, als een OpenGL applicatie een venster wil openen voor een grafische animatie, dan wordt de GLUT commando set gebruikt, en deze zorgt voor de interactie met het onderliggende venstersysteem. Samengevat verbergt GLUT de kleine details van het specifieke venster systeem (X11, Windows, Motif, enz...) voor de ontwikkelaar zodat deze zich kan concentreren op wat belangrijk is : de OpenGL code. Nog een voordeel van GLUT is dat het je code platform-onafhankelijk maakt. Ik heb persoonlijk proteïne en gel simulaties geschreven die GLUT en OpenGL gebruiken en ik heb deze zonder enig probleem of ook maar een regel machine afhankelijke code kunnen compileren voor en draaien op Linux-Intel, Linux-Alpha en Windows 95 (Ik geef toe dat ik soms Windows 95 gebruik :-) ) Ik raad iedereen die OpenGL applicaties wil schrijven sterk het gebruik van GLUT aan om de vensters af te handelen.

Het is dus duidelijk dat het belangrijk is om zowel GLUT als OpenGL te kennen, dus aan de reeks LinuxFocus artikelen over OpenGL zullen we ook een aantal artikelen toevoegen die stap voor stap uitleggen hoe je GLUT moet gebruiken en hoe je gemakkelijk met randapparatuur kan omgaan.

Om deze korte introductie af te sluiten, mogen we niet vergeten een van de andere "Grootmeesters" te vermelden, nl Brian Paul, die langzaam maar zeker een op OpenGL gelijkende bibliotheek voor Linux aan het implementeren is, genaamd Mesa. Momenteel ondersteunt Mesa enkel software rendering, wat betekent dat de CPU alle rendering taken moet uitvoeren die misschien kunnen gedelegeerd worden naar specifieke 3D hardware, maar Mesa heeft een systeem dat toelaat om gemakkelijk drivers voor versnellingshardware te schrijven en te gebruiken. Tot op heden bestaan er enkel drivers voor Mondello, S3 Virge (enkel Win95), GLINT en Voodoo 3Dfx chipsets. Dankzij de Voodoo driver (geschreven door David Bucciarelli) kan Mesa dezelfde snelheid behalen als dure SGI stations, dus als je geinteresseerd bent in goede prestaties koop dan een 3Dfx kaart.

Slot

Als afsluiter wil ik het nog hebben over een persoonlijke ervaring op mijn Alpha PC (21164 550Mhz 164Mb RAM Linux 2.0.32). Ik gebruik de Mesa bibliotheek voor een Gel simulatieprogramma dat ik schrijf. Er is geen hardware ondersteuning in mijn systeem voor de Mesa bibliotheek omdat tot nu toe de Glide bibliotheek nog niet beschikbaar is voor het Alpha systeem (SCHIET OP AUB!!!). Toen Phil Ross en ik onlangs de snelheid van zijn Pentium PC + 3Dfx en mijn Alpha PC + Matrox Millenium kaart vergeleken, waren we een beetje verrast te zien dat mijn gel animatie even vlot draaide op mijn PC als op de zijne. De OpenGL demo's draaiden zelfs beter op mijn systeem (natuurlijk diegene die geen textures gebruikten). Met andere woorden, mijn krachtige Alpha processor compenseerde het gebrek aan hardware ondersteuning volledig. Om je een idee te geven van het werk dat moet gedaan worden in elke frame van de gel animatie : elke frame bevat een Gel structuur die gemodelleerd is met tienduizenden sferen en cylinders met daarbij nog eens alle lichtberekeningen. Op de PC zagen we niet echt een gel omdat de berekeningen te krachtig waren voor de arme Intel CPU, de Alpha daarentegen had geen enkel probleem! Ik kan nauwelijks wachten om mijn Alpha PC te zien werken met een 3Dfx kaart en hardware ondersteuning voor Mesa.

Links

Silicon Graphics
OpenGL specificaties
OpenGL FAQ
3Dfx Interactive