Børre Stenseth
Gamle eksamener > H 1997

Eksamen desember 1997

Alle skrevne og trykte hjelpemidler tillatt

Tid for eksamen er 4 timer.

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.


I oppgave en skal vi se litt på en liten trafikkpoliti, Robocop. Robocop skal se slik ut:

cop1

med følgende dimensjoner:

cop2

// cop dimensions
#define BASIC_R 10.0f
#define BASIC_L 1.0f
#define BODY_R  BASIC_R/3.0f
#define BODY_L  15.0f
#define ARM_R   0.5f
#define ARM_L   BODY_L/3.0f
#define HAND_R  3.0f
#define HAND_L  0.5f
#define NECK_R  ARM_R
#define NECK_L  2.0f
#define HEAD_R  HAND_R
#define JOIN_R  ARM_R*1.5f

Frihetsgradene er beskrevet ved:

GLfloat v[6];

cop3

Rotasjonene v0 og v5 er beskrevet om z-aksen, mens rotasjonene v1,v2,v3,v4 er beskrevet om x-aksen.

Du kan kanskje ha bruk for denne funksjonen:

void DrawClosedCylinder(GLfloat R,GLfloat H)
{
 // draws a closed cylinder with length
 // along z and
 // leaves origo on top of cylinder
 GLUquadricObj *pQ;
 pQ = gluNewQuadric();
 gluDisk(pQ,0.0f,R,QP,QP);
 gluCylinder(pQ,R,R,H,QP,QP);
 glTranslatef(0.0f,0.0f,H);
 gluDisk(pQ,0.0f,R,QP,QP);
 gluDeleteQuadric(pQ);
}

Oppgave 1a

Skriv funksjonen:

void DrawRoboCop(GLfloat v[], int n);

som tegner ut vår lille trafikkpoliti. v er de 6 frihetsgradene. Funksjonen fungerer bare for n=6.

Oppgave 1b

Gitt funksjonen det spørres etter i oppgave a) og følgende medlemsvariable til CxxView:

GLfloat v1[6];
GLfloat v2[6];
Glint m_antallsteg;
GLfloat m_dt;

Skriv den nødvendige koden for å lage en animasjon på m_antallsteg steg mellom posisjon v1 og v2 på m_t sekunder.

Oppgave 1c

Robocop skal stå ut og jobbe hele døgnet og må være synlig. Vi skal derfor henge opp en lampe over hodet på Robocop. Lampa skal ikke blende trafikentene og skal derfor kaste en avgrenset lyskjegle ned på Robocop.

Tegn og forklar og skriv den nødvendige koden for å sette opp et slikt lys.

Oppgave 2 Retningsbestemt lys

I OpenGL beregnes det retningsbestemte lysets bidrag til intensiteten i et punkt som:

formel1, der Ider intensiteten på det retningsbestemte lyset, L er lysretningen og N er normalen i det aktuelle punktet og kd er det aktuelle materialets refleksjonskonstant for retingsbestemt lys.

Oppgave 2a

Forklar vilke forutsetninger som er nødvendige for at dette skal fungere etter hensikten og hva vi kan gjøre i når vi programmerer for å sikre oss at forutsetningene er oppfylt.

Oppgave 2b

Øyets plassering inngår ikke i uttrykket. Hvordan kan det forklares ?

Forslag til løsning

Et program som dekker det meste er: solution.zip

Skrevet om til JOGL/NetBeans: https://svn.hiof.no/svn/psource/JOGL/robocop

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