Рисование контура с помощью OpenGL ES - PullRequest
4 голосов
/ 20 октября 2011

В каждой технике, которую я нашел или пытался отрисовать в OpenGL, используется какая-то функция, недоступная в OpenGL ES ...

На самом деле я могу установить для параметра deepMask значение false, нарисовать объектв качестве каркаса линии шириной 3 пикселя, включите глубину маски, а затем рисуйте мой объект.Он не работает для меня, потому что он обрисовывает в общих чертах только внешние части моего объекта, а не внутренние.

На следующем изображении показаны два контура, левый - правильный контур, правый - то, что я получил.

enter image description here

Итак, кто-то может направить меня к методике, которая недоступна в OpenGL ES?

1 Ответ

4 голосов
/ 21 октября 2011

Давно не делал ни одного из них, но я думаю, что вы почти у цели! Я бы порекомендовал вот что:

  • Оставьте включённым deepMask, но переверните заднюю поверхность, чтобы визуализировать только "внутреннюю часть" объекта.
  • Нарисуйте сетку с помощью этого шейдера, который слегка выталкивает все вершины вдоль их нормалей в виде сплошного цвета (ваш контурный цвет, вероятно, черный). Убедитесь, что вы рисуете сплошные треугольники, а не только GL_LINES.
  • Переверните заднюю поверхность обратно в нормальное состояние и заново визуализируйте сетку, как обычно.

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

...