DATORGRAFIKLABORATION 2
ENKEL 3D-VÄRLD
Demonstrationsuppgifter
Uppgift D1: Animering och interaktion
Kör programmet knotplot, som visar upp s k knutar (från en matematisk branch kallad knutteori). Tryck på
knappen 1 i övre delen av högra fönstret. Du ser nu ett belyst slutet rep. Du kan röra på det med MK1 (bågboll), MK2
(translation), MK3 (zoom in/ut = höger, vänster). Med det fjärde av de blå reglagen kan du ändra reptjockleken. Med
t ex Go+Undamped nedtill kan du slå på animering. Prova.
Uppgift D2: Projektion
Om du tycker att det är oklart vilken roll de olika storheterna i gluPerspective/gluLookAt spelar, så kanske denna
uppgift kan hjälpa. Testa Nates Tutorial projection.exe.
Programmeringsuppgifter
Uppgift P1: Ett snurrande klot
Skriv ett program som ritar upp världskoordinatsystemets axlar och ett rött klot som snurrar runt y-axeln (och på
något avstånd från den). Det blir nog mest effektfullt om du väljer en hönsnätssfär. Titta i negativ synriktning på
lagom håll och med perspektiv.
Uppgift P2: Ett bildpussel
Avsnitt 15 i OGL-häftet som behövs för denna uppgift dröjer jag kanske med en eller annan föreläsning. Rita något i
ett kvadratiskt 300x300-fönster. Tänk dig fönstret delat i nio lika stora rutor. Kopiera innehållet i var och en
till en pixmap-variabel. Kopiera sedan tillbaka i slumpmässig ordning. Själva pusslandet struntar vi i.
Uppgift P3: En 3D-värld
I den här uppgiften ska ni skapa en lättare 3D-värld att navigera i. Eftersom detta lätt kan bli omfattande
om man inte vet vad man sysslar med tillhandahåller vi en grund att stå på, se filer (3dworld).
Innan ni börjar med uppgifterna nedan, bekanta er med den kod som redan finns så ni vet vad som händer.
Steg 1: Först måste ni koda renderingssystemet dvs utritning av en modell. Här vill vi att ni använder
vertex arrays (http://www.opengl.org/documentation/specs/version1.1/glspec1.1/node21.html är en liten referens, röda
boken är annars mer pedagogisk) dvs anger alla punkter som en lista och sedan indexerar denna när ni sätter ut polygoner.
I verkligheten matas modeller in som tristrips men det struntar vi i för nu (återkommer i fortsättningskursen). Börja att
koda renderingssystemet utan vertex arrays för att minimera felsökning. Kom ihåg glPerspective.
Steg 2: Ta en titt på cube.smp. Detta är ett lätt filformat för modeller specialgjort för den här labben (tidigare
användes VRML men det är avsevärt mer jobb att läsa in). Ni ska skriva en läsare för det här formatet. Nu är det här ett
leksaksformat; vill ni använda ett annat format är det fritt fram.
Steg 3: Nu har ni fria händer att konstruera en 3D-värld att navigera i. Lättare saker som mark (som bara är en
polygon) kan ni konstruera "manuellt" med samma API som det ni läste in filer med. Andra objekt kan ni konstruera
med något 3D-program (se huvudsidan). Vi tillhandahåller en konverterare VRML till SMP. Konverteraren är
väldigt enkel och stöder inte allt i VRML. Koden finns tillgänglig (Haskell) för den som vill utöka. OBS! VRML-läsaren
är lite väl simpel; endast en lista med koordinater får finnas. Det upptäcktes senare att program inte alltid exporterar
rätt. Så gör något väldigt enkelt och kolla om detta är uppfyllt.
Steg X: Den överseriöse ser nog att det finns plats för en massa tillägg på den här världen. Varför inte
testa att utöka SMP eller lägga in rörliga objekt i programmet (använd idle callbacken)? Alternativt kan ni återkomma senare när ni får tid över.
This is a personal www page. Opinions expressed here do not represent the official views of Chalmers University of Technology. Please refer to
Chalmers www policy.