Børre Stenseth
Gamle eksamener > V 1997

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.

main

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.

koord

krakk

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.

spot

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.

kjegle

Deloppgaver:

3a) Parametrisk kurve


Beskriv et punkt på spiralen som en parametrisk kurve: P(t)=[x(t),y(t),z(t)]. Angi hvilket område parameteren t skal gjennomløpe.

3b) Koden


Skriv den kodebiten som tegner spiralen som en enkel sekvens av linjestykker

Forslag til løsning

Et program som dekker huset: solution.zip
Skrevet om til JOGL/NetBeans: https://svn.hiof.no/svn/psource/JOGL/cottage

Et program som dekker sylinderen: solution2.zip

(Velkommen) Gamle eksamener>V 1997 (H 1997)