Monday, June 29, 2009

temp heads up

Het is hier lang stil geweest (iets meer dan een maand :s)
Dit is even om te laten weten dat ik bezig ben met een nieuwe post, die weldra zal verschijnen. Deze site is nog niet dood :)

Bart

Saturday, May 23, 2009

Onterechte schaamte

Games...

Het is iets vreemds. Aan de ene kant houd ik van games, sinds de eerste demo die ik downloadde (en dan snel de modem weer uit zetten, want iedere minuut telde!), tot vandaag de dag heb ik ze gespeeld.

En toch, vraag me wat m'n hobby's zijn, en de kans is vrij klein dat ik zal zeggen dat ik game.
Vandaag de dag speelt een grote meerderheid van de (westerse) mensen spelletjes op een computer, console, handheld, gsm etc.
Vroeger was dit anders, gamers waren die vreemde mensen die alleen in donkere kamertjes zaten en vreemde dingen deden op hun computer waar niemand anders van begreep wat er in godsnaam tof aan zou zijn.
De tijden zijn veranderd, maar ik denk dat de mindset van veel (oudere) gamers nog niet veranderd is. Natuurlijk kan ik niet stellen dat ik volledig bij de "oude" generatie behoor, ik ben slechts 20 (bijna 21, hoera), en toen ik begon met spelen was dat al op Windows 95. En hoewel ik er een hoop van heb gespeeld, games van daarvoor zijn ook dat: van voor mijn tijd. Ik was er niet bij toen Pong uitkwam in de arcade halls, ik was er niet toen Arkanoid werd losgelaten op een groep nerds door Taito in 1986 (Hell, ik bestond zelfs nog niet als spermatozoïde!).

Echter, ik zit ook niet in de groep gamers die zijn opgegroeid met de Xbox, PS2 of zelfs PS3 en Xbox360. Ik was er al lang voordat m'n kwam met Battlefield 1942, voordat Halo het fps-genre deftig naar de console bracht.
De mensen van die eerste groep zijn nu nog steeds gamers, enkele van hen maken de games van nu. Je zult de "oudere garde" ook op veel plekken vinden waar je ze niet verwacht. Psychiaters die Age of Empires spelen, de grote businessman die 's avonds een potje oorlog speelt in Counter Strike, de moeder de hele dag thuis zit en World of Warcraft speelt, ze bestaan allemaal, maar velen houden dat gedeelte van hun identiteit achter.

Ik denk dat ik me, als ik het me mag permitteren, het best kan plaatsen binnen die oude garde.
Goed, ik was er niet van in het begin bij, maar heb ook de evolutie van games gezien: van 16 naar 32 bit kleuren, de eerste polygonen in 3D, bumpmaps die opkomen, water dat er steeds beter uit ziet (De eerste tien minuten in Morrowind zijn onvergetelijk, de hele wereld leefde, en dat water!), tot parallax mapping en normal maps.

Als mensen me vragen naar mijn hobby's, zal ik zeggen dat ik muziek speel. Dat ik games speel, of nog erger, dat ik programmeer (!), verberg ik, hoewel ik die twee dingen wel een pak meer doe dan muziek spelen. Onterecht, het wordt tijd dat ik opsta en het uitroep:

Ja, ik game, en het is verdomme tof om te doen (een vloek om de nadruk te leggen: Bart gebruikt trucjes uit de leer van het schrijven).
Ja, ik programmeer, en het is een schitterend gevoel om na uren zwoegen naar een scherm te kijken en je resultaat in al zijn glorie te kunnen zien. Het is een schitterend gevoel te beseffen dat je iets gecreëerd hebt met je eigen handen (hoewel het in dit geval meer figuurlijk is, aangezien het vooral denkwerk is) waar je zowel controle over hebt als dat het dingen doet die het zelf doet. Een beetje alsof je een hond uit klei zou maken en er vervolgens leven in blazen waarop hij meteen perfect is afgericht, maar toch nog altijd een hond is (en dus de dingen doet die een hond nu eenmaal een hond maken).

Friday, May 22, 2009

De Julia Set

Fractalen zijn magische dingetjes: als je naar de formule kijkt lijkt ze ongeloofelijk eenvoudig,
maar als je die formule vervolgens toepast op pixels, krijg je mooie resultaten.
de volgende afbeeldingen zijn gemaakt door te experimenteren met de Julia set.
De bovenste afbeelding zit in de originele set (waar a = -0.8 en b = 0), zo ook de derde. De rest zijn varianten op de set door de de logaritmes van de waarden te nemen, de wordels, ze extra te vermenigvulden etc.
De twee laatste afbeeldingen zijn gemaakt door respectievelijk de wortel van de X en van de Y component te nemen. Dat uit zo'n kleine aanpassing boomstructuren ontstaan is niet echt een evidentie, en vooral de eerste van die twee spreekt me zeer aan.
Twee afbeeldingen er boven (de eerste z-vormige figuur is hetgeen m'n krijgt als je de wortel van zowel de X als de Y component neemt en a gelijk is aan 0.64 and b = -0.5.

Weldra afbeeldingen uit wellicht het beroemdste computergegenereerde fractaal: de mandelbrot verzameling
Noot: als de afbeeldingen niet volledig worden weergegeven, klik er dan op en dan zie je ze in hun geheel.










Wednesday, May 20, 2009

The meme without content

Memes zijn een vreemd beestje: beelden of tekst die rond gaan op het internet en zo miljoenen mensen infecteren met hun meestal catchy materiaal dat echter vaak ook nergens op slaat.

Er zijn er echter ook die absoluut nergens op slaan, er is werkelijk geen eind aan te knopen waarom.
Een van die memes, is Magibon (deze video heeft 4,753,095 views op het moment van schrijven):


En zo zijn al haar video's.
Gewoon kijkend, af en toe zegt ze iets in het Japans, of doetze iets helemaal random.
Je kan haar andere filmpjes bekijken op http://www.youtube.com/user/MRirian

Sunday, May 17, 2009

primitives: the disk

De komende posts ga ik het over iets hebben waar ik me mee amuseer: mooie wiskunde.

De meeste mensen denken bij wiskunde meteen aan die vreselijk saaie rekenoefeningen die m'n moest maken op school, maar dat is dan ook dat: rekenen, en dat is geen wiskunde J

Wiskunde is iets dat prachtige dingen te voorschijn kan toveren (oké, het is eigenlijk geen toveren, maar alles dat complex genoeg is voor de toeschouwer is magie), zoals geometrie (zoals we in de eerste posts zullen zien), fractalen, nurbs oppervlakten etc.

Zoals gezegd, zal ik in de eerste posts enkele geometrische figuren bespreken. Meer concreet, hoe we ze kunnen maken. De figuren die we hier zullen zien, zijn wat we "primitieven" noemen. Het zijn enkele van de eenvoudigste vormen die we in de wereld tegenkomen.

De eerste die ik zal omschrijven, is wellicht ook de eenvoudigste om te maken (behalve dan de kubus, maar die is dan ook zo evident dat ik hem niet zal bespreken): de disk.

De disk is de figuur die je ziet als je een cd-rom ziet: een platte schijf met in het midden een gat. Dat gat kan straal van 0 hebben, waardoor het uiteindelijk geen gat heeft, maar in andere gevallen (zoals onze cd), zal het gat wel zichtbaar zijn.

Een disk is eigenlijk niet meer dan twee cirkels (een buitenste en een binnenste cirkel), en een cirkel, zo weten we allemaal, is perfect rond. Dat betekend dat ze een oneindig aantal hoeken heeft (in tegenstelling tot een vierhoek, die er, u raadt het al, vier heeft). Die oneindigheid vormt een serieus probleem als we die disk willen weergeven op een computer. Om dat te overbruggen, geven we onze disk een nieuwe eigenschap, namelijk de "resolutie", ofte hoeveel hoeken dat de cirkel zal hebben. Zeggen we de disk dat zijn resolutie vijf is, dan krijgen we een vijfhoek, 30 een dertighoek enzovoort.

Nu we weten hoeveel hoeken de disk zal hebben, weten we ook hoeveel punten er nodig zullen zijn als we hem willen definiëren (zo werken 3D-programma's nu eenmaal. Je geeft de verschillende punten op die een object weergeven en verbindt die met elkaar (zeer vereenvoudigd).). Maar hoe weten we de locatie van die punten?

Dit is waar de wiskunde langskomt. Herinner je nog de cosinus en de sinus? Wellicht nooit gedacht dat die dingen eigenlijk ergens goed voor waren, maar hier brengen ze onze redding.

De volgende afbeelding toont wat ze eigenlijk betekenen.

Image Hosted by ImageShack.us

Wat we zien is een cirkel met een straal van lengte 1. Als we hierin een hoek tekenen, en we kijken naar de x- en coördinaat van het punt waar de lijn de cirkel raakt, geeft ons dat respectievelijk de cosinus en de sinus van die hoek.

Om de positie van onze punten te weten, moeten we dus voor ieder punt weten onder welke hoek ze zich bevinden.
Die hoek berekenen we door het nummer van het punt te delen door het aantal punten (op die manier bekomen we een getal tussen 0 en 1), en dat vermenigvuldigen we met twee keer pi (3.14…). Waarom 2 keer pi? Omdat in goniometrie, hoeken worden weergegeven als radialen. 180° is gelijk aan pi, 360° is dus gelijk aan 2pi, en door hiermee te vermenigvuldigen zorgen we er voor dat al onze hoekpunten tussen 0 en 360° komen.

We krijgen dus het volgende:

X = cos(i / res * pi * 2)
Y = sin(i / res * pi * 2)

Waar i het nummer van het punt is en res de resolutie van de disk (dus het maximaal aantal punten.
Het probleem nu is echter dat alle punten op een afstand van 1 van het nulpunt liggen, en als we een binnen en buitencirkel hebben, zouden die dus op elkaar komen te liggen.
Vermenigvuldigen we x en y echter nog eens met de straal van de cirkel, is ook dit probleem opgelost.

In code ziet het er uiteindelijk zo uit:

nrOfVertices = res * 2;

int nrOfQuads = res;

nrOfFaces = nrOfQuads * 2;

int nrOfIndices = nrOfFaces * 3;

vertices = new
VertexPositionNormalColor[nrOfVertices];

for (int i = 0; i < res; ++i)
{
double angle = (double)i / res * Math.PI * 2;
var pos1 = new Vector3((float)Math.Cos(angle) * radOuter, 0, (float)Math.Sin(angle) * radOuter);
var pos2 = new
Vector3((float)Math.Cos(angle) * radInner, 0, (float)Math.Sin(angle) * radInner);

vertices[i * 2] = new
VertexPositionNormalColor(pos1, Vector3.UnitY, Color.DimGray);

vertices[i * 2 + 1] = new
VertexPositionNormalColor(pos2, Vector3.UnitY, Color.DimGray);

}

Hier is "res" het aantal hoeken van de cirkel en "vertices" is een lijst die de posities bijhoudt met een lengte van "nrOfVertices".
De disk bestaat uit vierkante vlakken die tussen de punten worden getekend. Het aantal van die vlakken is even veel als de resolutie. Het aantal punten dat we nodig hebben is hier het dubbele van, aangezien we zowel de punten voor de buitenste cirkel (pos1) en die voor de binnenste cirkel (pos2) moeten weten. (het double en float gedoe moet je je niet te veel van aantrekken, dat betreft conversies tussen verschillende datatypes. Vector3 is een vector in een driedimensionale ruimte, dus met een x, y en z coördinaat. In deze wereld is Y naar boven, dus laten we deze op 0 staan, zodat de disk plat op de grond ligt).
radOuter en radInner zijn de radius (straal) van de buitenste en binnenste cirkel. (in het programmeren noemen we de dingen in het Engels, aangezien dit zo wat de standaard is in dit wereldje, dan begrijpt iedereen waar je het over hebt).
Het lijntje for(int i = 0; i < res; ++i) vraagt misschien wat uitleg, het is iets dat we in de komende posts nog veel zullen zien.
Wat we hier doen is een geheel getal (integer in het Engels) aanmaken dat we "i" noemen en we zeggen dat het de waarde 0 heeft. Vervolgens geven we een conditie op, in dit geval i < res. Dat betekend dat, zo lang dat i kleiner is dan res (het aantal punten op de cirkel, remember?), we de code binnen de accolades gaan uitvoeren, waarna het derde deeltje van de for-statement uit wordt gevoerd, namelijk ++i. dat betekend zo veel als: neem het getal i en voeg er 1 aan toe. Na de eerste keer dat de code wordt uitgevoerd zal het getal i (dan nog 0) vermeerderd worden met 1, en wordt de code opnieuw uitgevoerd, maar overal waar er i staat, staat er nu 1 in plaats van 0. De volgende keer zal op al die plekken 2 staan, en zo voort, totdat i niet meer kleiner zou zijn dan het aantal punten, waarop er uit de lus wordt gegaan en de rest van de code zal worden uitgevoerd.

De laatste twee regels vragen ook wat uitleg:
vertices[i * 2] = new
VertexPositionNormalColor(pos1, Vector3.UnitY, Color.DimGray);

Betekend zo veel als: de positie i * 2 in de lijst vertices is een punt (punten die geometrie beschrijven worden vertices, enkelvoud vertex, genoemd) met de volgende eigenschappen: een positie die gelijk is aan pos1, een normaal (welke richting is "naar boven" voor het punt? Dit is belangrijk voor de belichting), en een kleur (als we het punt of het vlak dat dit punt gebruikt tekenen, wat is de kleur daarvan?).

De tweede regel is hetzelfde, maar beschrijft die voor de tweede cirkel.

Het resultaat van dit zijn twee cirkels van punten, de ene met een straal van radOuter, de ander met een straal van radInner. (hieronder met een resolutie van 10 en de belichting af)

Image Hosted by ImageShack.us

Image Hosted by ImageShack.us

Volgende keer: de cilinder.

Thursday, May 14, 2009

Economy playground

EVE Online is een mmorpg die zich in de ruimte afspeelt. De spelwereld wordt geregeerd door de spelers, die zich groeperen in "corporations" (bedrijven) die zich vervolgens weer groeperen in allianties. Zo is er bijvoorbeeld BoB (Band of Brothers) die het noordwesten van het spel controleert (als je van boven op de kaart kijkt).
De spelers delen de lakens uit wie waar mag komen, heb je geen permissie om ergens te komen, verwacht maar dat je ruimteschip snel wordt neergehaald.
Territorium is macht, en daar wordt dan ook om gestreden, grote veldslagen zijn het gevolg. Daarin worden steeds meer en steeds grotere ruimteschepen in gebruikt, en die kosten geld. Alles in oorlog draait om geld, EVE Online draait om geld.

De hele economie is "player driven", wat zo veel wil zeggen als dat de dingen die je als speler koopt, gemaakt zijn door een andere speler. Die heeft z'n producten gemaakt met de grondstoffen die hij ofwel zelf heeft verzameld, of die hij gekocht heeft van iemand anders. Prijzen worden bepaald door de grondstoffen, research (waarmee je het productieproces kan verbeteren), productiekosten (fabrieken kosten geld), taksen van de eigenaars van het ruimtestation waar je je materiaal maakt, een beetje winst voor jezelf, en concurrentie.

Het hele spel is een grote economische speeltuin. Wanneer de makers van het spel nieuwe zaken toevoegen schieten de prijzen van bepaalde grondstoffen de lucht in, blauwdrukken van de nieuwe items worden verkocht aan gigantische bedragen, races om als eerste het nieuwe product op de markt te hebben lopen overal in het universum.
Miners (de mensen die de grondstoffen verzamelen) richten zich op die stoffen die nodig zijn voor bijvoorbeeld het nieuwe schip, wat voor een tekort zorgt aan andere grondstoffen, waardoor die prijzen weer stijgen, waar de mensen weer massaal op springen waardoor ze dalen en de andere weer wat stijgen, en zo voort.
Twee weken later is de markt weer stabiel en gaat de handel weer z'n gangetje.

Een wereld zoals dit is voor een econoom een paradijs. CCP (de makers van dit spel) heeft dan ook een fulltime econoom in dienst. Op GDC dit jaar wist The Escapist hem te strikken voor een kort gesprek, dit is het resultaat:


Tuesday, May 12, 2009

end of the world