OpenGL: один атрибут вершины для нескольких вершин?

У меня есть вершинный шейдер, который принимает следующие атрибуты:

a_posCoord: положение вершиныa_texCoord: координата текстуры (передается фрагментному шейдеру)a_alpha: коэффициент прозрачности (передается фрагментному шейдеру)

Объекты ям рендеринг всерекламные щиты" (пара прямоугольных треугольников, чтобы сделать прямоугольник) .I '

м, используя один вызовglDrawArrays оказыватьмного рекламные щиты, каждый из которых может иметь уникальное альфа-значение. Один рекламный щит имеет 6 вершин. Вот'Несколько псевдокодов, чтобы проиллюстрировать, как организовать буфер атрибутов вершины для одного билборда:

vertexAttributes = [

  px1,py1,pz1, // vertex 1: a_posCoord
  tx1,ty1,     // vertex 1: a_texCoord
  alpha,       // vertex 1: a_alpha

  px2,py2,pz2, // vertex 2: a_posCoord
  tx2,ty2,     // vertex 2: a_texCoord
  alpha,       // vertex 2: a_alpha

  px3,py3,pz3, // vertex 3: a_posCoord
  tx3,ty3,     // vertex 3: a_texCoord
  alpha,       // vertex 3: a_alpha

  px4,py4,pz4, // vertex 4: a_posCoord
  tx4,ty4,     // vertex 4: a_texCoord
  alpha,       // vertex 4: a_alpha

  px5,py5,pz5, // vertex 5: a_posCoord
  tx5,ty5,     // vertex 5: a_texCoord
  alpha,       // vertex 5: a_alpha

  px6,py6,pz6, // vertex 6: a_posCoord
  tx6,ty6,     // vertex 6: a_texCoord
  alpha        // vertex 6: a_alpha

  // ... Many more billboards not shown ...
];

Обратите внимание, как то же самоеalpha значение повторяется 6 раз, по одному разу для каждой вершины.

Есть ли способ, которым я могу указать атрибут для всех 6 вершин, не повторяя его для каждой отдельной вершины?

Вот'Как я хочу, чтобы мой буфер вершинных атрибутов выглядел в интересах уменьшения размера буфера:

vertexAttributes = [
  px1,py1,pz1, // vertex 1: a_posCoord
  tx1,ty1,     // vertex 1: a_texCoord

  px2,py2,pz2, // vertex 2: a_posCoord
  tx2,ty2,     // vertex 2: a_texCoord

  px3,py3,pz3, // vertex 3: a_posCoord
  tx3,ty3,     // vertex 3: a_texCoord

  px4,py4,pz4, // vertex 4: a_posCoord
  tx4,ty4,     // vertex 4: a_texCoord

  px5,py5,pz5, // vertex 5: a_posCoord
  tx5,ty5,     // vertex 5: a_texCoord

  px6,py6,pz6, // vertex 6: a_posCoord
  tx6,ty6,     // vertex 6: a_texCoord

  alpha        // vertex 1-6: a_alpha

  // ... Many more billboards not shown ...
];

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

Это более конкретно вопрос WebGL, но яМне интересно узнать об OpenGL в общем смысле.

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

Ответы на вопрос(5)

Ваш ответ на вопрос