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

Слушай, я прохожу базовый урок по вики libgdx, и меня смущает строка

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

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

Ответы [ 2 ]

3 голосов
/ 28 апреля 2011

класс 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;
}

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

НТН, Mario

0 голосов
/ 28 апреля 2011

См. Документ для VertexAttribute

...