Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Kuvakulman pyöritys

Meitsi [10.12.2005 20:40:18]

#

Aloittelin opengl:lään tutustumista, ja olen jo jonkinverran edennyt. Nyt tuli eteen pieni ongelma, ei opengl:ssä, vaan yleisesti toteutustavasta.

Miten kannattaisi toteuttaa hiirellä kuvakulman pyöritys, niinkuin esim räiskintäpeleissä on. Hiiren koordinaatit ovat selvillä ja muutettu GLfloatiksi + säädetty niin, että origo on samassa kohtaa kuin grafiikassa. Senverran tiedän, että hiiri pitää joka framessa palauttaa takaisin keskelle (sen osaan tehdä kyllä) ja pitää verrata hiiren paikkaa edellisen framen paikkaan, ja ottaa erotus. En vain oikein tiedä miten jatkaa tästä.

Linkkiä / pseudokoodia?

Metabolix [10.12.2005 21:06:15]

#

Tässä vähän pätkiä omista koodeista. Kerrottakoon ensin, että Hiiri.LiikeX ja Hiiri.LiikeY on säädetty menemään niin, että X kasvaa oikealle ja Y ylös.

// Käännetään pistettä kiiren liikkeen mukaan sopivalla kertoimella.
// Eli lisätään kiertokulmaa (asteina)

// Ylös tai alas
Piste.AddDegYlos(Hiiri.LiikeY * 0.3f);

// Y-akselin ympäri eli vaakatasossa
Piste.AddDegSivu(Hiiri.LiikeX * 0.3f);

// Tässä lasketaan uusi suunta. Kaikenlaista karsittu nyt pois, kuten kulmien sievennys siistille välille [-180 .. 180] ja yläsuunnassa [-90 .. 90] sekä muunnos radiaaneiksi.
TPiste::LaskeSuunta()
{
	movY = sin(radYlos);
	movX = sin(radSivu) * cos(radYlos);
	movZ = -cos(radSivu) * cos(radYlos);
	// Z-suunnassa miinus, koska OpenGL:n kamera osoittaa negatiiviselle Z:lle päin.
}

// GL:llä käännetään maailmaa:
glRotated(-Piste.degYlos, 1.0f, 0, 0);
glRotated(Piste.degSivu, 0, 1.0f, 0);

Toivottavasti siinä oli kaikki merkittävä. Olen pari kertaa harkinnut tuon pisteluokan julkaisua koodivinkkinä, mutta se on vielä niin vajavainen, etten ole viitsinyt...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta