Как показать/скрыть часть элемента в Autodesk Viewer v7

В настоящее время мы используем API производных моделей для загрузки 3D-моделей и последующей их визуализации в браузере с помощью Autodesk Viewer v7 (ранее Forge Viewer).

По разным причинам мы пытались скрыть и показать части модели, но для этого в некоторых случаях нам нужно иметь возможность скрывать геометрические части некоторых элементов, но при этом видеть остальные. Например, если бы у нас был элемент серого цвета (см. изображение ниже), мы хотели бы сделать часть элемента красного цвета прозрачной.

Я просмотрел документы Viewer API, и там есть функции, которые позволяют отображать и скрывать полные элементы, но не обрезать элементы по заданному пути.

Хотя в документах упоминается функциональность наложения, которая позволяет нам добавлять пользовательские геометрии, взаимодействуя с библиотекой THREE, на которой работает средство просмотра, рисование копии всей модели кажется неэффективным и склонным давать плохие результаты.

При поиске в SO я обнаружил, что библиотека THREE v71 (которая является версией, которую использует Viewer) имеет возможность перекрывать элементы с помощью опции colorWrite. См. эти ссылки для справки:

  1. окклюзия прозрачных объектов в three.js
  2. Окклюзия объектов реального мира с помощью three.js

Я попытался реализовать что-то подобное, используя ключ colorWrite при создании нового материала Three в оверлее, но ничего не происходит. Это заставляет меня думать, что либо Autodesk Viewer перезаписывает порядок рендеринга (что имеет смысл), либо открыто игнорирует параметр colorWrite. Кто-нибудь знает, почему и есть ли обходной путь для этого? Или кто-нибудь знает, есть ли другой способ вырезать элемент, который я не рассматриваю?

Обратите внимание, что мы должны делать это с несколькими элементами одновременно, и что периодическая повторная загрузка модели не подходит для нас.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я получил следующий отзыв:

Подход, указанный в потоке SO, не работает, потому что мы игнорируем как свойство материала colorWrite, так и свойство сетки renderOrder. Я также думаю, что в целом этот подход не будет работать должным образом, потому что использование невидимого объекта для закрытия части другого объекта всегда будет зависеть от вида, а также закрывать другие объекты на заднем плане (так что это не будет просто «вырезать» out' часть одного объекта). Как правило, это не вариант использования LMV, потому что это инструмент просмотра, а не инструмент твердотельного моделирования.

Разрезанные плоскости могут помочь получить то, что вы хотите, но они также имеют ограничения:

Можно определить несколько плоскостей сечения для создания «формы» (это также то, что делает блок сечения внутри). Но поскольку они бесконечны, вы не сможете отрезать части одного объекта, но не другие объекты (или другие части того же объекта, которые пересекают секущую плоскость). Они также спроектированы так, чтобы быть обращенными «наружу». Поле раздела, например, можно использовать только для сужения сцены до некоторых интересующих элементов. Нельзя сделать наоборот, т.е. вырезать какую-то внутреннюю часть конструкции и оставить все вокруг нее.

Вот что может предложить блок секции:

Спасибо, Адам, хотя я надеялся, что у кого-то будет обходной путь, это отвечает на мой вопрос о зрителе, игнорирующем параметр colorWrite, и если был установленный способ вырезания элементов, поэтому я приму его как ответ.

CRuizH 02.02.2023 13:04

Просто для справки в будущем, не могли бы вы добавить, кто дал вам этот отзыв?

CRuizH 02.02.2023 13:06

Команда инженеров Viewer дала отзыв

Adam Nagy 02.02.2023 15:27

Другие вопросы по теме