问题标签 [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.
c++ - VAO/VBO 管理 - 更改所有 VBO 数据
我有一个带有 3 个 VBO 的 VAO,其中包含一个带有顶点、法线和纹理坐标的模型。
我打算经常更改这些 VBO 中的所有数据,大约从 500 毫秒到 20 毫秒的更新频率。下载到 VBO 的新模型可以比前一个模型具有更少或更多的三角形。所以缓冲区大小也会改变。
我不是 OpenGL 方面的专家,所以如果可能的话,我想要一些关于如何改进我的代码的提示。目前,该程序实现如下:
编辑:
这个当前的解决方案的问题是绘图不是它应该是的。
如果我的第一个模型很大(50Mb),而我加载另一个更小的模型(25Mb),那么之前模型的一部分仍然被绘制。
如果第一个模型是小模型(25Mb),然后我将其更改为大模型(50Mb),则绘图没有改变(或者至少它似乎没有改变)。如果我在一个更小的(216kb)之后充电,绘图就会改变(但仍然有一部分剩余)。
所以我想我的 VBO 管理有问题吗?
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)是可疑的,但我无法纠正它。
我的试验:
- 将变量 arg0 更改为 0。
- 将变量步幅更改为 0。
- 将变量 stride 更改为 0,并将 arg0 更改为 0。
而且我不确定是否可以同时使用 VAO 和 glDrawArraysInstanced 方法。
有什么建议么?
c++ - 多网格模型的 vao 管理
我有一个带有多个网格的 .obj 模型。我想为每个网格创建一个 vao。然后渲染所有的东西。
为此,我想创建一个 vao 指针,根据模型中的网格数量更改其大小。
我使用 assimp 为模型充电。
没有编译问题,但执行此程序时程序崩溃。
知道我的程序出了什么问题?(我对openGL有点陌生)
我的代码:
c++ - glDrawElements 抛出 GL_INVALID_VALUE 错误
我正在尝试绘制我的平铺图像的一部分,但是当我调用 glDrawElements 函数时出现 GL_INVALID_VALUE 错误。当我用 glDrawArrays 改变这个函数时没有问题。问题是索引计数参数不是负数。
有一个代码:
c - 仅使用 VAO id 检索链接到 VAO 的 VBO 数量及其 id,这可能吗?
环境:OpenGL 3.3+,C编程,Windows。
我有一个函数可以从模型中加载所有顶点数据,但只返回 VAO id 和顶点数。在此过程中,它生成 VBO ids 和顶点数组数据被传递到缓冲区......但是当函数完成时 VBO ids 不会保存。实际上,绘制 VAO 不需要它们。
现在我需要访问其中一个 VBO 来更新一些数据,但我没有存储 ID。
是否可以从 VAO(具有 id)中检索与其链接的 VBO 的数量及其 id?
c++ - 具有不同纹理 UV 的矩形实例
我是现代 OpenGL VBO/VAO 的新手,我为一件事而苦恼:我已经根据本教程编写了一个 RectangleAsset ,但我不确定如何将有关纹理 UV 的信息移动到 RactangleAssetInstance(我的矩形可以有不同的纹理)。
我是否必须为其创建新的 VAO,或者我可以通过其他方式传递 UV?或者为 UV 添加第二个 VBO?最重要的是:解决这个问题的最佳实践是什么?
和加载 RectangleAsset 的函数:
注意:我计划只在一个地方使用 RectangleAssetInstances,在一个 std::vector 中进行 GUI 渲染(非静态 gui)。将所有矩形合并到一个 VBO 和 VAO 中可能是个好主意(并在添加/删除 UIElement 时重新创建它)?
欢迎任何学习 OpenGL 最佳实践的建议。
c++ - VAO 中的 C++ GLSL 多个 IBO
我正在开发一个小项目,我正在使用 VBO、IBO 和 VAO,我有一个顶点数组及其各自的数组索引,我对材料做同样的事情(因为相同的顶点可以在另一侧有不同的材料) 但 VAO 中的此链接不显示任何内容。每个 VAO 都必须是 IBO?
附件是我的代码,其中分别将数据发送到 gpu 和渲染!
我会很感激你的帮助,问候:)
c++ - 将顶点缓冲区对象附加到顶点数组对象
我正在尝试将 vbo 附加到 vao。但是我只能让它以“旧”方式工作:
现在我希望它实现新的无绑定方式,我这样尝试:
但是,我只得到一个黑屏。
将索引缓冲区对象附加到 vao 可以工作:
我错过了什么?
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:
opengl - VBO 不会绘制,大型数据集
我正在尝试在 OpenGL 中渲染约 100 000 个值的大型数据集,现在仅作为点,稍后使用精灵。
我的向量"positions"
是这样排序的:
+-------------------------------------------------
| x | y | z | w | x | y | z | w | x | y | z | ...
+-------------------------------------------------
其中第四个分量 (w) 是在顶点/片段着色器中使用的缩放因子。
VBO创作[编辑]
渲染阶段:[编辑]
这现在有效,但我不确定是否 100% 正确,请随时批评:
如果需要更多代码,请告诉我。