Опитвам се да внедря отрязване на фрустума в моята OpenGL 2d игра. Единственият вид геометрични обекти в моята игра на този етап са правоъгълници, така че си помислих, че това ще бъде доста лесно, но получавам неочаквани резултати. Настроил съм симетрична перспективна проекция с ъгъл на зрително поле от 45 градуса и близки и далечни равнини съответно на 0,01 и 50. Векторът на окото винаги е успореден на оста z, камерата може да се движи само по осите x и y.
Идеята ми беше да получа правоъгълната област от световното пространство, която в момента е видима за камерата, в z-координатата на правоъгълника, който се опитвам да отсея. Тъй като камерата гледа към центъра на пресечения край, изчислявам разстоянието до краищата на тази видима правоъгълна област, както следва:
GLfloat maxDistance = givenRectangle.z * tanf(0.5 * (fovAngle * M_PI/180) );
След това добавям и изваждам това разстояние към и от координатите x и y на камерата, за да получа максималните и минималните видими x и y, и след това тествам дадения правоъгълник, за да видя дали е между тези стойности.
Въпросът ми е дали тук съм на прав път и защо горната формула връща абсурдно малка стойност (нещо*10^-37), когато имам обект при z=5, който трябва ясно да се вижда с камерата при ( 0,0,0)?