Я работаю над проектом, для которого я должен вычислить координаты экрана данного мировой точки.Есть ли способ избежать деления на 0 при растрировании?
Я прочитал некоторые материалы и организовал эту задачу на четыре подзадачи:
- Умножить мир точечных с обратной ТРС-матрицей моей камеры получить точку в камере координата.
Умножить координаты точки в камере с матрицей проецирования для получения точка в координатах отсечения. Матрица проекции выглядит следующим образом
(1/tan (fov * 0.5 * PI/180)), 0, 0, 0; 0, (1/tan (fov * 0.5 * PI/180)), 0, 0; 0, 0, - ((f + n)/(f - n)), - (2 * f * n/(f - n)); 0, 0, -1, 0;
- Умножить точки в вырезке координат с 1/W получить точку в NDC.
- Конвертировать ndc в Координаты экрана.
Это прекрасно работает, но я натолкнулся на некоторые странные результаты и ошибки. Оказывается, что значение ш от точки в координатах вырезку обращается в 0, если г значение точки в камере координат 0. Это приводит к делению на 0 на шаге 3.
ли я пропустить что-то или это нормально? Есть ли способ вычислить положение экрана точек на оси z камеры или я должен просто проверить, (z == 0)
и вернуть середину экрана?
самым эффективным будет добавление чека – Ulterior