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
- Í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!
- 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. - 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! - A pályák síkját lehessen elfordítani az XZ síkhoz képest!