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.