Как нарисовать треугольник с собственной текстурой на каждом углу? - PullRequest
3 голосов
/ 08 августа 2011

По сути, я хочу дать 3 текстуры для каждого угла треугольника и интерполировать из одной текстуры в другую, точно так же, как цвета будут интерполированы с углами glColor ().

Редактировать: Поскольку это не представляется возможным с помощью объединителей текстур, я готов сделать это с помощью шейдеров.

Это код фрагмента шейдера, который у меня сейчас есть:

vec4 c = gl_Color;
gl_FragColor = texture2D(Texture0, TexCoord0)*c.r+texture2D(Texture1, TexCoord1)*c.g+texture2D(Texture2, TexCoord2)*c.b;

Я использую glColor ();протолкнуть цвета (1,0,0), (0,1,0), (0,0,1) в углы каждого треугольника, а затем я читаю цвет, чтобы увидеть, какую текстуру мне нужно смешать соответственно.

Теперь проблема в том, что я больше не могу использовать цвета на своих вершинах, поэтому я спрашиваю, каков наилучший подход для объяснения моего фрагментного шейдера, как смешивать текстуры + возможность использовать glColor () на каждомугол треугольника, чтобы применить какую-либо раскраску?

Edit2: Мне удалось заставить его работать, отправив 3D-текстовую координату, которая сообщает коэффициенты смешивания, но разве это лучший подход?Я хотел бы услышать больше идей по этому поводу.

1 Ответ

1 голос
/ 08 августа 2011

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

Однако, возможно, это возможно с двумя текстурами, используя альфа-смешение (выбор альфа-значения из цвета вершины) на второй текстуре. но я не уверен.

...