-
Notifications
You must be signed in to change notification settings - Fork 0
/
kandi_teksti_taustaa.tex
32 lines (22 loc) · 5.54 KB
/
kandi_teksti_taustaa.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
\section{Aiheeseen liittyvät teknologiat}
\label{sec:taustaa}
\subsection{Selainteknologiat}
Seuraavaksi esitellään tämän työn kannalta keskeisimmät verkkoselaimissa käytetyt teknologiat.
\subsubsection{HTML5}
HTML5 on uusin versio \textbf{H}yper\textbf{T}ext \textbf{M}arkup \textbf{L}anguage-kielestä\cite{htmlapis}. Yksi HTML5-kielen tuomia uudistuksia on erinäisten media-formaattien sisäistäminen itse spesifikaatioon erinäisten rajapintojen kautta\cite{html5diff}. Näin ollen sisällöntuottajien ja käyttäjien ei tarvitse huolehtia kolmansien osapuolten liitännäisistä kuten Flash. Tällöin sisällöntuottaja voi olla varma siitä että kaikki ne joilla on spesifikaatiota noudattava selain pääsevät käsiksi hänen tuottamaan sisältöön. Täten alustojen erilaisuuksien ei pitäisi ainakaan teoriassa vaikuttaa sovellukseen, jolloin sisällöntuottaja voi keskittyä luomaan sisältöä ainoastaan yhdelle alustalle.
\subsubsection{JavaScript}
JavaScript-kieli on laajasti käytössä oleva ohjelmointikieli. Kieli on toteutus ECMAScript-standardista\cite{ecmascript} jota käytetään pääasiassa verkkosivujen ohjelmointiin\cite{mdnjs}. Kieli mahdollistaa verkkosivujen reaaliaikaisen muuttamisen, animoinnit sekä käyttäjän interaktiot. Useimmat HTML5-kielen määrittämät rajapinnat ovat juuri JavaScript-ohjelmia varten tarkoitettuja.
\subsubsection{Canvas-elementti}
\texttt{<canvas>}-elementti on HTML5-spesifikaation määrittelemä elementti jonka voi sisällyttää verkkosivulleen HTML5-koodissa. Elementin tarkoitus on toimia piirtoalustana: ohjelmoija voi rajapintojen kautta piirtää \texttt{<canvas>}-elementille grafiikkaa. \texttt{<canvas>}-elementin piirtämiseen tarkoitetut rajapinnat ovat tämän työn käsittelemä WebGL-rajapinta ja yksinkertaisempi Canvas 2D Context.\cite{canvas_spec}
\subsection{Intensiivinen grafiikka ja näytönohjaimen rajapinnat}
Intensiivisellä grafiikalla tarkoitetaan tässä yhteydessä grafiikkaa jonka piirtäminen vaatii huomattavan määrän laskentatehoa. Esimerkiksi yksittäisen digitaalisen valokuvan piirtäminen ruudulle ei ole intensiivistä grafiikkaa. Fysikaalisen ilmiön (kuten veden) simuloiminen ja piirtäminen ruudulle taas on hyvin intensiivistä ja voi veden liikkeistä ja koostumuksesta riippuen vaatia suuria määriä laskentatehoa. 3D-grafiikka on melkein aina paljon raskaampaa kuin 2D-grafiikka. Kuitenkin piirron intensiivisyys riippuu ainoastaan laskennan määrästä. 2D-kuva jossa on paljon objekteja ja korkea resoluutio voi myös olla raskas piirtää. Intensiivinen grafiikka ei siis rajoitu ainoastaan 3D-grafiikkaan.
\subsubsection{Peligrafiikka}
\mbox{Pelialalla intensiivinen grafiikka yhdistyy useimmiten fysiikan simulointiin}, kolmiuloitteisiin ympäristöihin ja monimutkaisiin esineisiin pelimaailmassa. Vaikka tällaisia asioita voidaan periaatteessa simuloida tietokoneen pääsuorittimella, teho jää nopeasti riittämättömäksi. Liian intensiivinen grafiikka hidastaisi konetta sen verran että käyttökokemus kärsii. Graafisesti monimutkaisten pelien laskenta on näin ollen siirrettävä yleispätevästä suorittimesta näytönohjaimeen, joka on graafiseen laskentaan erikoistunut laitekomponentti.
\subsubsection{Näytönohjain}
Näytönohjain on tietokoneeseen liitettävä erillinen lisälaite, jolla on oma muisti ja oma graafiseen laskentaan erikoistunut suoritin. Näin ollen laskenta joka suoritetaan näytönohjaimessa ei käytä yhtä paljon tietokoneen resursseja. Näytönohjaimen käyttäminen koodista on kuitenkin monimutkaisempaa kuin pelkän suorittimen käskyttäminen. Ohjelmoijan on varmistettava, että käskyjen lisäksi myös tarvittava muisti siirretään näytönohjaimelle. Näytönohjain on useimmiten myös erillinen komponentti, joten käyttöjärjestelmä tarvitsee erillisen ajurin tai ohjaimen voidakseen käyttää sitä. Näitä ajureita voidaan käyttää erityisillä grafiikkaohjelmointiin tarkoitetuilla rajapinnoilla.
\subsubsection{OpenGL-rajapinta}
OpenGL (\textbf{Open} \textbf{G}raphics \textbf{L}ibrary) on alusta- ja kieliriippumaton ohjelmointirajapinta tietokoneiden näytönohjaimille\cite{opengl4}. Ohjelmoija voi käyttää OpenGL-kirjastoa tehdäkseen kutsuja näytönohjaimelle, ilman että hänen tarvitsee käyttää näytönohjaimen omaa, matalan tason käskykantaa. Vastaava teknologia on DirectX\cite{directx}, Microsoftin ylläpitämä lisensioitava rajapinta-kirjasto, joka on tarkoitettu yksinomaan Windows-käyttöjärjestelmälle.
\subsubsection{OpenGL ES-rajapinta}
OpenGL ES (\textbf{E}mbedded \textbf{S}ystems) on OpenGL-kirjaston versio joka on tarkoitettu käytettäväksi sulautetuissa järjestelmissä, kuten pelikonsoleissa, puhelimissa ja tabletti-tietokoneissa. OpenGL ES on rajatumpi versio täydestä OpenGL-kirjastosta, jotta se olisi mahdollisimman laajasti käytettävä.\cite{opengles}
\subsubsection{WebGL-rajapinta}
WebGL (\textbf{Web} \textbf{G}raphics \textbf{L}ibrary) on JavaScript-rajapinta \texttt{<canvas>}-elementtiä varten. WebGL perustuu pitkälti OpenGL ES:ään\cite{webgl_specification}. Näin ollen WebGL on samalla lailla rajattu: näitä rajallisuuksia tarkastellaan tarkemmin kappaleessa \ref{subsec:piirteet}. Rajapinta sallii näytönohjaimen käskyttämisen JavaScript-koodista. JavaScript-ohjelmoija voi siis piirtää \texttt{<canvas>}-elementille kuvia WebGL-rajapinnan kautta samalla tavoin kuin natiivisovellus tekisi esimerkiksi C++-kieltä ja OpenGL-rajapintaa käyttäen. Canvas 2D Context-rajapinta voi ainoastaan käyttää suoritinta, eikä sitä ole tarkoitettu monimutkaisen 3D-grafiikan piirtoon.