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

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

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

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

1 ответ

Решение

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

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

Только визуализировать невидимые линии

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

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

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

Рендеринг всех линий

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

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