我需要一种方法将数组传递给Vertex Shader,其中包含每个顶点的多个值。 我有这个:
所以,结构如下:
在这个例子中,最大邻域是4,所以我用0向量(0.0,0.0,0.0)填充所有正常数据,用于那些没有4个邻居的人。在一般情况下,每个顶点我有超过4个邻居。在当前模型中,我有一些顶点有14个邻居,因此每个顶点需要14个法线或42个浮点数。)
在VS的标题中,我有:
layout (location = 0) in vec3 in_Position;
layout (location = 1) in vec3 in_Normal;
layout (location = 2) in XXX in_NeighborsNormals
但是我不知道在XXX中使用什么来向着色器说数据不是vec3,vec4,mat4等,而是一个(编译时已知大小)vec3的数组。
编辑: 也许使用VAO不是通往NeighborsNormals的方式。我愿意接受建议,但我需要知道当前顶点的特定索引才能访问正确的值。
这样做的目的是计算顶点周围区域的曲率,以便使用曲面细分着色器进行细分。特别是,我希望复制这项工作:http://perso.telecom-paristech.fr/~boubek/papers/VDTess/
我正在使用C ++和OpenGL 4.0,但我可以使用OpenGL 4.3。我来自OpenGL 2.0的中级知识,但GLSL(旧的或现代的)对我来说是新的(大约几个月)。
提前致谢。
答案 0 :(得分:2)
我知道你有一些关于你想要在你的顶点着色器中处理它的对象的数据。您可以通过将数组写入纹理来将数组传输到顶点着色器。之后,在顶点着色器中导入它并使用它。
在Opengl Part中:
GLuint myarray // Load your texture to this variable
glEnable(GL_TEXTURE_2D);
glUniform1i(glGetUniformLocation(YOURSHADERID, "MYARRAY"), 0);
glBindTexture(GL_TEXTURE_2D, myarray); //you can change the first parameter depends what type of texture you prefer.
顶点着色器中的:
uniform sampler2D MYARRAY; // you can use sampler1D also if you upload a 1D texture
之后,您可以从MYARRAY访问您的数据。您可以从您的数据中读取数据,并将其形成为vec3,vec4,无论您想要什么。