问题标签 [vao]

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 回答
564 浏览

c++ - VAO/VBO 管理 - 更改所有 VBO 数据

我有一个带有 3 个 VBO 的 VAO,其中包含一个带有顶点、法线和纹理坐标的模型。

我打算经常更改这些 VBO 中的所有数据,大约从 500 毫秒到 20 毫秒的更新频率。下载到 VBO 的新模型可以比前一个模型具有更少或更多的三角形。所以缓冲区大小也会改变。

我不是 OpenGL 方面的专家,所以如果可能的话,我想要一些关于如何改进我的代码的提示。目前,该程序实现如下:

编辑:

这个当前的解决方案的问题是绘图不是它应该是的。

如果我的第一个模型很大(50Mb),而我加载另一个更小的模型(25Mb),那么之前模型的一部分仍然被绘制。

如果第一个模型是小模型(25Mb),然后我将其更改为大模型(50Mb),则绘图没有改变(或者至少它似乎没有改变)。如果我在一个更小的(216kb)之后充电,绘图就会改变(但仍然有一部分剩余)。

所以我想我的 VBO 管理有问题吗?

0 投票
1 回答
815 浏览

java - glVertexAttribPointer 出现 JOGL 错误

我正在处理下面的代码(使用 VAO(Vertex Buffer Object) 和 glDrawArraysInstanced 方法)

如果我设置 useVao = false,就可以了。但是当我将其设置为 true 时,我遇到了以下异常:

javax.media.opengl.GLException: Thread[AWT-EventQueue-0,6,main] glGetError() 在调用 glVertexAttribPointer( GLArrayDataWrapper[mgl_MultiTexCoord, index -1, location 1, isVertexAttribute true, dataType 0x1406) 后返回以下错误代码, bufferClazz 类 java.nio.FloatBuffer, 元素 4, 组件 2, 步幅 20b 5c, mappedElementCount 0, 缓冲区 java.nio.DirectFloatBufferU[pos=0 lim=20 cap=40], vboEnabled true, vboName 1, vboUsage 0x88e4, vboTarget 0x8892,vboOffset 12,活着真]):GL_INVALID_OPERATION(1282 0x502),

我认为 glVertexAttribPointer() 的最后一个参数(0 和 Buffers.SIZEOF_FLOAT * 3)是可疑的,但我无法纠正它。

我的试验:

  1. 将变量 arg0 更改为 0。
  2. 将变量步幅更改为 0。
  3. 将变量 stride 更改为 0,并将 arg0 更改为 0。

而且我不确定是否可以同时使用 VAO 和 glDrawArraysInstanced 方法。

有什么建议么?

0 投票
1 回答
271 浏览

c++ - 多网格模型的 vao 管理

我有一个带有多个网格的 .obj 模型。我想为每个网格创建一个 vao。然后渲染所有的东西。

为此,我想创建一个 vao 指针,根据模型中的网格数量更改其大小。

我使用 assimp 为模型充电。

没有编译问题,但执行此程序时程序崩溃。

知道我的程序出了什么问题?(我对openGL有点陌生)

我的代码:

0 投票
2 回答
1501 浏览

c++ - glDrawElements 抛出 GL_INVALID_VALUE 错误

我正在尝试绘制我的平铺图像的一部分,但是当我调用 glDrawElements 函数时出现 GL_INVALID_VALUE 错误。当我用 glDrawArrays 改变这个函数时没有问题。问题是索引计数参数不是负数。

有一个代码:

0 投票
1 回答
363 浏览

c - 仅使用 VAO id 检索链接到 VAO 的 VBO 数量及其 id,这可能吗?

环境:OpenGL 3.3+,C编程,Windows。

我有一个函数可以从模型中加载所有顶点数据,但只返回 VAO id 和顶点数。在此过程中,它生成 VBO ids 和顶点数组数据被传递到缓冲区......但是当函数完成时 VBO ids 不会保存。实际上,绘制 VAO 不需要它们。

现在我需要访问其中一个 VBO 来更新一些数据,但我没有存储 ID。

是否可以从 VAO(具有 id)中检索与其链接的 VBO 的数量及其 id?

0 投票
1 回答
190 浏览

c++ - 具有不同纹理 UV 的矩形实例

我是现代 OpenGL VBO/VAO 的新手,我为一件事而苦恼:我已经根据本教程编写了一个 RectangleAsset ,但我不确定如何将有关纹理 UV 的信息移动到 RactangleAssetInstance(我的矩形可以有不同的纹理)。


我是否必须为其创建新的 VAO,或者我可以通过其他方式传递 UV?或者为 UV 添加第二个 VBO?最重要的是:解决这个问题的最佳实践是什么?

和加载 RectangleAsset 的函数:

注意:我计划只在一个地方使用 RectangleAssetInstances,在一个 std::vector 中进行 GUI 渲染(非静态 gui)。将所有矩形合并到一个 VBO 和 VAO 中可能是个好主意(并在添加/删除 UIElement 时重新创建它)?
欢迎任何学习 OpenGL 最佳实践的建议。

0 投票
1 回答
911 浏览

c++ - VAO 中的 C++ GLSL 多个 IBO

我正在开发一个小项目,我正在使用 VBO、IBO 和 VAO,我有一个顶点数组及其各自的数组索引,我对材料做同样的事情(因为相同的顶点可以在另一侧有不同的材料) 但 VAO 中的此链接不显示任何内容。每个 VAO 都必须是 IBO?

附件是我的代码,其中分别将数据发送到 gpu 和渲染!

我会很感激你的帮助,问候:)

0 投票
1 回答
755 浏览

c++ - 将顶点缓冲区对象附加到顶点数组对象

我正在尝试将 vbo 附加到 vao。但是我只能让它以“旧”方式工作:

现在我希望它实现新的无绑定方式,我这样尝试:

但是,我只得到一个黑屏。

将索引缓冲区对象附加到 vao 可以工作:

我错过了什么?

0 投票
1 回答
3396 浏览

opengl - OpenGL glBindBuffer(0) outside vao?

I currently do this to setup my vao:

My question is: do I need to bind null buffers to prevent my vbo and ibo to change after I'm done with my vao or when bind a null vao it also unbinds current buffers? For example, I would do the following:

0 投票
1 回答
105 浏览

opengl - VBO 不会绘制,大型数据集

我正在尝试在 OpenGL 中渲染约 100 000 个值的大型数据集,现在仅作为点,稍后使用精灵。

我的向量"positions"是这样排序的: +------------------------------------------------- | x | y | z | w | x | y | z | w | x | y | z | ... +------------------------------------------------- 其中第四个分量 (w) 是在顶点/片段着色器中使用的缩放因子。

VBO创作[编辑]

渲染阶段:[编辑]

这现在有效,但我不确定是否 100% 正确,请随时批评:

如果需要更多代码,请告诉我。