Index Nyheter Kurs Källkod Artiklar Musik Grafik Projekt Länkar E-mail
Programmera Spel i C

Recension av Black Art of 3D Game Programming

Bild på bok

Black Art, som jag från och med nu väljer att kallade den, är skriven av André Lamothe och ges ut av The Waite Group.

Det som slog mig när jag för första gången såg boken var dess tjocklek. Boken består nämligen av hela 1159 stycken välfyllda sidor! Men vad innehåller då alla dessa sidor? Jo, boken är uppdelad i två stycken delar, den första tar upp programmering i 2d och den andra tar följdaktligen upp 3d-programmering. Precis som bokens namn antyder, har författaren valt att lägga tyngdpunkten på den sistnämda delen. Jag hävdar dock att 2d-delen är den bästa, men mer om detta kommer senare.

Här följer en ytlig beskrivning av bokens alla kapitel:

1. The Genesis of 3D Games

I bokens första kapitel går man bland annat igenom hur man kompilerar källkoden, som givetvis medföljer boken. Källkoden ligger på en cd-skiva, som förutom källkoden innehåller en hel del användbara program, exempelvis Neo Paint och North Cad. All kod är skriven i C och finns för både Borlands och Microsofts kompilatorer.

2. Elements of the Game

Här går man igenom alla viktiga detaljer ett spel ska innehålla, allt från installationsmeny och inmatning till musik och avslutningsskärm.

3. The Mysterious VGA Card

Nu börjar boken bli riktigt intressant! André tar här upp grunderna i Mode 13h mycket bra. Du får bland annat lära dig att plotta pixlar, rita linjer, manipulera paletten m.m. Det krävs nästan inga förkunskaper alls för hänga med bra här. Om du har sett mina funktioner i kursmenyn, så vet du på ett ungefär hur Andrés ser ut. Han skriver mycket tydlig och välkommenterad kod, vilket är till en stor hjälp, tro mig. Kapitlet avslutas med en liten genomgång av Mode Z, som författaren väljer att kalla det. Mode Z är ett grafikläge som använder sig av en upplösning på 320x400 punkter, dvs. en bra bit högre än Mode 13h (320x200).

4. Walking the Dead with Animation

Bokens bästa kapitel! Här finns mycket av det som krävs i ett vanligt 2d-spel. Du lär dig till exempel att visa PCX-bilder, att rita ut sprites och att utföra Parallax Scrolling. Spritehanteringssytemet klarar självklart av "klippning" och är för övrigt ganska smart upplagt. Konsten att visa upp en PCX-bild på skärmen beskrivs också väldigt bra, för att inte tala om Parallax Scrollningen. En annan viktig sak du får lära dig här är att använda en Double Buffer för att skapa flimmerfria animationer.

5. Communicating with the Outside World

Precis som rubriken säger, får du här äran att lära dig programmera tangentbord, joystick och mus. Att programmera en egen tangentbordsrutin är faktiskt ingen barnlek, så här känns det extra skönt att få hjälp av en kunnig kille som André.

6. Dancing with Cyberdemos

Då var det dags för lite ljudkortsprogrammering. Här har man valt att endast fokusera sig kring DIGPAK/MIDPAK, som är ett komplett ljudbibliotek för uppspelning av MIDI och ljudeffekter. Eftersom det mesta redan är färdigskrivet, tar det inte allt för lång tid förren du är i full gång med att spela upp fräck musik och feta samplingar. Personligen anser jag att det här biblioteket tar lite för mycket processorkraft och slukar lite för mycket minne, men det är väl en smaksak.

7. The Magic of Thought

I det här kapitlet försöker man att lära ut lite AI-programmering, men desvärre får man sig endast ett riktigt gott skratt. Den mest avancerade AI:n visar man upp i ett demo, där man styr en gubbe, som är jagad av ett monster. Monstret ska försöka fånga gubben, genom att hela tiden välja den närmsta vägen. Det hela ser otroligt löjligt ut då monstret hela tiden går spikrakt mot gubben. Är det sånt som kallas AI? Nej, knappast inte, men även den bästa kan göra misstag, som man brukar säga.

8. The Art of Possession

Det här är enligt författaren det viktigaste kapitlet i boken och jag håller delvis med om det. Man går nämligen här igenom en så viktig sak som avbrottsprogrammering. Att behärska denna typ av programmering kan man ha mycket nytta av, inte minst vid den redan nämnda tangentbordsprogrammeringen.

9. Multiplayer Game Techniques

Visst skulle det vara häftigt att programmera ett spel med stöd för multiplayer? Grattis, här får du en utmärk chans att lära dig programmera spel för fler än en spelare. Kapitlet tar upp både programmering av modem och serieportar, vilket inte är det allra enklaste att lära sig. Jag har aldrig haft någon möjlighet att testa om det fungerar, men det antar jag att det gör. Tillsist borde jag nämna att spelet Starblazer ingår här. Starblazer är, till skillnad från bokens andra spel, väldigt bra.

10. 3D Fundamentals

Här börjar, som du kanske förstår, 3d-programmeringen. Det här kapitlet innehåller endast ren matematik och det är precis vad 3d-programmering handlar om. Du bör nog känna till en del gymnasiematte för att hänga med här, men det behöver inte vara så. Man går till en början igenom beräkningar med vektorer och matriser i två plan, men lägger snart till ett tredje.

11. Building a 3D Graphics Engine

Här finns framförallt en rutin för inläsning av PLG-filer. Dessa filer skapar man i ett usel 3d-program som följer med cd:n, men som tur är kan man visst konvertera DXF-filer (3D Studio) till PLG-formatet.

12. Solid Modeling and Shading

När du är klar med det här kapitlet är det meningen att du ska kunna enkel skuggning av 3d-objekt. Man tar även upp Texture Mapping och Gouraud Shading, men förvänta dig inget utöver det vanliga. När den här boken skrevs var det nämligen inte så vanligt med Texture Mapping, så man valde att helt och hållet satsa på Solid Shading, vilket inte alls är lika snyggt.

13. Universal Transformation

En förhållandevis kort kapitel, som helt enkelt tar upp kameraförflyttningar.

14. Hidden Surface och Object Removal

Ännu ett tunt kapitel med viktigt innehåll. Jag ska dock inte gå inte på vad Hidden Surface och Object Removal är för något. Det visar sig sedan när du läser boken.

15. Clipping and Rendering the Final View

Lär dig nyttigheter som t.ex. The Painter's Algorithm, The Z-Buffer Algorithm och BSP Trees. Dessa uttryck säger dig troligtvis ingenting, men var lugn, du kommer att lära dig.

16. Voxel Graphics

Det här kapitlet är en trevlig liten överaskning, som faktiskt inte har något med övriga kapitel att göra. Voxelgrafiken ser väldigt imponerande ut och måste därför upplevas. Jag skulle kunna tänka mig att voxeltekniken används i en del flygsimulatorer och troligtvis i några bilspel.

17. Optimizing the 3D Engine

Nu börjar vi närma oss slutet på den här boken. Kapitlet innehåller massvis av optimeringar, som förhoppningsvis ger snabbare kod. Man skulle kunna säga att nästan varje viktig funktion optimeras.

18. Kill or Be Killed

Kill or Be Killed är namnet på det spel författaren tillverkar, som ett slags slutprojekt, för att visa vad man kan göra med 3d-motorn. Jag måste erkänna att jag inte är ett dugg imponerad av slutresultatet, främst på grund av den fula grafiken, men också för att spelet faktiskt är oerhört tråkigt. Den fula grafiken kan förklaras genom att boken är ett par år gammal, men varför han valde att göra ett sådant tråkigt spel, fattar jag bara inte.

Sammanfattning:

Black Art of 3D Game Programming är en mycket bra bok för dig som är ute efter grunderna inom både 2d- och 3d-programming. 3d-delen är dock några år gammal, vilket gör att betyget sjunker en aning. 2d-delen är emellertid fortfarande utmärkt. Att 2d-spelet Starblazer visar sig vara betydligt bättre än 3d-spelet Kill or Be Killed är ytterligare ett bevis på detta. Författaren, André Lamothe, höjer däremot betyget avsevärt, med sitt enkla språk och avspända attityd. Boken var för mig, trots mina knackiga engelska, inte ett dugg svår att förstå. Om du är intresserad av att köpa boken, så går det utmärkt att göra det hos MUX-Elektronik.

Av: Erik Heinemark 1998