问题标签 [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 回答
2796 浏览

opengl - 带有 VBO 的 OpenGL 多个纹理

我试图弄清楚如何为每个面渲染具有不同纹理的对象(立方体)。为简单起见,我有 2 个纹理分别应用于立方体的 3 个面。我知道我应该使用具有 3 个坐标的纹理数组来表示要使用的相关纹理。我只是不确定如何做到这一点以及如何编写我的片段着色器。

这是我的init()功能的相关部分:

然而,我在这里有点困惑,因为橙皮书(OpenGL 着色语言)给出了使用glActiveTextureandglBindTexture的示例,但GLSL 常见错误说你不应该这样做。

从那里开始,我的display()函数如下所示:

我不确定在我的 GLSL 着色器中放什么。我的顶点着色器具有标准gl_TexCoord[0] = gl_MultiTexCoord0;,我的片段着色器看起来像:

如何指示片段着色器使用哪个纹理?我假设是在我填充顶点、索引、纹理缓冲区等时,我通过为每个点传递第三个纹理坐标来做到这一点?这个第三个坐标的值是相关纹理坐标的值吗?我希望我的问题有意义,并感谢您的帮助。克里斯

0 投票
1 回答
1903 浏览

opengl - opengl中的vbo管理

我有不同的模型要在 OpenGL 中渲染。每个模型都有不同的顶点和索引。

使用 vbo 渲染这些模型时,我应该遵循的最佳实践是什么?我应该为每个模型制作一个 VBO 来渲染它吗?我已经读到使用几个小型 VBO 以及使用几个大型 VBO 都会对性能造成很大影响。

例如:我有一个盒子,旁边有一辆车,盒子有8个顶点,而车有2000个顶点,这是完全不同的数字。我有不同的模型,它们有时也会消失,这意味着这些模型应该从服务器端缓冲区中删除。我怎样才能做到这一点 ?

也许有人可以指导我写一篇文章来消除这种困惑并展示处理我的情况的好方法。

0 投票
2 回答
551 浏览

opengl - 在OpenGL中使用索引作为坐标

我想实现一个允许用户缩放和平滑平移的时间序列查看器。

我以前做过一些即时模式opengl,但现在不赞成使用VBO。我能找到的所有 VBO 示例都存储了每个点的 XYZ 坐标。

我怀疑我需要将所有数据保存在 VRAM 中,以便在平移期间获得可以称为“平滑”的帧速率,但我只有 Y 数据(因变量)。X 是一个自变量,可以从指数中计算出来,Z 是常数。如果我必须存储 X 和 Z,那么我的内存需求(缓冲区大小和 CPU->GPU 块传输)将增加三倍。而且我有数以千万计的数据点,用户可以通过这些数据点进行平移,因此内存使用量将不小。

是否有一些技术可以绘制一维顶点数组,其中索引用作另一个坐标,或者存储一维数组(可能在纹理中?)并使用着色器程序生成 XYZ?我的印象是在新的无固定特征管道模型下无论如何我都需要一个简单的着色器来实现缩放和平移,所以如果我可以结合 X 和 Z 坐标的生成以及 Y 的缩放/平移,那将是理想的。

这甚至可能吗?您知道执行此操作的任何示例代码吗?或者你至少能给我一些伪代码,说明以什么顺序调用哪些 GL 函数?

谢谢!

编辑:为了确保这一点很清楚,这是等效的立即模式代码和顶点数组代码:

请注意,v[]它的大小是 的两倍y[]

0 投票
2 回答
1446 浏览

c++ - 在交错的 openGL 顶点缓冲区对象之间复制

使用opengl 3.3,radeon 3870HD,c++ ..

我有关于交错数据数组的问题。我在向量中获得了我的应用程序结构,它作为数据发送到缓冲区对象。像这样的东西:

没关系,我经常使用这个东西。但我创建的是交错数组,因此数据如下:

现在我将这个东西发送到 GPU 中进行处理,并通过转换反馈读回缓冲区,例如 b 变量。所以它看起来像:

我想将更新的值复制到交错缓冲区中,这可以通过 glCopyBufferSubData 之类的单个命令来完成吗?这个不合适,因为它只需要偏移量和大小而不是步幅(可能类似于 c++ 中的 memcpy)......结果应该如下所示:

如果没有,有没有比这两个我的更好的方法?

  1. 映射更新的缓冲区,将值复制到应用程序中的临时存储中,取消映射更新,映射数据缓冲区并通过它迭代设置新值

  2. 常量缓冲区和变量缓冲区上的单独缓冲区。常数会随着时间的推移保持不变,但使用 glCopyBufferSubData 变量可以在一次调用中更新..

谢谢

0 投票
2 回答
1461 浏览

c++ - 每个网格有多个顶点缓冲区

我遇到了这样一种情况,即我的网格及其所有顶点和索引的大小大于(最佳)顶点缓冲区对象上限(~8MB)。我想知道我是否可以在多个顶点缓冲区中细分网格,并以某种方式保持索引的有效性。即一个在第一个顶点有一个索引,在最后一个顶点有一个索引的三角形(即在单独的 VBO 中)。

一直在顶点数组对象中保持这一点。我的想法是,省去麻烦,对于像这样的网格(混乱:P),只需使用必要的大小(> 8MB);这就是我目前所做的。但理想情况下,我的缓冲区管理器(wip)目前正在使用最佳尺寸;那我可能只需要做一个特殊情况。

有任何想法吗?

注意:我还在gamedev stack上交叉发布了这个,因为我不确定哪个更合适(它部分是设计问题)。

0 投票
1 回答
473 浏览

android - OpenGL ES VBO glgeterror 4242512 - 它是什么?

您好,我收到“glgeterror 4242512”,我的代码是:

编辑:如果我调用它:onSurfaceCreated那么一切都很好,我得到一个 glgeterror 0,这是完美的。

如果我从一个线程开始这个调用,那么我得到这个数字 "4242512" ,并且 textureBufferIndex 也将为空。为什么?

0 投票
1 回答
1996 浏览

android - 带有裁剪或 VBO 的 Android OpenGL ES draw_texture?

大家好,我正在重新开发我的 android 应用程序以使用 OpenGL 而不是画布(因为它非常慢),我想知道,因为我使用的是平铺表(图集纹理),使用 VBO 或 draw_texture 会更快吗裁剪设置如下:

在听了 Chris Pruett 一段时间后,我发现 draw_texture 对于单个精灵来说无疑是最快的,但如果我正在裁剪图集,这仍然是真的吗?

0 投票
1 回答
1922 浏览

opengl - OpenGL鼠标拾取策略

我正在使用 OpenGL 渲染在给定平面中旋转对称的对象模型,并且我希望用户能够滚动模型(可能在旋转、缩放等之后)并确定世界坐标鼠标当前指向的模型。

我提到对称性的原因是我使用单个组件的VBO构建模型以便于使用。与我正在做的事情的类比是自行车车轮 - 我将有一个 VBO 用于辐条,一个用于轮毂,一个用于车轮/轮胎,我会多次重复使用辐条 VBO(之后合适的平移和旋转)。我的第一个问题是,这种安排是否有利于我正在尝试做的那种挑选?例如,我希望生成的模型中的每个人都可以“挑选”。我是否需要为网格中的每个四边形/三角形使用单独的 VBO 来进行我想要做的那种选择?我真的希望不是这样...

另外,最好的挑选算法是什么?我只听说过关于 OpenGL 内置选择模式的负面消息。提前致谢!

0 投票
1 回答
4915 浏览

opengl - 将 OpenGL 绘制列表转换为顶点数组或 VBO

我正在尝试使用在 OpenGL 3.0+ 中不推荐使用的绘制列表转换程序,以使用顶点数组或 VBO,但我没有找到任何有关如何进行转换的示例。

现在程序中的内容是这样的(可能是 Python,但我真正感兴趣的是适当的 OpenGL 调用——例如,它也可以是 C++):

我们将纹理映射到一个矩形上。然后我们在某处绘制它:

如何将其转换为使用顶点数组?VBO?

0 投票
1 回答
742 浏览

pointers - OpenGL VBO 访问冲突

过去几周我一直在学习 OpenGL,在阅读了 Swiftless tuts 和 Nehe 的部分 tuts 以及其他有关法线、场景图、bla bla 的文章之后,我决定创建某种“框架”,以让我更容易地插入新学的代码。所以我决定创建一个场景图/渲染器组合,不是那么漂亮,不是那么快(prolly),但是可以选择添加一个新的派生节点类来渲染一个我可能刚刚读过的新特性。因此,我在 interwebz 上查看了有关如何实现一个并解决此基类的各种示例:

....我从中做了这门课:

现在,我使用 freeglut 来处理窗口创建和循环:

场景图形“bob”处理节点的创建,如下所示:

编译器看不到任何错误并执行代码,但它在此处收到访问冲突:

扩展在 View::initExtensions() 中调用,场景图的初始化是在窗口创建之后完成的,所以....我很确定它与指针有关...

在以前的程序中,我使用完全相同的代码来创建 VBO,并且它有效。唯一的区别是这里使用的代码在 Node* 中使用,而之前的代码仅在 Node 中使用(没有指针)。但无论如何,我要检查 glew 是否启动良好。至于我使用的是什么显卡,在笔记本电脑上我有一个糟糕的英特尔集成卡,它应该支持 OpenGL 1.5,但甚至没有 GLSL,在 PC 上,一个 6850。问题是我工作了很多在笔记本电脑上,因为教师和其他东西也是如此。

但无论如何,创建 VBO 作品的代码,我的意思是,它适用于以下方面:

它与 NodeSphere 相同,只是它是静态声明的。提前致谢。