Eksamen mai 1997
Eksamen Grafisk databehandling 14. mai 1997, kl 0900 - 1300 Alle skrevne og trykte hjelpemidler tillatt Dersom du finner noe uklart i oppgaveteksten så gjør dine egne forutsetninger og redegjør for disse. |
Det forutsettes programmering av OpenGL i MS Visual C++. All den nødvendige koden skal kunne plasseres i xxView-klassen. Konsentrer deg om den koden det eksplisitt spørres etter. All annen kode som skal til for å få OpenGL til å fungere i VC++ er irrelevant for besvarelsen
Hafjell
Oppgaven går ut på å planlegge og vise ei møblert hytte for en av våre mindre kjente og ganske eksentriske millionærer. Hytta har ett rom og har åpen himling (ikke noe loft). Hytta er orientert som på tegningen og de målene som er satt kan du anta definerte som konstanter i programmet.
Du kan forutsette at verken gulv, tak eller vegger har noen tykkelse, og at de derfor kan tegnes som polygoner.
Den eneste typen møbel som skal finnes i hytta er en slags krakk med tre bein. Krakken har en form som er slik at høyden er den samme som diameteren. Hytta skal møbleres med en stor krakk midt i hytta som skal tjene som bord og n mindre krakker som stoler rundt bordet. (0 <= n <= 5). |
Det gjelder å lese gjennom hele oppgaven slik at de rutinene det spørres etter blir tilpasset hverandre. Redegjør for alle valg du treffer i forbindelse med planlegging av scenen, origos plassering etc.
I oppgave a) og b) skal vi se på hytteinnredningen, møblene, og ikke bekymre oss om hyttas vegger og tak.
Oppgave 1a
Skriv funksjonen
void TegnKrakk ();
Oppgave 1b
Innredningen
Skriv funksjonen
void MoblerHytte(int n);
som tegner ut bordet og n stoler. Du må selv finne rimelige dimensjoner som sikrer at møblene får plass i hytta. Tegn og forklar.
Oppgave 1c
I resten av oppgaven konsentrerer vi oss om selve hytta. Anta i første omgang at følgende funksjoner er definerte:
void TegnGulv() void TegnTak() void TegnVestVegg() void TegnNordVegg() void TegnSorVegg() void TegnOstVegg()
Hele scenen
Skriv funksjonen
void DrawScene();
som setter opp et fornuftig øyepunkt og synsretning og tegner en ferdig møblert hytte ved hjelp av de funksjonene som er er nevnt ovenfor samt den du laget under punkt b)
Oppgave 1d
Nordveggen
Skriv funksjonen
void TegnNordVegg();
Oppgave 1e
Taket
Skriv funksjonen void
TegnTak();
Oppgave 1f
Vestveggen
Hytteeieren har bestemt seg for å ha et kvadratisk vindu
med sidekant VS midt på vestveggen. Vinduet skal i framstillingen
på skjermen være slik at vi kan se inn i hytta. (Du
kan glemme vinduskarmer og annen garnityr)
Skriv funksjonen
void TegnVestVegg()
Oppgave 1g
Innsyn
Under visning av scenen på skjermen for kunden (hyttebyggeren) viser det seg at det er lite tilfredstillende å kikke inn gjennom vinduet for å få overblikk over innredningen.
Forklar hvordan du på en enkel måte kan framstille scenen slik at de husdelene (tak, vegger og gulv) som til enhver tid er mellom betrakteren og innredningen tas vekk, uavhengig av hvordan scenen er rotert eller hvordan øyepunktet er plassert.
Angi hvilke mekanismer i OpenGL som benyttes og hvilke rutiner og parametre som må involveres.
Oppgave 2
Spotlight (20%)
I denne oppgaven skal det ikke skrives funksjonell kode. En scene er planlagt slik at en spotlight skal sveipe over en flate.
Det er ikke uten videre enkelt å få til en "pen" avgensning av lyskjeglens skjæring med flaten, den belyste ellipsen. Forklar hva som er problemet, hva som er årsaken til problemet rent matematisk og angi hvordan du kan bedre situasjonen.
Oppgave 3
Spiral (30%)
En kjegle skal "dekoreres" med en spiral. Kjegla har en radius R og en høyde H. Anta i det følgende at kjegla står i xy-planet med spissen opp langs z-aksen.
Vi vet at vi kan tegne en slik kjegle med følgende kodebit:
GLUquadricObj *pQ; pQ = gluNewQuadric(); gluCylinder(pQ,R,0.0f,H,n,n); gluDeleteQuadric(pQ);
Spiralen skal slynge seg rundt kjegla, fra bunnen og ender opp i kjeglas spiss. Spiralen skal ha m omdreininger.
Deloppgaver: 3a) Parametrisk kurve
3b) Koden
|
Forslag til løsning
Et program som dekker huset:
solution.zip
Skrevet om til JOGL/NetBeans: https://svnit.hiof.no/svn/psource/JOGL/cottage
Et program som dekker sylinderen: solution2.zip