Что такое целочисленный параметр для конструктора VertexAttribute в libgdx? - PullRequest
1 голос
/ 26 октября 2011

В libgdx Урок Mesh, Color, Texture Сетка, представляющая простой треугольник, с информацией о цвете и текстуре для каждой вершины, создается:

mesh = new Mesh(true, 3, 3, 
                new VertexAttribute(Usage.Position, 3, "a_position"),
                new VertexAttribute(Usage.ColorPacked, 4, "a_color"),
                new VertexAttribute(Usage.TextureCoordinates, 2, "a_texCoords"));

В конструкторах VertexAttribute что такое целочисленный аргумент? В документе сказано, что это «количество компонентов», необходимое для кодирования информации.

Я прочитал это как количество записей в массиве 'vertex' (массив с плавающей точкой), который использует каждая запись. Итак, для первого VertexAttribute это 3, что имеет смысл (по одному для x, для y и для z). Тем не менее, атрибут ColorPacked имеет 4, но, поскольку данные о цвете закодированы в одно число с плавающей запятой, не должно ли это быть 1? Наконец, добавляются координаты текстуры (получим 2, что соответствует двум координатам float u, v, необходимым для каждой вершины).

Javadoc для конструктора VertexAttribute говорит, что этот параметр:

numComponents - the number of components of this attribute, must be between 1 and 4.

Обратите внимание на старый вопрос, Для чего 3-й аргумент в VertexAttribute (), используемый в libgdx? , охватывает 3-й аргумент этого конструктора, поэтому нам просто нужен еще один вопрос SO, чтобы охватить первый. :)

Ответы [ 2 ]

5 голосов
/ 27 октября 2011

Целочисленный параметр numComponents для конструктора VertextAttribute является аргументом «size» для gl * Pointer

  • Usage.Position -> glVertexPointer
  • Usage.Color -> glColorPointer
  • Usage.ColorPacked -> glColorPointer
  • Usage.TextureCoordinates -> glTexCoordPointer
  • Usage.Normal -> glNormalPointer

Использование атрибута ColorPacked изменяет ",введите "аргумент вызова glColorPointer из GL10.GL_FLOAT в GL11.GL_UNSIGNED_BYTE.Цвету требуется 4 байта, поэтому вам нужно установить аргумент "numComponents" в 4.

Источник: VertexArray.bind () и glColorPointer

0 голосов
/ 10 ноября 2013

Это количество компонентов в вашем шейдере, а не вычисления на стороне процессора. Когда вы передаете вектор положения в шейдер, 4 говорит, что ваш вектор закодирован в vec4 в вашем шейдере.

То же самое с цветами: вы можете передать упакованное одно значение с плавающей точкой в ​​шейдер, но вы будете работать с векторным цветом vec4 в вашем шейдере.

...