1

Я работаю с OpengGL ES 2.0 в Android. Мне даны эти вершины, которые я использовал для рисования фигур, соединяя их с линиями. Теперь мне нужно изменить цвет каждой из этих строк индивидуально. Я пробовал передать цветную матрицу для каждой вершины через вершинный шейдер для фрагментарного шейдера, но цвет интерполируется (что действительно имеет смысл, поскольку я даю разный цвет двум вершинам). Я сделал кое-что об этом и узнал, что glSmoothShader не может быть отключен в OpengGL ES.Как сделать цвет линии вместо градиента в OpengGL ES 2.0?

Есть ли способ окрасить эти линии без интерполирования цветов?

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

ответ

1

В принципе, единственный способ сделать это - использовать треугольники, а не треугольные полосы или вентиляторы. И для каждого набора из трех вершин для создания отдельных треугольников используется один и тот же цвет. Это приведет к удалению эффекта затенения, поэтому интерполяция между тем же цветом будет одного цвета. Более сложное объяснение: http://ruh.li/GraphicsShading.html

1

Одним из решений является дублирование ваших вершин. То есть, если в настоящее время у вас есть вершина V, связанная с тремя строками (в качестве примера), создайте три вершины V1, V2 и V3 с тем же местом, но с разными цветами, где каждая вершина имеет цвет соответствующей строки. Поэтому, если строка 1 красная, строка 2 синяя, а строка 3 - зеленая, тогда V1 будет красной, V2 синей и V3 зеленой.

+0

Это имеет смысл, это будет хорошо для небольшого количества вершин. Но я разбираю все эти 1000+ вершин из XML-файла (Бог знает, сколько строк связано с одной вершиной ...), создавая индексы, а затем соединяя их. Интересно, может ли это быть практическим решением здесь. Это, если ничего лучше не появится, я воспользуюсь вашим решением, спасибо. – D3athh