交错顶点提交如何提高性能?

2024-04-24

我已经阅读并看到了其他问题,这些问题通常都指向将顶点位置和颜色等交错到一个数组中的建议,因为这可以最大限度地减少从 cpu 发送到 gpu 的数据。

我不清楚的是,即使使用交错数组,您仍然必须对位置和颜色指针进行单独的 GL 调用,OpenGL 是如何做到这一点的。如果两个指针使用相同的数组,只是设置为从该数组中的不同点开始,那么绘制调用是否不会复制该数组两次,因为它是两个不同指针的对象?


这主要与缓存有关。例如,假设我们有 4 个顶点和 4 个颜色。您可以通过这种方式提供信息(对不起,我不记得确切的函数名称)

glVertexPointer(..., vertex);
glColorPointer(..., colors);

它内部的作用是读取顶点[0],然后应用颜色[0],然后再次应用颜色[1] 的顶点[1]。如您所见,如果 vertex 的长度为 20 兆字节,则 vertex[0] 和 Colors[0] 至少可以彼此相距 20 兆字节。

现在,另一方面,如果您提供像 { vertex0, color0, vertex1, color1, etc.} 这样的结构,将会有大量缓存命中,因为 vertex0 和 color0 在一起,vertex1 和 color1 也在一起。

希望这有助于回答这个问题

编辑:第二次阅读时,我可能没有回答这个问题。您可能想知道 OpenGL 如何知道要从该结构中读取哪些值?就像我之前所说的,使用诸如 { vertex, color, vertex, color } 之类的结构,您告诉 OpenGL 顶点位于位置 0,偏移量为 2(因此下一个将位于位置 2,然后是 4,等等)和颜色从位置 1 开始,偏移量也为 2(因此位置 1,然后是位置 3,依此类推)。

另外:如果您想要更实际的示例,请查看此链接http://www.lwjgl.org/wiki/index.php?title=Using_Vertex_Buffer_Objects_(VBO) http://www.lwjgl.org/wiki/index.php?title=Using_Vertex_Buffer_Objects_(VBO)。您可以看到它如何只提供一次缓冲区,然后使用偏移量来有效渲染。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

交错顶点提交如何提高性能? 的相关文章

  • 帧缓冲区和在 opengl 中使用着色器

    我对帧缓冲区有点困惑 我想要做的是使用附加了多个纹理的帧缓冲区 填充每个纹理 然后使用着色器组合 混合 所有纹理以创建新的输出 听起来很容易 是的 我也是这么想的 但我不明白 如何将当前绑定的纹理传递给着色器 您需要的是将纹理放入特定的槽中
  • 如何从横滚、俯仰和偏航获取相机向上矢量?

    我需要从滚动角 俯仰角和偏航角 以度为单位 获取相机的向上矢量 以获得正确的外观 我已经尝试了几个小时不同的事情 但没有运气 这里的任何帮助将不胜感激 横滚 俯仰和偏航定义 3 轴旋转 从这些角度 您可以构建一个 3x3 变换矩阵来表达该旋
  • 在 Ubuntu 中与未编译的着色器链接

    我需要加载 glsl 来绘制一些东西 我的环境是Ubuntu 13 04 因此它不存在GLuint InitShader GLuint GLuint 这是我的对象创建 预链接步骤和链接的配置 不幸的是 它仍然出现错误 该错误与未编译的着色器
  • OpenGL:顶点越多,性能越慢

    我正在开发一个程序的一部分 其中给定 xyz 坐标集合 制作 3D 模型 我已经完成了这张图片所需的所有功能 即平移 旋转 缩放 但是给出的 xyz 坐标越多 程序运行速度就越慢 我的程序在处理 29 000 个坐标时运行得非常流畅 但当我
  • 为什么 glClear 不清除我的屏幕?

    这是我编写的一个简单的 opengl 程序 我试图在绘制三角形之前清除屏幕 我在 init 函数中调用了 glClear 但是 它似乎无法清除屏幕 include
  • OpenGL 使用着色器将 NV12 转换为 RGB24

    我尝试编写一个应用程序来在 OpenGL 中显示 YUV 图像 我使用此代码片段在 C 中成功将 Y UV 转换为 RGB source https blog csdn net subfate article details 4730514
  • 使用 glGetFloatv 检索 pyglet 中的模型视图矩阵

    我正在使用 pyglet 在 python 中进行 3D 可视化 并且需要检索模型视图和投影矩阵来进行一些选择 我使用以下方式定义我的窗口 from pyglet gl import from pyglet window import wi
  • 渲染 TTF SDL2.0 opengl 3.1

    我正在使用 SDL2 0 并使用 半现代 opengl 3 1 我希望向我的应用程序添加文本叠加 并在应用程序中呈现 TTF 我将如何使用现代 OpenGL 来解决这个问题 编辑 根据 genpfault 的建议 我尝试使用 SDL TTF
  • 在 OpenGL 中渲染纹理 1 到 1

    所以我想做的是使用 OpenGL 和 C 将纹理渲染到平面上 作为显示图像的一种方式 但是我需要确保在渲染纹理时没有对纹理进行任何处理 抗锯齿 插值 平滑 模糊等 这是 OpenGL 处理渲染纹理的默认方式吗 或者是否需要设置一些标志才能禁
  • 按像素值偏移 gl_Position 或 gl_Vertex

    我的属性包含像素值 我想用这个属性值来偏移我的 gl vertex 问题是我的 gl vertex 以世界单位为单位 而 offset attribute 以像素为单位 如果我将屏幕尺寸作为统一发送 然后将像素转换为 1 到 1 值 并将其
  • 如何在opengl中使用四元数绕屏幕中心旋转?

    我正在尝试实现轨迹球 轨迹球旋转 但我的中心有问题 回转 无论如何 我希望中心成为屏幕的中心 让我解释一下到目前为止我所做的事情 我创建了一个四元数 旋转轴 向量起点x向量结束 角度 向量起点 向量结束 从该四元数中 我创建了一个旋转矩阵
  • 在 OpenGL 中实例化数百万个对象:提高每秒帧数

    我的最终目标是以 60 fps 渲染 100 万个不同尺寸和颜色的球体 我也希望能够在屏幕上移动相机 我已经修改了代码我正在学习的教程的这一页 http learnopengl com Advanced OpenGL Instancing尝
  • 渲染到一个颜色通道而不影响其他通道

    使用 OpenGL 任何版本 如何通过一次仅影响一个颜色通道来渲染到帧缓冲区对象 例如 我的帧缓冲区对象具有 GL BGRA 布局 现在我想执行一些渲染命令 这些命令应该只改变红色通道 因此 如果片段用颜色 204 0 0 0 渲染并且像素
  • 使用 gl_FragColor 与 vec4 颜色?

    似乎有很多不明确的地方gl FragColor被弃用 例如 它缺失在GLSL 4 40 规范 https www khronos org registry OpenGL specs gl GLSLangSpec 4 40 pdf 但它包含在
  • Windows 上的 OpenGL SDK

    我正在尝试编写一个 OpenGL 应用程序 因此我安装了 Windows 7 SDK 然而 它似乎是OpenGL 1 1 define GL VERSION 1 1 1 如何找到我安装的 OpenGL 版本 dll 以及在哪里可以找到较新的
  • 仅在发布模式下使用 glGenBuffer 时出现未处理的异常 - QT

    我在 Windows 7 上使用 Qt 4 8 发布模式编译项目时遇到了一些问题 调试时一切正常 但在发布时我收到未处理的异常 0xC0000005 访问冲突 我将范围缩小到发生这种情况的行 即生成像素缓冲区的时间 我的第一个猜测是 DLL
  • 之前对 GL.Color3 的调用使我的纹理使用了错误的颜色

    制作 2D OpenGL 游戏 渲染帧时 我需要首先绘制一些计算的四边形几何体 然后绘制一些纹理精灵 当我的渲染方法主体仅绘制精灵时 一切正常 但是 当我尝试在精灵之前绘制几何四边形时 精灵的纹理会更改为之前使用的最后一个 GL Color
  • 进行亚像素平移时,2D 纹理会扭曲

    我想知道一个理论推理为什么这是可能的 几何体的平移与纹理映射有何关系 我只能在进行子像素平移时注意到这种效果 如果通过整个像素平移 纹理看起来很好 我正在使用正交投影 GL CLAMP TO EDGE GL NEAREST 片段着色器是hi
  • 如何在 OpenGL 中绘制镜像某些东西的镜子?

    根据我的理解 要在 OpenGL 中进行镜像 您基本上需要绘制场景 然后将所有内容翻转并再次绘制 只是使其通过镜子可见 从而在镜子中创建完美翻转的图像 但我看到的问题是 执行此操作时 唯一可以看到其他镜子的镜子是在前一个镜子之后渲染的镜子
  • OpenGL/GLSL - 纹理过滤的实现

    我想在 GLSL 着色器中自己实现纹理过滤 min 和 magfilter 因为我想使用 image load and store 而不是采样器 而且我想以特殊方式处理未定义的像素 并且我正在寻找一篇文章或者这样讨论过滤过程 我记得如何从我

随机推荐

  • 创建一个新的颜色可绘制对象

    我正在尝试将十六进制值转换为整数 以便我可以创建一个新的颜色可绘制对象 我不确定这是否可能 但根据文档 https developer android com reference android graphics drawable Colo
  • getApplication() 与 getApplicationContext()

    我找不到令人满意的答案 所以我们开始 这是怎么回事Activity Service getApplication and Context getApplicationContext 在我们的应用程序中 两者都返回相同的对象 在一个Activ
  • 大数据库用什么DB?

    我正在着手一个项目 在不久的将来可能会跨越数百万行 所以我正在研究我使用的数据库 因为这肯定会证明是一个问题 据我所知 一旦表的行数达到 2 000 000 行 SQL 的所有版本都会出现问题 对于这些大型项目有推荐的好数据库吗 这是我正在
  • 为什么 Python 3 http.client 比 python-requests 快这么多?

    我今天测试了不同的 Python HTTP 库 我意识到http client https docs python org 3 library http client html库的执行速度似乎比requests http docs pyth
  • C 中指针的冒泡排序,输入末尾的预期声明或语句

    我尝试使用指针引用数组元素来实现冒泡排序 而不是使用数组索引 void bubble p long long int main long count 10 int i long data 5 2 1 7 10 6 8 4 9 0 bubbl
  • 缺少 Haskell 原语来连续将函数应用于列表的每个元素?

    在 Haskell 中 众所周知map原语可用于将给定函数应用于all列表的元素 gt map toUpper abcd ABCD gt 在尝试生成有限集 列表 的所有分区时 以下类似的原语会很方便 gt sap toUpper abcd
  • MySQL 中的一对多查询

    在 MySQL 中查询一对多的最佳方式是什么 这是我正在开发的数据库的简化版本 如果有什么看起来不对劲告诉我 CREATE TABLE Tenant tenant id int NOT NULL first name varchar 20
  • JAVA 中的四舍五入

    我想四舍五入 ex 的值 12 166666 gt 12 00 12 49999 gt 12 00 12 5111 gt 13 00 12 9999 gt 13 00 我想将 50 派塞四舍五入 你可以看看Math round double
  • 在cocos2D游戏环境中应用缩放效果?

    我正在开发一款游戏cocos2D游戏引擎并加载所有sprites当它加载关卡时 现在因为一些sprites 障碍物 高于 320 像素 因此看起来很难检查出来 所以为了方便起见我想申请ZOOM IN and ZOOM out效果 一次最小化
  • C# 动态创建 LinkBut​​ton 命令事件处理程序

    所以我这里有一个奇怪的情况 我有一个 System Web UI WebControls WebParts EditorPart 类 它呈现一个 搜索 按钮 当您单击此按钮时 它的 clickHandler 方法会执行数据库搜索 并为其返回
  • ND 输入的 im2col 算法

    我正在尝试为输入维度 gt 2D 编写自己的 im2col 算法 目前我正在研究 Matlab im2col 的实现 但是 我找不到任何有关二维以上输入的情况的文档 如果我将 3D 张量输入到函数中 我确实会得到输出 不过我不太明白你是如何
  • 使用 javascript 下载时 PDF 为空

    我有一个 Web 服务 可以在其响应中返回 PDF 文件内容 当用户单击链接时 我想将其下载为 pdf 文件 我在UI中编写的javascript代码如下 http get http MyPdfFileAPIstreamURl then f
  • 播放声音 Javascript/Jquery

    我正在构建一个基于 Ajax 的应用程序 它将在我们的本地 Intranet 网络上运行 现在 每次 Ajax 返回请求时 我都需要在客户端浏览器中播放声音 我想将声音文件 mp3 wav 放入我的 Web 服务器 Tomcat 目录中 应
  • React:获取 contentEditable div 内文本的值

    我正在使用一个contentEditablediv 并希望在调用提交时获取其中的文本 我试过this refs textarea value trim 但这似乎不起作用 我的代码在渲染返回中如下 div div
  • 在Python和XML中递归搜索父子组合并构建树

    我正在尝试遍历这个充满父子关系的 XML 数据 并且需要一种方法来构建树 任何帮助将不胜感激 另外 在这种情况下 父 gt 子关系有属性还是节点更好
  • 将原始 Scapy 数据解码为人类可读的数据

    我正在尝试改用 Scapy 而不是 Wireshark 但在解码我收到的数据时遇到问题 在 Wireshark 中 我可以轻松看到过滤数据包的最后一层 标记为 分布式交互式模拟 但在 Scapy 中 最后一层是 原始 我试图以相同的人类可读
  • 使用 jQuery 选择

    1天前我在这里问了一个大问题 但没有得到足够好的答案 所以我把问题分成几个部分 这是其中一部分 看看这段代码 div div div div
  • 如何在现有 UIKit 类(例如 UIColor)的扩展中添加初始值设定项?

    Swift 文档说 在扩展中添加初始值设定项是可能的 文档中的示例是关于将初始值设定项添加到struct Xcode 无法识别UIColor在我的便利初始化程序中指定的初始化程序 extension UIColor convenience
  • document.body.style.marginTop 在 JS 中返回空白字符串

    据我了解 some elem style maginTop 将返回带有元素上边距的字符串 相反 我总是得到一个空字符串 我想在 body 上使用它 但我也尝试在 div 上使用 但这也不起作用 console log document bo
  • 交错顶点提交如何提高性能?

    我已经阅读并看到了其他问题 这些问题通常都指向将顶点位置和颜色等交错到一个数组中的建议 因为这可以最大限度地减少从 cpu 发送到 gpu 的数据 我不清楚的是 即使使用交错数组 您仍然必须对位置和颜色指针进行单独的 GL 调用 OpenG