FOV'un etkisi, dünya üzerinde ne kadar hızlı hareket ettiğiniz gibi görünüyor (hala aynı hız; bu tamamen algılayıcı). Çok geniş yatay bir FOV ile çok hızlı hareket edeceksiniz, çok dar ile çok yavaş hareket edeceksiniz. 90 derece yatay "tatlı nokta" gibi görünüyor ve oyun geliştiricisi oradan bireysel oyunlar için istenen hareket hızını ayarlayabilir.
Aynı zamanda 4 kez 90 derecenin bir daire olan 360 derece olduğu da söz konusudur. Yatay FOV'u ön / sol / arka / sağ kadranlarla iyi eşleşecek şekilde ayarlamak mantıklı görünüyor.
Ve son olarak, önceliğin ve ataletin eski kestanesi var. Herhangi bir oyunun Quake'ten önce oyuncu tarafından ayarlanabilir FOV sunup sunmadığından emin değilim, ancak Quake yaptı ve varsayılan olarak 90 derece yataydı; diğer oyunların 90 dereceye kadar çıktığını hayal etmek kolaydır.
Günümüzde 90 derecenin daha az yaygınlaştığını, oyunların (özellikle modern FPS'ler) biraz daha düşük bir değere (80 veya daha fazla) ayarlandığını belirtmek gerekir.
FOV'nuzu düzeltmek istiyorsanız, böyle bir şey kullanabilirsiniz (bunun tek veya en iyi yol olduğunu iddia etmiyorum, ancak http://www.emsai.net/projects/widescreen adresindeki FOV hesap makinesiyle tutarlı / fovcalc / ; bu 4: 3 temel en boy oranına göre varsayılır (bunu aşağıdaki CalcFovY çağrısında ayarlayabilirsiniz)
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;
}
Sonra şöyle deyin:
// 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
Hesaplanan fov_x ve fov_y daha sonra aşağıdaki perspektif matrisine eklenebilir (OpenGL kuralı):
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
Bu, çözünürlük ve en boy oranına bakılmaksızın dikey FOV'yi koruyan, en boyuna göre ayarlanmış bir yatay FOV verecektir.