OpenGL -关联纹理坐标数组与索引数组,而不是顶点数组



当我们使用索引数组来渲染纹理多边形时,我们可以提供一个顶点数组和一个纹理坐标数组。然后索引数组中的每个索引指向顶点数组中某个位置的顶点和纹理数组中相同位置的对应纹理坐标。现在,例如,如果几个独立的原语(如QUADS)共享一个顶点,但需要不同的纹理坐标,我们必须在数组中复制该顶点,因为我们有不同的纹理坐标。因此,如果纹理坐标数组可以与索引数组中的位置相关联,将会方便得多。这样就没有必要将一个特定的顶点与不同的纹理坐标相关联。

这可能吗?如果是,使用什么语法?

No。不是用简单的方法。

你可以使用缓冲纹理和着色逻辑来实现它。但是没有简单的API可以使属性按您想要的方式索引。所有属性都从相同的索引中采样(除了使用实例化的数组除数,但这也没有帮助)。

注意,这样做将是一个内存/性能的权衡。使用缓冲纹理访问顶点数据将占用更少的内存,但它将显著更慢,比仅仅使用常规属性更受限制。你不能访问规范化的顶点属性,所以压缩顶点数据需要显式的着色器逻辑。总的来说,访问缓冲区纹理更慢。

您应该只在内存非常宝贵的情况下这样做

现在,如果几个单独的原语(如QUADS)共享一个顶点,但需要不同的纹理坐标,我们必须在数组中复制该顶点,因为我们有不同的纹理坐标。

如果纹理坐标在共享顶点位置的原语上不同,那么整体上的顶点不共享!顶点是由

组成的单个向量
  • 正常
  • 纹理坐标(s)
  • 其他属性

你改变其中任何一个,你最终会得到一个不同的顶点。因为顶点共享不是你想的那样

你可以复制顶点,使1有1个纹理线&对方拥有对方。唯一的缺点是如果你需要改变曲面——你可以移动一个顶点,但不能移动两个顶点。当然,"命令式"也有可能做到这一点——即当你只是运行一个循环&使用不同的纹理线,但这不会是VBO & &;慢得多

最新更新