当前位置: 首页 > 知识库问答 >
问题:

在VBO中使用索引和法线有意义吗

娄德运
2023-03-14

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

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

例如,要存储包含顶点和索引的立方体,我需要8个顶点和24个索引(每个面4个)。但是,如果要存储法线,是否需要存储24个顶点(8个每个面有3个)、24个索引(所有顺序)和24个法线?

我看得对吗,因此索引变得无用,或者有没有办法不复制顶点,并且每个顶点都有多个法线?

共有2个答案

白阳煦
2023-03-14

您只需要复制锐边顶点,但网格通常有许多不需要复制的其他顶点(如曲率曲面)。

因此,指数不会失去其作用。8顶点立方体只是一个错误的例子。。。。试着制作一个具有规则顶点覆盖率的立方体,比如说每个面的顶点数4x4=16,突然你只需要复制边顶点。。。边和内顶点之间的比率通常有利于内顶点

宋稳
2023-03-14

没那么容易。索引有一个很棒的特性,叫做原始重启索引。它允许你描述你的形状,例如GL_TRIANGLE_STRIP,从而使用更少的索引相同的网格。此外,你的模型的平滑部分共享一些顶点,通常你比重复的顶点有更多的共享数据,所以最终这是一个净胜利。

现在考虑您的立方体示例。让I是索引类型的大小,V是顶点数据的大小。让我们取I=sizeof(uint)=4V=3*sizeof(浮点数)4*sizeof(字节)=16(三个浮点数表示位置和低精度法线)。

glDrawArrays带有GL_三角形的每个面需要两个三角形,即2*3*6*V=512字节。

glDraweElements带有GL_TRIANGLE_STRIP的每个面需要四个索引加上一个重新启动索引,即5*6*I=120字节,每个面需要四个顶点,即4*6*V=384字节。总共是504字节。

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

 类似资料:
  • 索引的原理 目前为止,建立VBO时我们总是重复存储一些共享的顶点和边。 本课将介绍索引技术。借助索引,我们可以重复使用一个顶点。这是用索引缓冲区(index buffer)来实现的。 索引缓冲区存储的是整数;每个三角形有三个整数索引,用索引就可以在各种属性缓冲区(顶点坐标、颜色、UV坐标、其他UV坐标、法向缓冲区等)中找到顶点的信息。这有点像OBJ文件格式,但有一点相差甚远:索引缓冲区只有一个。这

  • 我目前正在构建一个体素引擎(比如Minecraft),我正在使用opengl。 发动机的当前设计如下所示: 班级地图- 类块- 类块- 我想做的是让每个块都有一个Draw()函数,它将绘制块中的所有块。我想我应该使用glGenBuffers()为每个块创建一个缓冲区。从我读的教程应该首先创建一个顶点数组与glVertex Array和比绑定它,比绑定一个缓冲区,它与目标GL_ARRAY_BUFFE

  • 问题内容: 我正在运行一个 PHP 脚本并继续收到如下错误: 注意:未定义变量:第 10 行 C:\wamp\www\mypath\index.php 中的 my_variable_name 注意:未定义索引:第 11 行的 my_index C:\wamp\www\mypath\index.php 第 10 行和第 11 行如下所示: 这些错误消息的含义是什么? 为什么它们会突然出现?我曾经使用

  • 我读了几篇文章,其中很好地解释了iOS中推送通知的工作方式。最近,我遇到了FCM > < li> 有意义吗? 什么是理想的情况?(由于我们使用的是FCM,我们是否应该根本不使用SNS,因为两者都是推送通知服务? - 我们不应该使用其中任何一个而不是这两个) 有人能用一个基本的图表来解释当添加FCM时图片将如何变化吗? 首先,我们对FCM提供的分析感兴趣。

  • 问题内容: 我已经做过这样的事情才能使用: 而且效果还不错。我只是不确定索引名称的目的-在这种情况下为“ blah”。我读过的东西说要用一个,但我不知道为什么。它似乎没有用在查询中,尽管如果导出架构可以看到它。 那么…索引名称的作用是什么?如果它有助于最终的行看起来像: 问题答案: 索引名称用于引用索引以用于将来的命令。像掉落指数。 http://dev.mysql.com/doc/refman/

  • 问题内容: 我正在运行PHP脚本,并继续收到如下错误: 注意:第10行上C:\ wamp \ www \ mypath \ index.php中的未定义变量:my_variable_name 注意:未定义的索引:第11行的my_index C:\ wamp \ www \ mypath \ index.php 第10和11行看起来像这样: 这些错误消息是什么意思? 为什么它们突然出现?我曾经使用此