Для чего в libgdx используется третий аргумент в VertexAttribute()?

Эй, я просматриваю базовый учебник на вики libgdx, и меня смущает строка

new VertexAttribute(Usage.Position, 3, "a_position"));

Для чего используется строка «a_position»?


person dotty    schedule 28.04.2011    source источник


Ответы (2)


класс Mesh работает с OpenGL ES 1.x и 2.0. В OpenGL ES 1.x вы используете фиксированный конвейер функций (без шейдеров). Здесь атрибут не имеет никакого применения. В OpenGL ES 2.0 вы пишете так называемые вершинные и фрагментные шейдеры. Если вы отправляете сетку (или, скорее, ее вершины) в свою пару вершинных/фрагментных шейдеров, ваши шейдеры должны иметь способ идентифицировать определенные атрибуты вершин, скажем, положение вершины, координаты текстуры, цвета и так далее.

Шейдеры написаны на языке под названием GLSL. Вершинный шейдер может выглядеть так:

attribute vec4 a_Position;
attribute vec4 a_Normal;
attribute vec2 a_TexCoord;

uniform mat4 u_projView;

varying vec2 v_texCoords;
varying vec4 v_color;

void main() {
    v_color = vec4(1, 0, 0, 1);
    v_texCoords = a_TexCoord;
    gl_Position = u_projView * a_Position;
}

Как видите, есть так называемые атрибуты, которые точно такие же, как VertexAttributes в libgdx. Таким образом, третий параметр — это имя VertexAttribute, используемого в шейдере (и, следовательно, ShaderProgram в libgdx, если вы используете его для удобства вместо прямых функций GLES 2.0).

хт, Марио

person badlogic    schedule 28.04.2011
comment
Итак, 3-й аргумент может быть ЛЮБЫМ словом. Что мы переходим к ShaderProgram? Я мог бы назвать это забавными сумками, и это сработало бы? - person dotty; 28.04.2011

См. документ для Атрибут вершины

person rajath    schedule 28.04.2011
comment
Там написано псевдоним для атрибута, используемого в ShaderProgram, что означает? - person dotty; 28.04.2011