Uncategorized

3D-grafiikkaa Linuxilla, osa 1: alkulätinät

3D -grafiikka on mielenkiintoinen aihe, siinäkin mielessä että usein ensi-innostuksen jälkeen aihepiiri voi jäädä hyllylle. Grafiikka voi toisaalta olla elämänpituinen intohimo, sekä tuleva ammatti.

Esittelen tässä sarjassa 3D-grafiikan alusta “loppuun”, niin että pääset kirjoittamaan koodia Linuxilla. Esimerkeissä käytetään OpenGL ja GLUT kirjastoja, mikä lienee kohtuullisen yleinen vaihtoehto. Kaupallisiin tai muihin valmiisiin pelialustoihin todennäköisesti ei tutustuta. Voi olla, että jos käytän myöhemmin jotain tällaista, siitä erillinen sarjansa.

Tässä jaksossa…

  1. höpistään hieman taustoja grafiikasta
  2. juodaan kahvia
  3. mietitään miksi vasta sarjan seuraavassa osassa päästään koodaamaan

Mutta – se on lopulta kaikki vain pikseleitä!

Grafiikan ideathan ovat universaaleja, mutta lopulta iteratiivisen testailun ja viihtymisen vuoksi jollain laitteistolla ja softakirjastoilla homma on lopulta tehtävä. Eli kädet on lyötävä saveen, ja koodia kirjoitettava.

Ideatasolla ymmärrämme jo ihmisenä mistä grafiikassa on kyse; näemmehän jatkuvasti erilaisia pintoja, esineitä, ihmiskasvoja, taivaan, jne ympärillämme. Grafiikkaohjelmoinnissa luodaan illuusio siitä, että se, mikä (usein 2-ulotteisella) ruudulla näkyy vain tasossa, esittää tuota oikeaa kolmiulotteista maailmaa.

Joskus 3D-ohjelmointia ensimmäisen kerran lähestyessä voi mielen vallata kaaos: erilaiset konseptit pulppuavat tulvana mieleen, ja mikäli ei naulaa tiettyjä perusasioita jämäkästi kiinni, voi olla, että ohjelmointi jää sikseen.

Anna esineille oma rauhansa

Esineet elävät omaa elämäänsä. Eli ne voidaan määritellä riippumatta, miten ne myöhemmin tulevat esiintymään 3D-maailmassa. Tämä on eräs fundamentaali oivallus, joka ainakin itselleni toi mielenrauhaa. Jos olet leikkinyt 3D-ohjelmilla, aika nopeasti idea kolmesta akselista (X,Y,Z) ja esineiden muodostuminen näihin alkaa tuntua luontevalta. Suosittelen nimenomaan “aivotonta kokeilua”. Silloin saa tuntumaa myös ohjelmointiin. Älä aluksi yritä tehdä mitään mestariteoksia.

Aivan mainioita harjoituskappaleita ovat säännölliset laatikot, kuin myös pyramidi, tangot, palikat.

Asenna vaikka Blender, joka on täysin ilmainen ja erittäin laadukas softa. Blenderillä on tehty elokuvia ja pelejä, mutta nyt alkuun siitä on iloa nimenomaan 3-ulotteisten esineiden muovaamisessa. Ohjelmoinnin kannalta Blender ei ole mitenkään pakollinen, mutta se on kiehtova softa jos mallinnus kiinnostaa.

Illuusion ytimessä: projisointi

Kolmiulotteisessa grafiikassa esineet piirretään tasoon (monitorille) siten, p_projektiot_seinaettä niiden muoto muuttuu antaen illuusion katselukulmasta ja esineen etäisyydestä katsojaan. Kun soppaan lisätään valaistus, varjot, ja muita efektejä, gourmé -ateria on valmis! Yksinkertaistettuna siis näin.

Teknisesti kyse on projisoinnista. Esineistä, joilla on 3-ulotteiset koordinaatit, piirretään meihin, “katsojan silmään”, viivat, ja nuo viivat katkaistaan ruudun (tason) kohdalla. Jos olemme esineen sisällä, esimerkiksi talossa, jätetään taaksemme menevät esineet vain piirtämättä (meillä ei ole silmää takaraivossa). Matemaattisesti kyse on suhteellisen yksinkertaisesta ratkaisusta: jos projisoidun pinnan syvyys (z-koordinaatti) on negatiivinen, sen voi jättää huomiotta.

 

Tietokonegrafiikka kehittyi mustavalkoisesta 2-ulotteisesta grafiikasta ensin värigrafiikkaan. Oli “kova juttu” että esimerkiksi PC:lle löytyi CGA -grafiikkaominaisuuksia tukevissa korteissa 3 omituista väriä ja lisäksi musta. CGA-grafiikka näytti tuolta vieressä olevalta.

Hiljalleen 1980-luvun tienoilla tietokoneisiin ohjelmoitiin (softalla) 3D-grafiikan rutiinit itse. Jokaisella ohjelmoijalla oli siis kivinen mutta toisaalta antoisa tie kuljettavanaan, koska pikselin- ja viivanpiirrosta lähtien kaikki piti tehdä itse. Bresenham oli tuolloin kova sana – keksijänsä mukaan nimetty algoritmi, jolla saatiin tehtyä mielivaltainen viiva kahden pisteen välille, siten että se ei näyttänyt “tyhmältä” eikä kuluttanut yhtään liikaa prosessoriaikaa.

Alkoi grafiikkakorttien valtakausi. 2D -piirtämisen oltua “riittävän hyvällä” tasolla kolmiulotteisten rutiinien kilpavarustelu oli tuleva taistelutanner seuraavien parinkymmenen vuoden ajan. Muistimäärät kasvoivat myös näytönohjaimissa reippaasti alkuperäisistä. Tavallaan modernin peligrafiikan taustalla on sopiva määrä elektroniikan ja ohjelmistojen kehitystä.

 

Mikä OpenGL on?

OpenGL tarjoaa rajapinnan grafiikkakorteille. Sen tarkoitus on eriyttää laitevalmistajakohtaiset yksityiskohdat, jotta ohjelmoijat voisivat tehdä heille mielekkäitä asioita sen sijaan että miettisivät eri valmistajien ja korttimallien kanssa temppuilemista.

OpenGL-kirjasto kulkee versiossa 4 tällä hetkellä. OpenGL on tavallaan hyvin matalan tason, laitteistoläheinen yhteys. Kirjasto tarjoaa siis C/C++ kielelle funktiot ja vakiot grafiikkakortin ohjaamiseen. OpenGL:n tärkeimpiä ominaisuuksia on ohjelmoitavuus: sen avulla voidaan luoda uusia efektejä, jotka tietenkin lopulta lankeavat grafiikkakortin suoritettavaksi, mutta näin päästään grafiikkaohjelmoinnissa liikkumaan hieman korkeammalla tasolla.

Kun laitevalmistajat tarjoavat uusia ominaisuuksia raudalla, OpenGL seuraa kehityksessä näitä.

Entä mikä on GLUT?

GLUT taas on pieni kehikko grafiikkaohjelman yleisimpien peruselementtien tekemiseksi. GLUT liittyy enemmän Linuxin työpöydän ikkunointiin ja sen sellaiseen. Eli GLUT helpottaa “toimivan” kokonaisuuden protoilua. OpenGL:n mielestä maailmassa on sen sjiaan vain olemassa raakoja suorakulmion muotoisia alueita näytöltä, joihin piirrellään pikseleitä. OpenGL ei ota kantaa “käytännöllisempiin” asioihin ohjelman rakentamisessa.

 

Uncategorized

Otherworld – getting Linux

Tux, as originally drawn by Larry Ewing
Image via Wikipedia

Being “on your own”, meaning running the PC environment with Linux only is interesting. It brings about a different kind of challenge, than having a typical corporate Windows environment. The GNU (or Free software foundation) people have brought a huge number of free software to play with.

GNU got started with Richard Stallman, an MIT university hacker extraordinaire, a bit frustrated with the implications that firmware copyright had on system usability. Unix programmers often needed to get ahold of source code for completely legit purposes, namely “making things work”. The world was at that time pretty different from ours, but already it was ridden with the secretive and quite invalidating paradigm of software vendors wanting to always cover their software lock it up as much as possible. This was mostly due to general paranoia – not necessarily so much of real use, but a habit that everyone did.

Stallman wanted to make the computing more sane one. He started writing a very central piece of the Unix world, GCC compiler. It is an advanced and flexible suite of compiler technology, by which follow-up software could be made in a more controlled and powerful manner. Using GCC “the rest” of utilities and applications could be compiled. In fact, one of the best features of it was that GCC could compile to many platforms, not only its native original one.

FSF’s software range from the very core necessary (GCC compiler suite) to scientific simulators, and a lot in between. GNU is a bit like the app industry of mobiles, except that an average GNU program is more complex and less fancy looking. They’re in the class of true utilities. In fact I think so far we as a general population have not yet understood fully the value of this chest of treasures.

Linux is about hacking. It’s about reading. Getting hard answers and a good laughter in your face. And learning. But it’s fun.

For a desktop user, I can recommend you get started with:

  • Pidgin for instant messaging
  • aterm or xterm for terminal working
  • emacs for text editing
  • GIMP for graphic working
  • Apache (www server)
  • openssh suite for secure connections
  • Putty (ssh client)
The above is just a foursome example of what kind of tools you can use. Let’s say that “for everything, there’s a tool”. This is the Unix/Linux philosophy. The open source world is crafting more and more gems, and I cannot think of an area where the free software movement wouldn’t have a solution. To get going, I’ll drop a few lines in the end of this article.
Many people think about total cost of ownership and other parameters, which is fine. In a business world you need some kind of justification often about the decisions. I personally have no idea of the current TCO numbers. I just love Linux, and the way that it has so much to offer. For personal use it’s all the justification I need.

It’s about knowing how your machine behaves; how to install things that enable you to do more. There’s inherent power in the tools. If you don’t like a particular one, usually there are tens of alternatives. And what’s really a treat is that you get them for free. This is one aspect of the FLOSS world: you truly do have the freedom to explore, test, take advantage, grow, and get satisfaction from software.

You have to tolerate a bit of chaos in order to live a happy life in GNU/Linux world. If you are the kind of type who always needs direct command and instructions from somewhere, it might be that this world might scare a bit. But under the surface, there’s plenty of instructions available for newbies. I wouldn’t hesitate to make the step now, 2011 (I made it approximately 1999, running my own RedHat 6.0).

One way to get going easily is test a Live CD version of your favorite Linux. These kinds of distributions make no modifications into your PC: you can test it without any commitment at all. The Live technology expands the Linux runnable code both into your computers working memory, and into the stick, using the latter as a file system (fs). This way the runtime Linux seems like a whole, normal system, but actually it does not touch hard drives nor any other “real” media. You still have every bit of normal Linux functionality, including the ability to install new applications, create files, run programs and so on.

And once you got the media going (a CD, DVD or USB stick), there’s always the option to really install it permanently on your system. Yet even here the Linux offers you courteously two alternatives: all for linux, or install it side-by-side preserving the existing operating system.

You can get a wonderful tool for downloading and burning the image in one go: Unetbootin.

Unetbootin is such wonderful, because it supports “everything on everything”. It is there to help you easily select, download, and burn a bootable ISO (clone of a Linux) into a USB stick. You can the tool itself from a Mac, Win or Linux.

Intro to very first steps on Ubuntu

So, Unetbootin got you a bootable Linux. I’m putting here just a couple of points where you can get into reading and learning. Remember; no need to overdo. Learn as much as feels comfortable. The Linux is almost completely virus-free, though network security is quite essential.

  • Ubuntu Forums
  • kernel.org
The UF contains a Absolute Beginners Talk sections which gives good advice. Read the top-most sticky notes, which are there to guide all participants and ensure more efficient commmunications. By adhering to basic rules you will benefit the whole community and also get answers quicker.

Go. Get. And test! Welcome to the otherworld 🙂