我正在使用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/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