Recension av Black Art of 3D Game Programming
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
|