В настоящее время мы используем API производных моделей для загрузки 3D-моделей и последующей их визуализации в браузере с помощью Autodesk Viewer v7 (ранее Forge Viewer).
По разным причинам мы пытались скрыть и показать части модели, но для этого в некоторых случаях нам нужно иметь возможность скрывать геометрические части некоторых элементов, но при этом видеть остальные. Например, если бы у нас был элемент серого цвета (см. изображение ниже), мы хотели бы сделать часть элемента красного цвета прозрачной.
Я просмотрел документы Viewer API, и там есть функции, которые позволяют отображать и скрывать полные элементы, но не обрезать элементы по заданному пути.
Хотя в документах упоминается функциональность наложения, которая позволяет нам добавлять пользовательские геометрии, взаимодействуя с библиотекой THREE, на которой работает средство просмотра, рисование копии всей модели кажется неэффективным и склонным давать плохие результаты.
При поиске в SO я обнаружил, что библиотека THREE v71 (которая является версией, которую использует Viewer) имеет возможность перекрывать элементы с помощью опции colorWrite. См. эти ссылки для справки:
Я попытался реализовать что-то подобное, используя ключ colorWrite при создании нового материала Three в оверлее, но ничего не происходит. Это заставляет меня думать, что либо Autodesk Viewer перезаписывает порядок рендеринга (что имеет смысл), либо открыто игнорирует параметр colorWrite. Кто-нибудь знает, почему и есть ли обходной путь для этого? Или кто-нибудь знает, есть ли другой способ вырезать элемент, который я не рассматриваю?
Обратите внимание, что мы должны делать это с несколькими элементами одновременно, и что периодическая повторная загрузка модели не подходит для нас.





Я получил следующий отзыв:
Подход, указанный в потоке SO, не работает, потому что мы игнорируем как свойство материала colorWrite, так и свойство сетки renderOrder. Я также думаю, что в целом этот подход не будет работать должным образом, потому что использование невидимого объекта для закрытия части другого объекта всегда будет зависеть от вида, а также закрывать другие объекты на заднем плане (так что это не будет просто «вырезать» out' часть одного объекта). Как правило, это не вариант использования LMV, потому что это инструмент просмотра, а не инструмент твердотельного моделирования.
Разрезанные плоскости могут помочь получить то, что вы хотите, но они также имеют ограничения:
Можно определить несколько плоскостей сечения для создания «формы» (это также то, что делает блок сечения внутри). Но поскольку они бесконечны, вы не сможете отрезать части одного объекта, но не другие объекты (или другие части того же объекта, которые пересекают секущую плоскость). Они также спроектированы так, чтобы быть обращенными «наружу». Поле раздела, например, можно использовать только для сужения сцены до некоторых интересующих элементов. Нельзя сделать наоборот, т.е. вырезать какую-то внутреннюю часть конструкции и оставить все вокруг нее.
Вот что может предложить блок секции:
Просто для справки в будущем, не могли бы вы добавить, кто дал вам этот отзыв?
Команда инженеров Viewer дала отзыв
Спасибо, Адам, хотя я надеялся, что у кого-то будет обходной путь, это отвечает на мой вопрос о зрителе, игнорирующем параметр colorWrite, и если был установленный способ вырезания элементов, поэтому я приму его как ответ.