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 带元素缓冲区的逐顶点值_Opengl - Fatal编程技术网

Opengl 带元素缓冲区的逐顶点值

Opengl 带元素缓冲区的逐顶点值,opengl,Opengl,假设我有一个顶点着色器。它的输入部分如下所示(简化): 我想要的是前4个输入来自元素缓冲区,而最后一个来自常规缓冲区。例如,在本例中,每个元素都有两个uv对,我希望能够为某些面提供不同的纹理进行采样 这能做到吗?另一个选项是为着色器提供包含texNum值的大量统一整数,并使用gl_VertexID访问这些整数。但是,这似乎是一种非常丑陋的方式 我使用OpenGL 3.3(虽然很高兴使用扩展),而C++(元素缓冲区)只在原始程序集中使用,以便找出顶点的顺序。在本例中,所有内容都必须是“顶点缓冲区”

假设我有一个顶点着色器。它的输入部分如下所示(简化):

我想要的是前4个输入来自元素缓冲区,而最后一个来自常规缓冲区。例如,在本例中,每个元素都有两个uv对,我希望能够为某些面提供不同的纹理进行采样

这能做到吗?另一个选项是为着色器提供包含texNum值的大量统一整数,并使用gl_VertexID访问这些整数。但是,这似乎是一种非常丑陋的方式


我使用OpenGL 3.3(虽然很高兴使用扩展),而C++(

元素缓冲区)只在原始程序集中使用,以便找出顶点的顺序。在本例中,所有内容都必须是“顶点缓冲区”,因为它们都是顶点属性。没有任何东西阻止您创建一组整数顶点属性,您只需要使用适当的命令(例如,
glvertexattributepointeri(…)
)设置顶点指针。我不确定我是否知道您的意思。当我画这个的时候,我做glBindVertexArray(vao);glBindBuffer(GL_元素数组缓冲区,ibo);GLD元素(GL_三角形、iCount、GL_无符号整数、0);我将GLVertexAttributePointer调用放在何处?无论您最初在何处设置顶点数组对象(
vao
),但它们最终将以与所有其他输入相同的方式建立索引。我想要的是每次使用的值。因此,数组的大小将与索引缓冲区的大小相同。然后需要在几何体/片段着色器中使用
gl\u PrimitiveID
。但是,如果希望每个面具有不同的纹理(即纹理图像单元的最大数量),那么在GL3.3中,您必须将自己的每个过程限制为不超过48个三角形。
layout(location = 0) in vec3 V_pos;
layout(location = 1) in vec3 V_norm;
layout(location = 2) in vec2 V_texcoord1;
layout(location = 3) in vec2 V_texcoord2;
layout(location = 4) in int V_texNum;