gpt4 book ai didi

opengl - VBO 中的指数和法线有意义吗

转载 作者:行者123 更新时间:2023-12-02 11:48:20 37 4
gpt4 key购买 nike

我正在编写一个在 OpenGL 中渲染一些网格的插件。

我在一个 VBO 中有一个 Vertices 数组,在另一个 VBO 中有一个 Indices 数组。我现在想存储法线。由于多个面之间共享的顶点具有不同的法线,因此似乎我必须多次复制顶点,因此失去了索引的使用。

例如,要存储具有顶点和索引的立方体,我需要 8 个顶点和 24 个索引(每个面 4 个)。但是,如果我想存储法线,是否需要存储 24 个顶点(8 个顶点各有 3 个面)、24 个索引(全部连续)和 24 个法线?

我是否认为它是正确的,因此索引变得无用,或者有没有办法不重复顶点并且每个顶点都有多个法线?

最佳答案

没那么容易。索引有一个很棒的功能,称为原始重启索引。它可以让你描述你的形状,例如GL_TRIANGLE_STRIP,因此对同一网格使用更少的索引。此外,模型的平滑部分共享一些顶点,并且通常您拥有的共享数据比重复的顶点更多,因此最终这是一个净赢。

现在考虑您的多维数据集示例。令 I 为索引类型的大小,V 为顶点数据的大小。让我们采用 I = sizeof(uint) = 4V = 3*sizeof(float) + 4*sizeof(byte) = 16 (三个 float 表示位置,一个低位表示-精度正常)。

glDrawArraysGL_TRIANGLES 每个面需要两个三角形,即 2*3*6*V = 512 字节。

glDrawElementsGL_TRIANGLE_STRIP 每个面需要四个索引加上一个重新启动索引,即 5*6*I = 120 字节,以及四个每个面的顶点数,即 4*6*V = 384 字节。总共 504 字节。

正如您所看到的,即使使用该多维数据集示例和一些保守的类型选择,索引方法仍然在内存占用方面获胜。实际上,您可以使用索引,并且可能需要更高精度的法线,这将更加偏向于索引方法。

关于opengl - VBO 中的指数和法线有意义吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40981663/

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