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?
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...
Aihe on jo aika vanha, joten et voi enää vastata siihen.