OpenGL顶点缓冲区混淆

2024-01-06

有人愿意解释一下之间的区别吗顶点缓冲区, a 顶点数组, a 顶点缓冲区对象, and a 顶点数组对象?我什至不确定这些是否都是代表不同事物的术语,但我已经看到它们都出现在 OpenGL 规范中。

我知道一个顶点缓冲区只包含顶点而没有其他内容,一旦绑定,一旦我设置了顶点指针,我就可以使用 DrawArrays 来绘制它。我已经这样做过很多次了。

我正在使用我认为是 VertexArray 的东西,它存储设置的任何顶点缓冲区的状态以及任何顶点指针。绑定 VertexArray 会自动绑定顶点缓冲区并设置顶点指针。我也(大部分)成功地使用了这个。

但什么是顶点缓冲区对象, and a 顶点数组对象?他们更好吗? VertexArray 不能提供我需要的一切吗?


顶点数组只是程序中(在地址空间内)的一些数据,您可以通过提供指向它的指针来告诉 OpenGL。
虽然比单独指定每个顶点更有效,但它们仍然存在性能问题。 GL 必须在调用 DrawElements(或类似函数)时进行复制,因为这是唯一可以确定数据有效的时间(毕竟,没有什么可以阻止您立即覆盖数据)。这意味着并行性存在重大障碍,因此存在性能问题。

顶点缓冲区对象(“顶点缓冲区”)是您不拥有的原始数据块,即它们不在您的地址空间中。您可以使用 Copy(Sub)Data 将数据复制到缓冲区对象中,也可以将其临时映射到地址空间。一旦取消映射缓冲区,它就不再属于您。巨大的优势在于,现在 GL 可以决定如何处理它以及何时上传它。它知道数据将是有效的,因为您无法访问它。这使得 CPU/GPU 并行性变得更加容易。

顶点数组 abjects 有点用词不当。其中没有顶点或数组。它们只是一种“状态描述块”,封装了一个或多个顶点缓冲区对象的绑定(包括任何 VertexAttribPointer 调用)。因此,它们既是一个方便的函数,而且效率更高(函数调用更少),但并不是绝对必要的。您也可以手动完成 VAO 所做的任何事情。

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

OpenGL顶点缓冲区混淆 的相关文章

  • 计算边界球体半径时遇到一些问题

    我已经设法用两种方法计算边界球体半径 但没有一种方法能够准确地满足我的要求 我不需要 像素 完美边界球 但我想要比我目前拥有的更好的东西 我正在使用 Wavefront obj 模型并计算这些模型的边界球半径 我提取当前模型尺寸 我使用 N
  • glGenerateMipmap 是否在 sRGB 纹理的线性空间中执行平均?

    OpenGL 3 3 规范似乎没有要求 mipmap 生成在线性空间中完成 我能找到的只有以下内容 派生的 mipmap 数组的内部格式都与 levelbase 数组和派生数组的维度如下 第 3 8 14 节中描述的要求 的内容 派生数组是
  • 将 CVPixelBuffer 渲染到 NSView (macOS)

    我有一个CVPixelBuffer我正在尝试在屏幕上有效地绘制 转变为低效率的方式NSImage可以工作 但速度非常慢 丢掉了大约 40 的帧数 因此 我尝试使用将其渲染在屏幕上CIContext s drawImage inRect fr
  • 如何以编程方式在 qml 中渲染 vtk 项目?

    到目前为止 我了解到我们在 QML 中有两个线程 我们的主应用程序线程和我们的 场景图 线程 http doc qt io qt 5 qtquick visualcanvas scenegraph html http doc qt io q
  • OpenGL 将着色器附加到程序

    有没有办法访问附加到程序的着色器 也就是说 给定一个程序 我可以做类似的事情 vertexShader getVertexShaderFromProgram program 我想在验证我的程序的函数中记录着色器编译状态 但我只保留对程序的引
  • Opengl 非同步/非阻塞地图

    我刚刚找到以下内容OpenGL 规范ARB map buffer range http www opengl org registry specs ARB map buffer range txt 我想知道是否可以使用此扩展进行非阻塞地图调
  • 如何将 3D 图像输出到 3D 电视?

    我有一台 3D 电视 如果我不至少尝试让它显示我自己创作的漂亮 3D 图像 我就会逃避我的责任 作为一个极客 我之前已经完成了非常基本的 OpenGL 编程 因此我了解所涉及的概念 假设我可以为自己渲染一个简单的四面体或立方体并使其旋转一点
  • CPU 到 GPU 法线映射

    我正在创建一个地形网格 然后这个答案 https stackoverflow com a 5284527 1356106我正在尝试将 CPU 计算法线迁移到基于着色器的版本 以便通过降低网格分辨率并使用在片段着色器中计算的法线贴图来提高性能
  • 法线在 openGL 中表现得很奇怪

    我一直在为 openGl 编写一个 obj 加载器 几何体加载得很好 但法线总是混乱的 我尝试在两个不同的程序中导出模型 但似乎没有任何效果 据我所知 这就是将法线放入 GL TRIANGLES 的方法 glNormal3fv norm1
  • OpenGL:调试“单通道线框渲染”

    我正在尝试实现论文 单通道线框渲染 它看起来很简单 但它给了我所期望的厚暗值 论文没有给出计算海拔高度的确切代码 所以我按照自己认为合适的方式进行了操作 代码应该将三个顶点投影到视口空间中 获取它们的 高度 并将它们发送到片段着色器 片段着
  • 我的绘图存在坐标/glortho 问题

    I have made a bit of a change to my code in the last couple of hours as everything was messy with my grid so I made it i
  • 为什么我的 FPS 相机一劳永逸地滚动?

    如果我忽略四元数代数的肮脏细节 我想我理解了旋转和平移变换背后的数学 但仍然不明白我做错了什么 为什么我的相机一劳永逸地滚动 更具体地说 我应该如何从相机的方向 旋转矩阵 计算相机视图矩阵 我正在用 Python 编写一个简约的 3d 引擎
  • openGL转png

    我正在尝试将包含大量纹理 没有移动 的 openGL 编辑 我画的卡片 thx unwind 转换为一个 PNG 文件 我可以在框架的另一部分中使用该文件我正在与 有 C 库可以做到这一点吗 thanks 如果您的意思只是 获取由 Open
  • glEnableVertexAttribArray 中“index”参数的含义以及(可能)OS X OpenGL 实现中的错误

    1 我是否正确理解 要使用顶点数组或VBO进行绘制 我需要所有属性在着色器程序链接之前调用glBindAttribLocation 或者在着色器程序成功链接后调用glGetAttribLocation 然后使用glVertexAttribP
  • 将像素传递给 glTexImage2D() 后会发生什么?

    例如 如果我创建一个像素数组 如下所示 int getPixels int pixels new int 10 pixels 0 1 pixels 1 0 pixels 1 1 etc glTexImage2D getPixels glTe
  • 使用 OpenGL 着色器进行数学计算 (C++)

    我有一个矩阵 例如 100x100 尺寸 我需要对每个元素进行计算 matrix i j tt 8 5例如 我有一个巨大的矩阵 我想使用 OpenGL 着色器来实现该算法 我想使用着色器 例如 uniform float val unifo
  • glut 库中缺少 glutInitContextVersion()

    我正在练习一些 opengl 代码 但是当我想通过以下方式强制 opengl 上下文使用特定版本的 opengl 时glutInitContextVersion 它编译过程失败并给出以下消息 使用未声明的标识符 glutInitContex
  • 在 Linux 上运行我自己的程序的权限被拒绝? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有Ubuntu 9 4 我已经构建了程序 一些基本的 OpenGL 该程序只是制作一个旋转的正方形 然后运行它并 sh blabla p
  • 三角形纹理映射OpenGL

    我正在开发一个使用 Marching Cubes 算法并将数据更改为 3D 模型的项目 现在我想在 OpenGL 中为我的 3D 模型使用纹理映射 我首先尝试了一个简单的示例 它将图片映射到三角形上 这是我的代码 int DrawGLSce
  • OpenGL:仅获取模板缓冲区而没有深度缓冲区?

    我想获取一个模板缓冲区 但如果可能的话 不要承受附加深度缓冲区的开销 因为我不会使用它 我发现的大多数资源表明 虽然模板缓冲区是可选的 例如 排除它以利于获得更高的深度缓冲区精度 但我还没有看到任何请求并成功获取仅 8 位模板缓冲区的代码

随机推荐

  • 递增:x++ 与 x += 1

    我读到 为了清楚起见 许多开发人员使用 x 1 而不是 x 我知道 x 对于新开发人员来说可能会含糊不清 而 x 1 总是更清晰 但是两者之间的效率有什么区别吗 使用 for 循环的示例 for x 0 x lt 1000 x 1 vs f
  • 在Python中删除文件行

    我正在尝试创建一个接受用户名和高分的程序 如果他们已经是用户 他们会更新到新的高分 或者如果不是 则仅添加高分 我的代码是 try a open data r except FileNotFoundError a open data w a
  • 有没有办法允许用户从网站复制文本,并且文本不格式化?

    几乎只是一个问题 我有一个客户要求在整个网页上使用几乎白色文本的负片设计 但测试人员表示 从网站复制和粘贴很烦人 因为复制到 Word 等内容时 所有内容都显示为白色文本 当用户尝试从网站复制文本时 是否有办法预先删除格式 或者有没有办法劫
  • javax.servlet.http.Cookie 的 getDomain() 返回 null

    如何获取 cookie 的实际域 getDomain getPath 返回 null 我也设置了适当的值 我正在使用response addCookie cookie 提前致谢 问候 普拉尚特 饼干来了in从浏览器可能没有可用的数据 只有
  • Spring Hibernate 模板何时使用以及为什么?

    问候 目前正在开发小型 Web 服务应用程序 其中来自 Web 服务 使用 CXF Spring 的响应被处理并保存到数据库 为了使用数据库 我使用 Hibernate 3 5 在网上浏览一些Hibernate Spring的例子 我经常可
  • 部署 Apache Camel 应用程序时出现警告

    当我将应用程序部署到 GlassFish 时 我看到以下警告 WARN AnnotationTypeConverterLoader Ignoring converter type org apache activemq camel conv
  • valgrind 在使用 libcurl 时检测内存泄漏(无 ssl)

    在我的 C 程序中 我使用 libcurl 的一些基本函数 今天我运行 valgrind 来检查是否存在内存泄漏 并且 valgrind 疯狂地报告了多个错误 我基本上追踪到 CURL curl CURLcode res curl curl
  • 当实体包含 UUID 时,H2 数据库的 Hibernate 数据库模式验证失败

    For a H2数据库架构映射到具有 UUID 的实体 the Hibernate ddl 验证失败与例外 根本原因 org hibernate tool schema spi SchemaManagementException 架构验证
  • HTML5异步文件上传,上传流始终无效

    我正在尝试调试我不久前构建的异步文件上传器 它不再工作 我已经花了很多时间但没有成功 服务器接收的流总是损坏 事实上我保存的文件 图像 无法打开 为了简化调试 我设置了一个全新的 ASP NET 项目 其中包含两个主要文件 带有表单字段的
  • 连接到 Redis 127.0.0.1:6379 时出错 (Errno::ECONNREFUSED) - Wercker

    我正在使用 wercker 来运行我的 Rails 应用程序的规范 我在 wercker 上设置 redis 时遇到问题 在我的 Rails 应用程序中我有redis rb看起来像这样 if Figaro env rediscloud ur
  • ServiceContainer、IoC 和一次性对象

    我有一个问题 我要标记这个问题主观因为这就是我认为它演变成的 更多的讨论 我希望能有一些好的想法或者一些发人深省的想法 我对这个冗长的问题表示歉意 但你需要了解上下文 问题基本上是 您如何处理与 IoC 容器相关的具体类型 具体来说 谁负责
  • 使用测试类编译 jar

    如何在android中编译带有测试类的jar 我正在使用 android gradle 插件 1 3 1 classpath com android tools build gradle 1 3 1 我试过了 task testSource
  • CMake:C 和 CXX 编译器识别未知 Win10 CMakeGUI

    所以我尝试根据 youtube 上的本教程配置一个文件 这非常简单 https www youtube com watch v gYmgbqGfv 8 https www youtube com watch v gYmgbqGfv 8 我在
  • Postgres 从 csv 文件复制 - 没有这样的文件或目录

    我正在尝试将一个 相当大的 txt 文件导入到 PostgreSQL 9 1 中的表 geonames 中 我位于服务器的 目录中 该目录中放置了一个名为 US txt 的文件 我设置了search path变量 geochat 我正在使用
  • git克隆,忽略文件

    我想克隆一个 GitHub 存储库 其中包含一个巨大的 exe 文件 为什么 我对 exe 文件的使用为零 而且它比其他所有文件的总和要大得多 有没有办法在克隆文件时忽略该文件 我的猜测是 如果我要求作者制作一个无可执行文件的分支 我会更幸
  • Python:从父文件夹导入文件

    现在我知道这个问题已经被问过很多次并且我已经查看了其他线程 到目前为止没有任何效果 从使用sys path append 只需导入foo 我有一个 python 文件希望导入一个文件 位于其父目录中 您能帮我弄清楚我的子文件如何成功导入其父
  • ARM 部署:获取 Azure Function API 密钥

    作为流分析部署解决方案的一部分 我想通过例如检索 ARM 模板中的 Azure 函数应用程序的 API 密钥listkeys 函数 有没有办法在 ARM 部署期间分别通过 ARM 模板检索此密钥 如果是 如何检索 Thanks Azure
  • 使用谷歌地图获取附近的地点

    我正在尝试使用谷歌地图来查找我当前位置的附近地点 我在 Google Developer Console 中创建了一个项目并获得了 ios APIkey 和 Server APIkey 我还启用了适用于 iOS 的 Google Place
  • C99/C11 限制类型限定符是否对没有定义的函数意味着什么?

    假设我们有一个函数声明 但我们无权访问其定义 void f int restrict p int restrict q int restrict r 由于我们不知道如何访问指针 因此我们无法知道调用是否会触发未定义的行为 即使我们传递相同的
  • OpenGL顶点缓冲区混淆

    有人愿意解释一下之间的区别吗顶点缓冲区 a 顶点数组 a 顶点缓冲区对象 and a 顶点数组对象 我什至不确定这些是否都是代表不同事物的术语 但我已经看到它们都出现在 OpenGL 规范中 我知道一个顶点缓冲区只包含顶点而没有其他内容 一