ผลกระทบมากมายของ FOV นั้นขึ้นอยู่กับความเร็วที่คุณเคลื่อนที่ไปทั่วโลก (ความเร็วยังคงเท่าเดิม; ด้วย FOV แนวนอนที่กว้างเกินไปคุณจะเคลื่อนที่เร็วมากและแคบเกินไปคุณจะเคลื่อนที่ช้ามาก แนวนอน 90 องศาดูเหมือนจะเป็น "จุดที่น่าสนใจ" และผู้พัฒนาเกมสามารถปรับความเร็วการเคลื่อนไหวที่ต้องการสำหรับแต่ละเกมจากที่นั่น
เป็นกรณีที่ 4 คูณ 90 องศาคือ 360 องศาซึ่งเป็นวงกลม การตั้งค่า FOV แนวนอนเพื่อให้สามารถแมปกับจตุภาคด้านหน้า / ซ้าย / หลัง / ขวาได้ดี
และในที่สุดก็มีลูกเกาลัดเก่าแก่ที่มีความสำคัญและความเฉื่อย ฉันไม่แน่ใจว่าเกมใดที่เสนอ FOV ที่ผู้เล่นสามารถปรับได้ก่อน Quake แต่ Quake ทำและเริ่มต้นที่ 90 องศาในแนวนอนหรือไม่ มันเป็นเรื่องง่ายที่จะจินตนาการว่าเกมอื่น ๆ เพิ่งจะได้ 90 องศา
เป็นที่น่าสังเกตว่าในปัจจุบัน 90 องศากำลังกลายเป็นเรื่องธรรมดาน้อยลงด้วยการตั้งค่าเกม (โดยเฉพาะอย่างยิ่ง FPS ที่ทันสมัย) ด้วยค่าที่ต่ำกว่าเล็กน้อย - ในหรือประมาณ 80
หากคุณต้องการแก้ไข FOV ของคุณคุณสามารถใช้สิ่งนี้ (ฉันไม่ได้ทำเป็นว่ามันเป็นวิธีเดียวหรือดีที่สุด แต่มันสอดคล้องกับเครื่องคิดเลข FOV ที่http://www.emsai.net/projects/widescreen / fovcalc / ; นี้ถือว่าสัมพันธ์กับอัตราส่วนกว้างยาวฐาน 4: 3 (คุณสามารถปรับได้ในการเรียกไปยัง CalcFovY ด้านล่าง))
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;
}
จากนั้นเรียกมันว่า:
// 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 และ fov_y นั้นสามารถเสียบเข้ากับเมทริกซ์เปอร์สเปคทีฟต่อไปนี้ (ระเบียบการ 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
สิ่งนี้จะให้ FOV แนวนอนที่ปรับมุมมองได้ซึ่งจะรักษา FOV แนวตั้งโดยไม่คำนึงถึงความละเอียดและอัตราส่วนภาพ