Előfeltétel

A feladatok megoldásához szükség lesz a múlt órán megírt tetraéder komponensre. Ez letölthető innen.

Közös feladat

Írjunk olyan programot, amiben körbe lehet járni a tetraédert billentyűzettel!

A billentyűzet-kezelést a Game1 osztályban valósítjuk meg, és a tetraéder BasicEffect-jének View-ját állítjuk majd vele.

Ehhez hozzá kell férni a View mátrixhoz:

public Matrix View
{
    get { return effect.View; }
    set { effect.View = value; }
}

A Game1.Update -ben kezeljük a billentyűzetet:

protected override void Update(GameTime gameTime)
{
    KeyboardState state = Keyboard.GetState();
    bool changed = false;

    if (state.IsKeyDown(Keys.Escape))
    {
        this.Exit();
    }
    else if (state.IsKeyDown(Keys.Right))
    {
        rotY += 0.1f;
        changed = true;
    }
    else if (state.IsKeyDown(Keys.Left))
    {
        rotY -= 0.1f;
        changed = true;
    }
    else if (state.IsKeyDown(Keys.Up))
    {
        h += 0.1f;
        changed = true;
    }
    else if (state.IsKeyDown(Keys.Down))
    {
        h -= 0.1f;
        changed = true;
    }

    if (changed)
        quad.View = Matrix.CreateRotationY(rotY) *
		Matrix.CreateTranslation(0, -h, -4);

    base.Update(gameTime);
}

Ehhez hozzá kell adni a két új adattagot a Game1 -hez:

float rotY = 0;
float h = 0;

Önálló feladatok

  1. Írd át tetraéder komponenst, hogy megadott sugarú pályán és a saját tengelye körül forogjon! Lehessen megadni a forgás sebességét is!
  2. Lehessen a körbejárni a színteret a nyilakkal!
    Használd a Matrix.CreateLookAt metódust a nézet megadásához! Ennek első paramétere, hogy hova akarunk nézni (ez legyen az origó), második, hogy honnan (ez legyen egy akkora sugarú gömb egy pontja, amiben elfér a színtér, ezen mozogjon majd a felhasználó), és a harmadik meghatározza merre álljon a nézet teteje (ez legyen az Y irányba mutató egységvektor).
    R sugarú gömb egy pontjának koordinátái: (cos(beta)cos(alfa)*R, sin(beta)*R, cos(beta)sin(alfa)*R)
    ahol alfa az pont vetülete és az X tengely által bezárt szög, beta az XZ síkkal bezárt szög.
  3. Legyen a forgás pályája ovális!
    Egy XZ síkú ovális egyenlete: (cos(fi)*R1, 0, sin(fi)*R2), ahol R1 az ovális X tengelymetszet, R2 a Z tengelymetszet távolsága origótól.
    Ezt a pályát jelenítsük is meg egy LineStrip-pel!
  4. A pályák síkját lehessen elfordítani az XZ síkhoz képest!