gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:35:22 32 4
gpt4 key购买 nike

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

它出现的片段着色器没有链接到它的相应顶点?

最佳答案

在片段着色器中没有直接访问顶点的方法,并且顶点着色器一次只处理 1 个顶点并且没有整个图元的概念。片段着色器只处理片段。

您可以输出有关特定顶点的信息,并将其插入到片段着色器中,例如如何在三角形上混合颜色或进行纹理坐标。无论如何,您通常需要在片段着色器中进行混合,因此您最好在顶点着色器中自动完成。您可以获得片段的 3d 空间坐标(但只有片段,而不是周围的顶点)。

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

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

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

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

还要考虑您实际上对片段着色器中的顶点信息做了什么。不是发送所有顶点的数据,您是否可以预先计算您将在片段着色器中计算的答案,而是将答案附加为属性并将其从顶点着色器插入到片段着色器。

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

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

话虽如此,这将有助于准确了解您要完成的任务,因为它可以让您了解需要将哪些顶点数据传递给片段着色器。也可能有一种更简单的方法来做你想做的事,而无需访问片段着色器中的数据。

关于opengl-es - 如何获取在 OpenGL ES 中调用片段着色器的顶点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9111672/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com