问题标签 [vbo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4525 浏览

opengl - OpenGL中的动态VBO

存储用于 VBO(或顶点数组)的动态数据的最佳方法是什么。我看到的唯一示例是 2D 静态数组,指向该数组的指针与下一个参数一起使用,例如步幅、用于一个元素的字节等。我可以使用“动态”数组,因此我可以在空中指定它的大小,但只有一次。我的观点是,例如,如果你已经绘制了 1000 个点(谈论 2D,所以我认为点比顶点更好)作为线带并且你添加新点,这样你必须创建大小为 1001 的新数组,复制从旧字段到新字段的所有内容,添加新点并将其发送到图形的内存。最好的方法是使用向量或双端队列作为临时存储,但是我必须转换为数组并再次将其发送下来。

那么有没有更好的方法来做到这一点?我可以只向 VBO 添加新部分而不发送旧数据吗?或者更好的方式来存储数据/使用向量作为数据源而不进行转换?

0 投票
1 回答
1094 浏览

iphone - glPointSizePointerOES 和 glScalef

我正在使用点精灵来显示几万个点,每个点都有不同的大小。它工作得很好,看起来很棒,而且速度很快。我正在使用带有坐标和大小的 VBO(每点 4 个浮点数)。

这是我的显示代码

现在,我还希望能够放大,即使用glScalef. 是否可以在不更新 VBO 的情况下相应地更改点的大小?glPointSize没有任何效果,因为我正在使用GL_POINT_SIZE_ARRAY_OES.

0 投票
2 回答
2370 浏览

opengl - 在 opengl 中使用 Eigen 数学库的问题

我目前正在尝试将 Eigen 数学库与 Opengl 一起使用。我有一些来自 Eigen 的 Vector3f 的 typedef,比如 Vec3,这样我就可以将它用作我的顶点的坐标。我还有一个带有坐标(vec3)、法线(vec3)和颜色(vec4)的顶点结构。当我尝试使用顶点数组时(一旦我使顶点数组正常工作,我将使用 VBO)似乎 OpenGL 将 Eigen 的 Vector3f 处理为坐标存在问题......你们中有人处理过这些问题吗?

0 投票
1 回答
1275 浏览

opengl - 如何使用 VBO 和单个 OpenGL drawelements 调用绘制多个对象?

我读过可以使用 vbo 并使用单个 drawelements 调用来绘制多个对象。我还没有找到任何这样的例子。现在我正在为每个绘制的立方体进行一次drawelements调用,这正在降低我的帧速率,因为我正在用它们制作整个游戏。任何帮助表示赞赏,尤其是示例代码。

0 投票
1 回答
606 浏览

opengl - 顶点和纹理坐标的缓冲区大小不同?

有没有办法为 glDrawElements 使用不同大小的缓冲区?我想以某种方式将顶点映射到纹理坐标,以便纹理坐标缓冲区实际上能够小于顶点缓冲区。

示例:顶点缓冲区有 16 个顶点,纹理坐标缓冲区有 6 个顶点。

感谢每一个小提示在哪里寻找什么。

0 投票
1 回答
1358 浏览

opengl - 网格变形和 VBO

在我当前的项目中,我渲染了一系列以网格排列的基本立方 3D 模型。这些 3D 瓷砖在游戏中构成了地牢关卡的墙壁,因此它们不是完美的立方体,但我特别注意确保所有边缘对齐并且所有瓷砖都正确。

我对实现高度图变形感兴趣,这似乎需要我手动变形 3D 瓷砖的顶点,首先通过升高或降低一个角,然后通过计算两个角之间的线并移动所有基于该线的高度的顶点。看起来很简单。

我当前的问题是:我正在使用 OpenGL,它提供了一种称为 VBO 的优化,它基本上是(据我所知)为了速度而保存在 GPU 内存中的网格的静态副本。我使用 VBO 进行渲染,因为我只使用三个基本模型(L 角、直墙和当它们不在 L 中相遇时连接墙的盖帽)。如果我必须手动调整模型的顶点,似乎我必须替换每个图块的 VBO 内容,这几乎否定了使用它们的意义。

在我看来,我或许可以使用简单的旋转和平移变换来实现类似的效果,但我不知道如何做到这一点,而不会在瓷砖之间留下空隙。有什么想法吗?

0 投票
2 回答
5262 浏览

iphone - 将顶点缓冲区对象用于非常动态的数据在性能方面是一个好主意吗?

我有很多粒子,每帧的顶点都会改变。当前正在使用“客户端”内存中的顶点数组绘制顶点。如果我使用顶点缓冲区对象,我可以获得哪些性能特征?

由于我必须使用许多 glBuffersubData 来更新粒子顶点,因此我无论如何都要将顶点传输到视频内存每一帧(就像我使用常规顶点数组一样)?在这种情况下,VBO 有什么好处吗?

这适用于 iOS 设备。实际绘制调用:glDrawElements(GL_POINTS,num_particles,GL_UNSIGNED_SHORT,pindices);

我应该使用GL_STREAM_DRAWorGL_DYNAMIC_DRAW吗?

0 投票
3 回答
645 浏览

c++ - opengl vbo dma数组

我正在创建一个要绘制的位置数组,当我使用 dma 作为数组时我被卡住了

如果我声明数组的大小并填充,我可以让它工作,但如果我这样做

无聊,我想不出我需要做什么

0 投票
1 回答
2427 浏览

qt - OpenGL资源共享策略

我正在创建一个类似 CAD 的应用程序(基于 Qt),它将是一个多文档界面,每个文档将包含大约 5 个视口(源自 QGLWidget)。因此,我需要在整个应用程序中共享我的平面着色器,然后在每个文档(即 5 个视口)之间共享 3D 资产(存储为 VBO 的模型)。

我想只要我分享着色器程序和 VBO GLuint 地址,所有这些都会自动工作 - 它不会。我认为因为每个视口/上下文在显卡上都有自己的地址空间,如果有人知道更好,请告知!

我希望在应用程序启动时编译着​​色器,但这证明很困难,因为我需要一个有效的 QGLWidget 才能让 OpenGL 预先进入有效状态。但是由于我需要共享 QGLWidgets(通过它们的构造函数)以让它们共享资源,因此需要在实例化其他的之前创建并显示一个。但这是非常不切实际的,因为要同时向用户显示多个视图。

这一定比我想象的要容易,因为它几乎不是开创性的东西,但我真的很挣扎——谁能指出我正确的方向?

谢谢,凸轮

0 投票
1 回答
3528 浏览

opengl - 将顶点缓冲区对象用于基于图块的游戏和纹理图集

我正在使用 OpenGL 在 C# 中创建一个基于图块的游戏,并且我正在尝试尽可能地优化我的代码。

我已经阅读了书籍中的几篇文章和章节,并且都得出了相同的结论(您可能知道),即使用 VBO 可以大大提高性能。

但是,我不太确定它们是如何工作的。

我的游戏将在屏幕上显示图块,有些会改变,有些会保持不变。要为此使用 VBO,我需要将每个图块的坐标添加到数组中,对吗?

此外,要纹理这些瓷砖,我必须为此创建一个单独的 VBO?

如果我有动画的图块和屏幕上的静态图块,我不太确定平铺这些坐标的代码会是什么样子。 谁能给我一个快速的纲要?

我计划使用我所有瓷砖的纹理图集。我不确定从哪里开始使用这个图集来制作纹理瓷砖。 我是否需要计算要应用的地图集中瓷砖的坐标?有什么方法可以简单地使用图集的坐标来应用纹理?

如果有人能澄清这些问题,将不胜感激。如果需要,我什至可以报销某人的时间和帮助。

谢谢,

格雷格