2014-11-02 3 views
1

Так что я знаю, как обеспечить ввод в шейдер как массив:OpenGL вход шейдера

GLuint vertexbuffer; 
glGenBuffers(1, &vertexbuffer); 
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer); 
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW); 
//inside loop, provide the shader a layout location 
glEnableVertexAttribArray(0); 
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer); 
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0); 

Как бы обеспечить поплавок в качестве вклада? Я пробовал Googling повсюду, но не так много хороших ресурсов, документирующих шейдеры (для новичков, по крайней мере). Кроме того, как я могу использовать этот ввод? Это просто нравится:

layout(location = 0) in vec3 vertPosition //for my position 
layout(location = 1/*or whatever i use*/) in float rotation 
//rest of the code.... 

ответ

2

просто набор 1 в качестве второго параметра:

glVertexAttribPointer(0, 1, GL_FLOAT, GL_FALSE, 0, (void*)0); 

Это означает, сколько элементов OPENGL нужно передать в шейдер (до 4-х).

Чтобы передать несколько атрибутов, которые могут быть в соответствии с первым параметром для атрибута в затенении:

glVertexAttribPointer(1, 1, GL_FLOAT, GL_FALSE, 0, (void*)0); 

если вы хотите чередовать данные так, буфер выглядит следующим образом: [x, y, z, rotation, x, y, z, rotation,...], то вам нужно будет сделать следующие вызовы:

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float)*4, (void*)0); 
glVertexAttribPointer(1, 1, GL_FLOAT, GL_FALSE, sizeof(float)*4, (void*)sizeof(float)*3); 

вики имеет хорошее описание, о vertex specification

+0

Спасибо за ваш ответ. Как я могу использовать несколько входов (из нескольких мест) в моем коде? (вторая часть вопроса, извините, если она не была очевидна :) –

+0

Это первый параметр, есть разные способы передать его шейдеру, один из популярных способов - чередование данных, я отредактирую ответ. –

+0

Как использовать переменную вращения в моем glsl? это будет 'layout (location = 0) в vec3 position'' layout (location = 1) в vec3 rotation' –

Смежные вопросы