Использование атрибутов вершин для GLSL с LibiGL - PullRequest
0 голосов
/ 14 мая 2018

Я делаю некоторые сложные вычислительные операции с сетками с помощью libiGL (c ++) и пытаюсь перенести эти вычисления в графический процессор. Для начала я пытаюсь запустить базовый фрагмент кода, но значения атрибутов, похоже, не передаются шейдерам.

int m = V.rows();//vertices
P.resize(m);
for (int i = 0; i < m; i++)
{
    P(i) = i / m;
}

std::map<std::string, GLuint> attrib;

attrib.insert({ "concentration", 0 });
igl::opengl::create_shader_program(
    mesh_vertex_shader_string,
    mesh_fragment_shader_string,
    attrib,
    v.data().meshgl.shader_mesh);
GLuint prog_id = v.data().meshgl.shader_mesh;
const int num_vert = m;
GLuint vao[37 * 37];//37*37 vertices
glGenVertexArrays(m, vao);
GLuint buffer;
for (int i = 0; i < m; i++)
{
    glGenBuffers(1, &buffer);
    glBindVertexArray(vao[i]);
    glBindBuffer(GL_ARRAY_BUFFER, buffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(float), P.data(), GL_STATIC_DRAW);
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 1, GL_FLOAT, GL_FALSE, 0, (void*)(i*sizeof(float)));
}

Красный цвет каждой вершины должен зависеть от ее порядка (от 0 красного до 1 красного), но вместо этого сетка окрашивается без красного вообще. Я основываюсь на этом коде: https://github.com/libigl/libigl/issues/657 и http://www.lighthouse3d.com/cg-topics/code-samples/opengl-3-3-glsl-1-5-sample/.

Я изменил строки шейдера соответственно, добавив следующие строки:

Вершинный шейдер

in float concentration;
out float c;
c = concentration;

где последняя строка находится в main ();

Фрагмент шейдера

in float c;
outColor.x = c;

где последняя строка находится в main ().

Что я делаю не так? Изменить: OpenGL версия используется на самом деле 3,2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...