c++ - 将任意数量值的顶点数组传递给 GLSL 顶点着色器

标签 c++ opengl glsl vertex-buffer vertex-array-object

我需要一种方法将数组传递给顶点着色器,该数组包含每个顶点的多个值。 我有这个:

  • 一组 3d 点
  • 每个点的一组 3d 法线
  • 一组面(全是三角形)
  • 每个顶点的所有邻域法线的数组。如果顶点 i 有 4 个邻居,则此数组有 4 个顶点的 3d 法线(4 个邻居中每一个的法线)。为简单起见,我创建了这个数组,好像所有顶点都具有相同数量的邻居(模型中的最大值,在下一个示例中为 4)。

所以,结构如下:

  • 点数组 = v0 v1 v2 v3 v4 ...
  • 法线数组 = n0 n1 n2 n3 n4 ...
  • 人脸数组 = [0 1 2] [0 3 1] [0 4 3] ...
  • 邻域法线数组 = [n1 n2 n3 n4] [n0 n2 n3 0] [n0 n1 0 0] [n0 n1 n4 0] [n0 n4 0 0] [n0 n3 0 0] ...<

在示例中,最大邻域为 4,因此对于没有 4 个邻域的那些,我用 0 vector (0.0, 0.0, 0.0) 填充所有法线数据。在一般情况下,我每个顶点有 4 个以上的邻居。在当前模型中,我有一些顶点有 14 个邻居,因此每个顶点需要 14 个法线或 42 个 float )。

在 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 的方式。我乐于接受建议,但我需要知道当前顶点的特定索引才能访问正确的值。


这样做的目的是计算顶点周围区域的曲率,以便使用 segmentation 着色器进行 segmentation 。特别是,我希望复制这项工作:http://perso.telecom-paristech.fr/~boubek/papers/VDTess/

我使用的是 C++ 和 OpenGL 4.0,但我可以升级到 OpenGL 4.3。我来自 OpenGL 2.0 的中级知识,但 GLSL(旧的或现代的)对我来说是新的(大约几个月)。

提前致谢。

最佳答案

我知道你有一些关于你的对象的数据,你想在你的顶点着色器中处理它。您可以通过将数组写入纹理来将数组传输到顶点着色器。之后将其导入您的顶点着色器并使用它。

在Opengl部分:

    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 任何你想要的。

关于c++ - 将任意数量值的顶点数组传递给 GLSL 顶点着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19736764/

相关文章:

swift - macOS 上的 OpenGL VSync/NSTimer 问题

c++ - 这个 Qt 样板构造函数为什么不是递归的?

c++ - OpenGL GLut 编译问题

java - 相机在 Y 轴上的移动

opengl - opengl 如何决定使用哪个 mip 级别?

c++ - OpenGL 投影/矩阵混淆

OpenGL - 添加曲面分割控制着色器会产生黑屏

c++ - 二进制-十进制负位集

c++ - borland builder c++ oracle问题

c++ - 模板外部链接?谁能解释一下?