Banyak efek dari FOV adalah pada seberapa cepat Anda tampaknya bergerak di dunia (masih kecepatan yang sama; ini murni persepsi). Dengan FOV horizontal terlalu lebar Anda akan terlihat bergerak sangat cepat, dengan terlalu sempit Anda akan terlihat bergerak sangat lambat. 90 derajat horisontal tampaknya menjadi "sweet spot", dan pengembang game dapat menyesuaikan kecepatan gerakan yang diinginkan untuk masing-masing game dari sana.
Ini juga terjadi bahwa 4 kali 90 derajat adalah 360 derajat, yang merupakan lingkaran. Menyiapkan FOV horizontal sehingga memetakan dengan baik ke kuadran depan / kiri / belakang / kanan tampaknya masuk akal.
Dan akhirnya ada kastanye tua yang diutamakan dan inersia. Saya tidak yakin apakah ada game yang menawarkan FOV yang dapat disesuaikan pemain sebelum Quake, tetapi Quake melakukannya dan defaultnya adalah 90 derajat horizontal; mudah membayangkan game lain hanya mengambil 90 derajat dari sana.
Perlu dicatat bahwa saat ini 90 derajat menjadi kurang umum, dengan permainan (terutama FPS modern) ditetapkan pada nilai yang sedikit lebih rendah - di atau sekitar 80.
Jika Anda ingin memperbaiki aspek FOV Anda, Anda dapat menggunakan sesuatu seperti ini (saya tidak berpura-pura itu satu-satunya atau cara terbaik, tetapi konsisten dengan kalkulator FOV di http://www.emsai.net/projects/widescreen / fovcalc / ; ini mengasumsikan relatif terhadap rasio aspek dasar 4: 3 (Anda dapat menyesuaikannya dalam panggilan ke CalcFovY di bawah))
float CalcFovX (float fov_y, float width, float height)
{
float a;
float y;
if (fov_y < 1) fov_y = 1;
if (fov_y > 179) fov_y = 179;
y = height / tan (fov_y / 360 * M_PI);
a = atan (width / y);
a = a * 360 / M_PI;
return a;
}
float CalcFovY (float fov_x, float width, float height)
{
float a;
float x;
if (fov_x < 1) fov_x = 1;
if (fov_x > 179) fov_x = 179;
x = width / tan (fov_x / 360 * M_PI);
a = atan (height / x);
a = a * 360 / M_PI;
return a;
}
Kemudian menyebutnya seperti:
// you should use #define of const instead of magic numbers here, which are just here for illustration purposes in this sample
fov_y = CalcFovY (playerAdjustableFOV, 4, 3); // this is your base aspect that adjusted FOV should be relative to
fov_x = CalcFovX (fov_y, width, height); // this is your actual window width and height
Fov_x dan fov_y yang dihitung kemudian dapat dicolokkan ke matriks perspektif berikut (konvensi OpenGL):
1.0f / tan (DEG2RAD (fov_x) * 0.5f),
0,
0,
0,
0,
1.0f / tan (DEG2RAD (fov_y) * 0.5f),
0,
0,
0,
0,
(zFar + zNear) / (zNear - zFar),
-1,
0,
0,
(2.0f * zFar * zNear) / (zNear - zFar),
0
Ini akan memberi Anda FOV horizontal yang disesuaikan dengan aspek yang mempertahankan FOV vertikal terlepas dari resolusi dan rasio aspek.