Aloitin tässä testimielessä pienen ohjelman, jolla voi pyöritellä 3d-objektia sekä liikkua kameralla vapaasti. Kameran liikuttaminen vaaka-akselilla onnistuu hienosti, mutta halutaan laittaa kulmaa pystysuunnassa, niin kulma rajoittuu 90 asteeseen (ja jotenkin hidastuu loppua kohden).
Aloitin tekemään systeemiä XNA:lla tutoriaalin pohjalta, jossa kameralle annetaan sijainti sekä kohteen sijainti.
// cameraPosition on kameran sijainti // cameraPoint on sijainti, johon kamera osoittaa // kulma_x on rotaatio vaaka-akselilla // kulma_y on rotaatio pystyakselilla cameraPoint.X = cameraPosition.X + (float)Math.Cos((kulma_x-90) * Math.PI / 180); // kulma on -90, koska osoittaa vakiona väärään suuntaan cameraPoint.Z = cameraPosition.Z + (float)Math.Sin((kulma_x-90) * Math.PI / 180); cameraPoint.Y = cameraPosition.Y + (float)Math.Sin(kulma_y * Math.PI / 180);
Vaakatasossa siis onnistuu pyörimään ympyrää, mutta pystysuunnassa tuo rajoittuu 90 asteeseen (kun menee yli niin lähtee menemään väärinpäin). Miten tämä pitäisi oikeasti tehdä?
esimerkiksi näin:
http://www.xnawiki.com/index.php?title=Easy_Camera_Movement_Class
Aihe on jo aika vanha, joten et voi enää vastata siihen.