Отображение линий и текстуры многоугольника одновременно с Java3D - PullRequest
0 голосов
/ 21 мая 2011

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

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

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

1 Ответ

1 голос
/ 21 мая 2011

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

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

Отображать только невидимые линии

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

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

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

Визуализация всех линий

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

...