- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在this document (Apple 关于 OpenGL 的 iOS 文档),Apple 建议在 iOS 上的 OpenGL ES 中对(索引)三角形使用三角形带:
For best performance, your models should be submitted as a single unindexed triangle strip using glDrawArrays with as few duplicated vertices as possible.
但是,Imagination Technologies(iOS 设备中使用的图形芯片的创造者)在 this document 中提出了相反的建议(POWERVR 3D 应用程序开发建议)。他们在第 11 页上特别写道:
Using an indexed triangle list can be much more efficient than using strips.
我的问题:谁是对的?还是我误解了这两个文件?
最佳答案
TBH 我相信 powerVR。 PowerVR 支持转换后缓存。这个缓存意味着在相对接近它们上次调用的位置重复的索引可以完全避免重新转换(它只是将已经转换的值从缓存中拉出)。因此,对于 0、1、2、3、4、5、6、7 的 strip ,它不会提供任何奖励,但实际上, strip 通常并不那么简单。那里会有一些顶点索引重用。这种重用可以完全避免转换。如果 strip 经过优化以牢记这一点(请参阅 NVTriStrip library !),那么您可以获得显着提高的性能,因为许多转换将不会执行。
此外,这样做的另一个好处是三角形列表不再是性能障碍,因为您要转换的顶点中有 2 个在缓存中,因此没有性能影响(除了每个三角形上传 6 个字节之外)而不是 2(ish),这在宏伟的计划中并不多)。此外,因为您不需要执行 strip “重新启动”(通过重复最后一个三角形的最后一个索引和下一个三角形的第一个索引来执行重新启动。即 0,1,2,2,3,3, 4,5,6) 一些复杂的网格可能比 strip 更快。除此之外,在未索引的 strip 中,每个重复的顶点都必须完整地向下发送,需要发送的数据量可能比索引列表中需要发送的数据量高很多(因为每个顶点只发送一次,重复在更紧凑的索引中完成)。
当然,MBX (iPhone 3G) 不支持转换后缓存,这很可能是苹果建议的来源。然而,SGX(iPhone 3GS 及更高版本)确实如此,这实际上取决于您希望定位的硬件。如果您可以定位 3GS 及更高版本,则使用索引,否则不要。当然,开箱即用地支持这两种方法将在两个平台上提供最佳性能。
当然,最好的方法是尝试两种方法(这样做真的不会花很长时间),看看哪种方法在硬件上表现更好!!
关于iphone - iOS 上的 GL_TRIANGLES 或 GL_TRIANGLE_STRIP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4447749/
如果我有 4 个按此顺序渲染的顶点: 2-3 |\| 0-1 使用 GL_TRIANGLE_STRIP然后我启用背面剔除,正面定义为逆时针,那么左下角的三角形会面向我而另一个不是吗?如果是这样,渲染正
我是 open gl 的 biggener。首先,我只是尝试使用 GL_TRIANGLE_STRIP 绘制一个具有三个顶点的简单三角形。为什么 open gl 在末尾的原点添加额外的点?这是代码片段:
我需要一个只能由 GL_TRIANGLE_STRIP 完成的多边形示例和另一个只能由 GL_TRIANGLE_FAN 完成的多边形示例。 最佳答案 当知道三角条和三角扇之间的区别时,形状就会很容易制作
是否可以仅使用一个 GL_TRIANGLE_STRIP 绘制整个立方体? 显然,我在这里关心的只是立方体组合,它也可能被拉伸(stretch)成任何类型的盒子或类似的对象。 最佳答案 摘自论文Opti
我正在尝试使用 LWJGL 从包含所有字符的纹理图集中在 OpenGL 中绘制一个字符串。 现在我为每个字符添加三个顶点到网格,这将被渲染 GL11.glDrawArrays(GL11.GL_TRIA
我正在尝试使用 GL_TRIANGLE_STRIP 模式渲染和纹理立方体。 多维数据集的基本信息在以下数组中。它被正确加载,形状还可以。 float vertexData[24] = { //
我有这个方法来准备 posCoords 数组中的坐标。大约 30% 的时间它工作正常,然后其他 70% 的前几个三角形在网格中被弄乱了。整个网格使用 GL_TRIANGLE_STRIP 绘制。我正在拔
我正在尝试编写一种方法,使用 GL_TRIANGLE_STRIP 绘制从起始角到结束角的弧。我编写了以下代码,但存在以下问题: 我似乎无法找到合适的角度。它们似乎偏离了应有的位置(不是 90/45/1
我有一些 GL_TRIANGLE_STRIP 基元,它们的绘制方式如下: glNewList(heightmapDisplayList, GL_COMPILE); for (int z = 0; z
我正在努力让 opengl 三角形带显示为线框。我的显示算法看起来像这样: // want to display by strip here to allow for quick processing
关于索引三角形或三角形 strip 之间的渲染性能已经引起了相当大的讨论。但我相信有一个案例没有得到足够的考虑。 索引三角形在 OpenGl 中是这样渲染的: glDrawElements(GL_TR
我有来自 *.obj 文件的数据。 我知道如何使用 GL_TRIANGLES 绘图。我如何为 GL_TRIANGLE_STRIP 转换数据? 像 glDrawArrays(GL_TRIANGLE_ST
我正在使用 GL_TRIANGLE_STRIPS 和 LWJGL OpenGL Java 绑定(bind)实现高度图。当我使用“GL_BEGIN/GL_END”绘制“直接”时,它工作得很好,但是当高度
出于学习目的,我决定使用 3 种方法绘制球体 显示列表 Voa Vbo (GL_TRIANGLE_STRIPE) Vao Vbo 和 Ibo (GL_TRIANGLES) 我听说使用 ibo 可以使程
我正在尝试使用对 glDrawElements() 的单个调用来呈现一组线条。每条线都是一个四边形,我在它们之间使用退化三角形来分隔它们。 渲染时,使用索引 0、n-1 和 n-2 处的顶点绘制了一个
这可能吗?如果我有 2 个四边形的 8 个顶点,位置不同(基于四边形),是否可以通过一次调用 glDrawElement 来绘制这个四边形中的两个? 最佳答案 您可以使用退化三角形(面积为 0 的三角
我正在使用 C++ 开发一个基于 sprite 的简单 2D 游戏,该游戏使用 OpenGL 进行硬件加速渲染,并使用 SDL 进行窗口管理和用户输入处理。由于它是一款 2D 游戏,我只需要绘制四边形
尝试绘制一条三角形,如下所示: 完成了 objc.io tutorial ,他们使用两个三角形绘制四边形。三角形断开连接并单独绘制,这意味着我需要指定 6 个顶点而不是 4 个。 // Interle
在this document (Apple 关于 OpenGL 的 iOS 文档),Apple 建议在 iOS 上的 OpenGL ES 中对(索引)三角形使用三角形带: For best perfo
我目前正在渲染一条很长的路径: glDrawArrays(GL_TRIANGLE_STRIP, 0, 2000); 我将控制点传递给这样的 vbo: for (unsigned int i = 0;
我是一名优秀的程序员,十分优秀!