Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 如何在片段着色器GLSL中访问顶点索引_Opengl_Glsl_Fragment Shader_Indices - Fatal编程技术网

Opengl 如何在片段着色器GLSL中访问顶点索引

Opengl 如何在片段着色器GLSL中访问顶点索引,opengl,glsl,fragment-shader,indices,Opengl,Glsl,Fragment Shader,Indices,我正在用OpenGL绘制索引GL_线。我需要访问两个顶点的片段着色器中的索引。因此,我需要知道我的行包含的两个索引。我读过关于内置变量gl_VertexID的文章,它在这里应该没有什么帮助。由于我已经将索引存储在某个缓冲区中,所以我也尝试将它们作为属性传递。 因此,我的代码如下所示: glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER,vertexBuffer); glVertexAttribPointer(0,2,GL_FLOA

我正在用OpenGL绘制索引GL_线。我需要访问两个顶点的片段着色器中的索引。因此,我需要知道我的行包含的两个索引。我读过关于内置变量gl_VertexID的文章,它在这里应该没有什么帮助。由于我已经将索引存储在某个缓冲区中,所以我也尝试将它们作为属性传递。 因此,我的代码如下所示:

glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER,vertexBuffer);
glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,0,(void*)0);

glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER,indexBuffer);
glVertexAttribPointer(1,2,GL_UNSIGNED_INT,GL_FALSE,0,(void*)0);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,indexBuffer);
使用这个似乎是错误的方法,对吗? 此外,我使用索引通过图像加载存储原子地写入一些信息。令人遗憾的是,通过glGetTexImage获取此图像只会产生零。 因此,我的索引传递或图像写入/获取似乎是错误的


我很乐意在此提供帮助。

对于顶点着色器中具有整数类型的属性,您需要使用
glvertexattributeinter()
(注意附加的I)而不是
glvertexattributepointer()

因为每个顶点只有一个索引,所以第二个参数,即大小,应该是1。然后,调用将如下所示:

glVertexAttribIPointer(1, 1, GL_UNSIGNED_INT, 0, (void*)0);
您所做的似乎有些不寻常,但我想不出为什么将索引数组用作顶点属性是非法的


我相信
gl\u VertexID
只是由draw命令生成的顶点的顺序id,它与顶点索引不同。

将索引缓冲区内容也用作属性数据是行不通的,因为现在索引也将成为索引数组的索引,所以你得到了完全错误的索引作为每个顶点的属性。