Отображать полигональные линии и текстуру одновременно с помощью Java3D

#java #3d #java-3d

#java #3D #java-3d

Вопрос:

У меня есть 3D-сетка, которая успешно визуализируется с помощью текстур (POLYGON_FILL). Что я хотел бы сделать, так это также одновременно программно рисовать линии (POLYGON_LINE PolygonAttribute) другого цвета, чтобы отобразить края треугольников. Это выглядело бы примерно так, как вы могли бы видеть в программе 3D-моделирования или каком-либо подобном приложении — текстуры граней с контурами проводов, иллюстрирующими края граней.

Легко ли это сделать с помощью API или потребуется некоторая креативность? Думаю, я мог бы изменить координаты текстуры так, чтобы текстура немного не доходила до краев полигона (но я думаю, это выглядело бы непоследовательно, если бы зазор на краях граней сильно варьировался), однако я использую TexCoordGeneration и я не уверен, с чего начать делать что-то подобное.

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

Ответ №1:

Я больше знаком с OpenGL, поэтому, к сожалению, этот ответ — всего лишь урок теории. Я бы не стал предполагать, что это «встроенная» функция Java3D (любой, не стесняйтесь, поправьте меня, если это так). Для этого вам нужно выполнить несколько проходов рендеринга. Из небольшого поиска, который я только что выполнил по этой теме, не похоже, что Java3D имеет большую поддержку для такого рода вещей. Возможно, вы захотите рассмотреть возможность использования API более низкого уровня, такого как OpenGL, особенно учитывая, что вы сказали, что это «настраиваемое приложение для 3D-моделирования». Вы получите намного больше контроля над тем, как объекты отображаются на экране.

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

Отображать только нескрытые линии

Для каждого кадра вам необходимо:

  1. Визуализируйте сетку с помощью POLYGON_FILL .
  2. Не очищая буфер глубины, снова визуализируйте сетку с помощью POLYGON_LINE .

Буфер глубины определяет, следует ли рисовать пиксель или нет, исходя из расстояния полигона от зрителя. Тест глубины по умолчанию для Java3D, согласно javadoc, является LESS_OR_EQUAL таким образом, это должно привести к тому, что линии будут нарисованы поверх текстур.

Визуализировать все линии

Это то же самое, что и выше, но вам нужно очистить буфер глубины между двумя проходами рендеринга.

Комментарии:

1. Целью было бы отобразить нескрытые линии