Opengl es 如何获取在OpenGL ES中调用片段着色器的顶点?

Opengl es 如何获取在OpenGL ES中调用片段着色器的顶点?,opengl-es,Opengl Es,在OpenGL ES中,如何获取从片段着色器调用片段着色器的顶点 它出现的片段着色器没有与其对应顶点的链接?片段着色器确实没有与顶点着色器的链接,并且顶点着色器是逐顶点的,没有创建该几何体片段的集合的概念。因此,您无法获得最终导致片段着色器实例的顶点 你想达到什么样的效果?无论您想从顶点计算什么,通常都可以通过加载适当的变量来实现-例如,如果您将每个顶点的3d位置加载到适当的变量,则每个片段都会固有地知道其位置。在片段着色器中没有直接访问顶点的方法,而顶点着色器只处理1顶点,并且没有整个基本体的

在OpenGL ES中,如何获取从片段着色器调用片段着色器的顶点


它出现的片段着色器没有与其对应顶点的链接?

片段着色器确实没有与顶点着色器的链接,并且顶点着色器是逐顶点的,没有创建该几何体片段的集合的概念。因此,您无法获得最终导致片段着色器实例的顶点


你想达到什么样的效果?无论您想从顶点计算什么,通常都可以通过加载适当的变量来实现-例如,如果您将每个顶点的3d位置加载到适当的变量,则每个片段都会固有地知道其位置。

在片段着色器中没有直接访问顶点的方法,而顶点着色器只处理1顶点,并且没有整个基本体的概念。片段着色器仅处理片段

您可以输出有关特定顶点的信息,并将其插值到片段着色器中,就像您可以在三角形上混合颜色一样,或者使用纹理坐标。通常情况下,无论如何,您都需要在片段着色器中进行混合,因此您最好在顶点着色器中自动进行混合。您可以获取碎片的三维空间坐标(但只能获取碎片,而不能获取周围的顶点)

也就是说,您可以将任意信息附加到着色器。例如,除了位置、法线和texcoords之外,您还可以有一个额外属性,该属性包含有关要在特定顶点中访问的每个顶点的信息。If可以是3组x、y、z坐标,如果这是您想要的信息,并且是一个数字,指示您处理的基本体中的哪个顶点编号(即三角形中的第一个、第二个或第三个顶点)和/或整个网格中的序列号。或者它可能只是一个索引号,如果这是你想要的。但是,额外属性将占用更多内存,因为必须为基本体中的每个顶点复制顶点数据,以确保碎片着色器具有来自其所有3个顶点的相同数据

例如,每个顶点的以下属性(对于三角形基本体):

如果你需要法线或纹理坐标,你也需要复制它

还考虑你在片段着色器中的顶点信息所做的事情。与其发送所有顶点的数据,不如在片段着色器中预先计算要计算的答案,并将答案作为属性附加,并将其从顶点着色器插值到片段着色器

另一种方法是将所有顶点数据转储到统一的文件中并进行查找。您可能仍然需要某种索引信息作为顶点属性附加,这样它就知道应该查找什么索引。还要记住,查找速度会很慢,因为它发生在每个像素上,而且很可能会发生碰撞,因为每个顶点都会查看有关其周围顶点的信息

在较新版本的OpenGL(3.x+)中,几何体和细分着色器可以访问此类信息,并可以将其输出到着色器管道中的下一个对象


有了这一点,就有助于准确地了解您试图完成的任务,因为它提供了需要将哪些顶点数据传递给片段着色器的想法。也可能有一种更简单的方法来做你想做的事情,而不必访问片段着色器中的数据。

不是OP,但我感兴趣的是,能够获得连接的顶点,用于计算给定顶点是凹的还是凸的W.R.T.给定向量。也许在这里发布这样的帖子是不合适的,不过我应该提出一个新问题。
v1, n1, uv1, v1, v2, v3, 0
v2, n2, uv2, v1, v2, v3, 1
v3, n3, uv3, v1, v2, v3, 2
v4, n4, uv4, v4, v5, v6, 0
v5, n5, uv5, v4, v5, v6, 1
v6, n6, uv6, v4, v5, v6, 2