使用LibiGL的GLSL顶点属性

时间:2018-05-14 20:04:23

标签: c++ glsl

我正在使用libiGL(c ++)在网格上做一些计算量很大的东西,我正在尝试将这些计算转移到GPU上。首先,我试图让一段基本代码运行,但属性值似乎没有传递给着色器。

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/657http://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

0 个答案:

没有答案