Я пытаюсь написать набор шейдеров, чтобы можно было рисовать края поверхностей (не полигонов!), Как в игре Echochrome.
Из того, что я помню по графическому программированию, это можно сделать с помощью многопроходного рендеринга. Первый проход должен кодировать векторы нормали лица и глубины как цвета RGBA и отрисовывать их в текстуре. Второй проход должен искать значения в текстуре и рисовать границу, если информация о нормали или глубине в текущем фрагменте значительно отличается от нормалей или глубин окружающих текселей.
(Примечание. Если есть более простой способ сделать это, сообщите мне, особенно если это легко сделать во Flash. Однако мой конкретный вопрос заключается в следующем.)
Я наткнулся на загвоздку при программировании первого прохода. Из того, что я прочитал в статье Введение в программирование трехмерных игр с помощью DirectX 9.0c: подход шейдера Фрэнка Д. Луны, правильный способ "интерполировать" вектор нормали - это усреднить векторы нормали для вершины треугольника, затем используйте это значение для каждого фрагмента на поверхности. Однако мой фрагментный шейдер вместо этого интерполирует вектор нормали, что приводит к рисованию градиента вместо сплошных цветов для поверхностей.
Как я могу заставить AGAL выполнять необходимое усреднение вместо интерполяции?