Я делаю кусок кода для приложения DirectX. Это значит не показывать лица, которые не видны. Обычно это был бы просто использование Z-буфера, но я делаю много ходов и вращений меша, поэтому я хотел бы не делать их и экономить вычислительную мощность. Я опишу это на кубе. Вы смотрите спереди, поэтому вы видите только одно лицо, и вам не нужно поворачивать 5, что осталось. Если бы у вас была одна сторона куба из 100 * 100 мешей, было бы здорово, если бы вам не приходилось переворачивать мешы размером в 50 Кб, которые вам действительно не нужны. Итак, я сохранил X, Y, Z вращение камеры (Z вращение я не использую), а также X, Y, Z вращение граней. В этом упрощенном кубе я вижу лица, которые делают это утверждение верным:
cRot //camera rotation in degrees
oRot //face rotation in degrees
if(oRot.x > cRot.x-90 && oRot.x < cRot.x+90
&& oRot.y > cRot.y-90 && oRot.y < cRot.y+90)
Но возникает проблема. Если я поверну вокруг, камера может получить значение 330, например. В этом состоянии я бы увидел переднюю и правую часть куба. Правая сторона имеет вращение 270, так что все правильно в утверждении IF. Проблема с 0 вращением передней грани, что также на 360 градусов.
Поэтому мой вопрос заключается в том, как заставить это утверждение работать, потому что, когда я использую модуль по модулю, он потерпит неудачу для этой правой стороны и таким образом не будет работать для 0 = 360.