问题标签 [vertex-array-object]

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

c++ - 在 VAO 中使用多个 VBO

我尝试在 VAO 中使用 2 VBO,但最终导致崩溃(远远超出我的应用程序)。

这个想法是制作第一个 VBO(和可选的 IBO)来构建几何图形。

这很好,直到我想到为模型矩阵添加第二个 VBO 作为顶点属性而不是统一。

因此,当我声明我的网格时,我会执行以下操作(简化代码):

在那之前,一切都很好,我所要做的就是调用 glBindVertexArray() 和 glDrawXXX() 命令,我在屏幕上有完美的东西。

因此,我决定从着色器中删除 modelMatrix 统一以使用 mat4 属性,我可以选择一个 UBO,但我想通过提供多个矩阵将这个想法扩展到实例化渲染。

因此,我在 VBO 中使用一个模型矩阵进行了测试,就在渲染之前,我执行以下操作(VBO 的构建方式与之前相同,我只是为单位矩阵放置了 16 个浮点数):

结果是一个漂亮的崩溃,我没有任何线索,因为崩溃发生在我无法调试输出的驱动程序中。

我的想法完全是垃圾吗?还是我错过了什么?

0 投票
0 回答
158 浏览

python - 即使我正在创建 OpenGL 4.1 上下文,为什么在 PyOpenGL 中使用 glGenVertexArrays() 时会出现“无效操作错误”?

我正在尝试编写一个简单的程序来使用 PyOpenGL 显示一个二十面体,但我无法通过生成 VAO。glGenVertexArrays Mac OSX PyOpenGL中没有解决这个问题,因为我正在创建一个 OpenGL 4.1 上下文。我总是收到以下错误消息:

我的代码如下所示:

我看不到该行中可能发生错误的位置VAO = glGenVertexArrays(1)。据我所知,代码是非常标准的 PyOpenGL 代码。我在 macOS BigSur 11.1 上使用 Python 3.9.1。我正在创建一个 OpenGL4.1 上下文。所以这不是问题。我希望这里有人能告诉我我做错了什么。

0 投票
1 回答
207 浏览

c++ - 更新 OPENGL 中的顶点和索引

大家好,我是 OPENGL 的新手,我想在翻译 3d 对象时更新顶点和索引,我制作了顶点向量和索引向量,这些向量保存了 3d 对象的所有数据,这可能是我使用的代码:

我不知道这段代码是否更改了顶点和索引,或者它只是复制这两个向量并渲染我想要的不是复制这个向量并渲染我想直接使用这个向量并改变这个向量是这可能

0 投票
2 回答
110 浏览

c++ - GL_POLYGONS 不工作我如何让我的功能工作

我一直在尝试使用现代 OpenGL,我正在尝试制作绘图函数来自动绘制基本形状我已经成功完成了四边形,但我无法让圆圈工作我的代码很好,因为当你将绘图模式更改为 GL_POINTS 时,你会看到正确的模式它只是不适用于其他模式我怀疑我使用默认的 OpenGL 坐标但我不确定

这是我的代码

info 错误函数是我在其他文件中实现的函数以及顶点缓冲区、索引缓冲区和顶点数组创建

0 投票
1 回答
53 浏览

c++ - 绑定到 VAO 后,我可以 glDeleteBuffer 一个 VBO 和 IBO 吗?

我读过 VBO(顶点缓冲区对象)本质上保留了一个引用计数,因此如果 VBO 的名称被赋予glDeleteBuffers(),如果一个活的 VAO(顶点数组对象)仍然引用它,它并没有真正被解雇。这种行为类似于“智能指针”,较新的语言越来越多地采用。但是在多大程度上这是正确的并且可以围绕它进行设计,如果它也适用于 IBO(索引缓冲区对象),我还没有找到任何信息。

如果 VBO 由引用它的 VAO 保持活动状态,并且我不打算在 VAO 死亡后更新或使用它,我认为最好的做法是销毁我对它的引用。这样做合适吗?我可以对 IBO 做同样的事情吗?

0 投票
1 回答
41 浏览

opengl - 绘制具有相同顶点布局的多个缓冲区

我有多个对象,每个对象都有自己的索引缓冲区、顶点缓冲区,有些具有不同的着色器或纹理,并且所有对象都具有相同的顶点格式(x、y、z、u、v、nx、ny、 nz)。我不想将我的对象批处理在一起,而是在单独的绘图调用中渲染它们。假设我想渲染 5 个不同的对象(立方体、球体等),我是否必须为每个对象创建一个新的 vao,或者有没有办法告诉 OpenGL 我想渲染 5 个不同的缓冲区相同的布局/格式?