Довольно легко создать единый усеченный контур, охватывающий оба отдельных очага глаз, как показано на этой диаграмме, созданной Кассом Эвериттом в Oculus. Вы просто должны поместить вершину этого усеченного между глазами и немного позади них. Вы также можете увеличить расстояние в ближней плоскости, чтобы оно соответствовало исходной плоскости ближней плоскости глаза.
Такое усеченное пространство включает в себя небольшое пространство, которого не было в соединении оригинальных двух усеченных. Между двумя глазами есть небольшой объем; Кроме того, на диаграмме не показан вертикальный размер, но перетаскивание вершины усеченного конуса заставляет его включать в себя некоторое пространство над и под исходным порохом. Однако для практических целей выбраковки это, вероятно, не имеет значения. Выборка усеченного конуса обычно в любом случае консервативна, а толщина дополнительного пространства составляет всего несколько сантиметров.
Также возможно просто отбраковать исходную верхнюю и нижнюю плоскости усеченного конуса (которые разделяются между глазами) вместе с внешними боковыми плоскостями. Эти плоскости технически не образуют усеченного конуса, но если использовать «обычный» алгоритм отбраковки, который проверяет по одной плоскости за раз, алгоритм будет успешно работать на любом наборе плоскостей, которые вы ему предоставите.
Совместное использование усеченного контура, выбор LOD и т. Д. Между глазами, а не повторение его дважды в каждом кадре, является отличным способом оптимизации стоимости процессора при стерео рендеринге. Это также является обязательным условием, если вы хотите использовать метод рендеринга, который рисует оба глаза за один проход, например, инстансированный стерео рендеринг .
Я обобщил результаты Эверитта, если это необходимо.
В качестве бонуса, способ извлечь left0 / right0 из матрицы перспективы глаза:
Если у вас есть ряд основных. транспонировать для основной колонки. ср этот ответ
источник
Будьте осторожны, использование единого усеченного конуса для отбраковки работает только в том случае, если комбинированное поле зрения менее 180 градусов. В настоящее время существуют гарнитуры VR с увеличенным полем обзора около 200 градусов, то есть Pimax 5k + и StarVR . Невозможно построить традиционное поле зрения или матрицу одиночной проекции для поля зрения более 180 градусов.
Эти гарнитуры используют угловые экраны, поэтому плоскости проекции и прямые векторы в пространстве обзора не параллельны. Уравнения из других ответов здесь предполагают, что они параллельны и будут давать неверные результаты, если это предположение неверно.
Единственное объединенное представление может все еще быть полезным, но ваш код должен быть подготовлен к тому, чтобы иметь дело со случаями, когда это не может быть сконструировано, чтобы гарантировать его будущее. В качестве альтернативы, рассмотрите возможность отбора на один глаз или переключитесь на выборку на основе угла, которая может выражать угол обзора больше 180 градусов.
источник