С заданной сеткой в заданном месте есть быстрый и простой способ (с вершинойShader, фрагментShader или что-то еще), чтобы идентифицировать/удалить из сетки все грани/вершин, которые не отображаются на экране камеры (скрыты за другими лицами, вне представления fustrum и т. д.)?WebGL и/или Three.js: удалить ненужные грани
ответ
Если вы имеете в виду удалить с точки зрения не делает их это достигается наличием backface culling
включена (как это по умолчанию).
Обнаружение Backfaces на процессоре
Если вы хотите, чтобы удалить их из самой геометрии вам нужно будет перебирать грани и вычислить dot product между нормалями и вашим вектором направления LookAt/камерой, затем составляют новые буферы геометрии, содержащие только грани, где точка-продукт был положительным.
Обнаружение поглощенного Лица на CPU
Обнаружение скрытых/затенения лица можно было бы сделать перебором лица и строительство трех плоскостей, используя треугольник края экструдированного вдоль вектора LookAt по далеко обрезкой расстояния и использования перевернутая нормали лица сама по себе «передняя плоскость». Благодаря этому вы получите форму призмы с открытыми концами. Затем используйте этот том (его технически не том как его не закрытый), чтобы отбирать вершины оставшихся граней, когда все вершины лица лежат на всех плоскостях (при условии, что их нормальные точки находятся внутри), рассматриваемое лицо закрыто и их можно удалить.
Даже при использовании структур ускорения, таких как Bounding Volume Hierarchy, это будет не совместимо в режиме реального времени.
Обнаружение поглощенного Лицо на GPU/CPU
Еще проще и, вероятно, быстрее подход был бы присвоить уникальный цвет, представляющие собой идентификатор для каждого лица, делает геометрию к фреймбуферу, итерации этого пикселя данных , перетаскивая цвета обратно в их соответствующий идентификатор и таким образом создавая список видимых граней.
Дополнительная информация
Хотя его обычно не делается на уровне геометрии чтения the wikipedia article on occlusion culling для получения дополнительной информации.
Я больше искал второй вариант. Моя забота о скрытых лицах. На одной и той же сетке, если одно лицо помещается «сзади» другого, но, глядя на камеру, я полагаю, что продукт точки будет положительным, но лицо не должно отображаться. Это правильно? – Minichua
Да, вы правы, точечный продукт будет положительным, даже если лицо не будет видно. То, что вы хотите, называется «окклюзионное отбраковка». Я отредактировал свой ответ и добавил два подхода к обнаружению закрытых лиц, а также ссылку с дополнительной информацией по этой теме. Однако, не зная, что ваш прецедент неспособен советовать о хорошем подходе. –
Мой случай - редактор 3D-графики. В этом редакторе мне нужно проецировать изображения на сетку. Там уже есть пример проекции в Three.js, но они u – Minichua