OpenGL, как скрыть линии между треугольниками с раскраской вершин? - PullRequest
2 голосов
/ 16 июня 2010

Куб с очевидными треугольными линиями http://img15.imageshack.us/img15/2096/cubeobviouslines.png

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

Что вызывает очевидную линию и как я могу ее избежать?

Ответы [ 2 ]

3 голосов
/ 16 июня 2010

Что вызывает очевидную линию

Цвета интерполируются по всему треугольнику.Каждый треугольник имеет только 3 цвета.Поэтому процедура интерполяции просто не «знает», что существует четвертый цвет (в соседнем треугольнике), который следует принимать во внимание, что дает неточный результат.это?

Два решения:

  1. Использование текстур вместо цветов вершин.Это требует дополнительной памяти для текстуры, но вы можете легко использовать текстуру 2x2 пикселей.
  2. Использовать фрагментный шейдер, который интерполирует 4 цвета на основе текстурных координат.Для этого требуется видеокарта с поддержкой фрагментных шейдеров.
1 голос
/ 16 июня 2010

Я считаю, что это связано с интерполяцией цвета, используемой для затенения каждого треугольника.Треугольник интерполирует цвет между тремя точками, но не знает четвертой точки.Следовательно, нет оснований предполагать, что цветовая интерполяция будет плавной по границе треугольника.Вы можете гарантировать, что сама линия будет окрашена одинаково, поскольку пиксели на границе треугольника зависят только от двух точек, которые будут одинаковыми.

Итак, вы видите изменениеградиент вокруг этой точки.Когда у вас внезапно меняются градиенты, зрительная система человека подчеркивает линию, что приводит к тому, что называется Маха .

Единственный хороший способ избавиться от полосы - сделать изменение градиента менее серьезным;как правило, путем увеличения тесселяции.Используйте больше треугольников!Чем больше треугольников, тем больше цветовой выборки, тем менее заметны полосы Маха.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...