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

c# - 似乎无法让 VAO 渲染...有人可以帮我看看我做错了什么吗?

所以关于这个问题的一个有趣的事情是,我尝试使用 RenderDoc,但是当我尝试加载我捕获的帧时,RenderDoc 崩溃了,每次我尝试都会发生这种情况,所以在这种情况下,图形调试工具似乎无法帮助我......

我正在使用 C#,以及一组很好的 OpenGL 和 GLFW 绑定,称为 CSGL ( https://github.com/ThatOneCheetah/CSGL )

这是我的渲染代码(我的游戏使用程序纯色矩形作为图形基础,下面的类旨在批处理我的所有绘制调用。)

这是我的主要游戏课程:

0 投票
1 回答
2064 浏览

opengl - VBO 如何连接到 VAO

VAO 是顶点数组对象,VBO 是顶点缓冲区对象。创建和绑定/解除绑定 VAO 和 VBO 的调用具有如下一般格式:

我在互联网上关注了一些教程,他们说 VBO 绑定到 VAO,但是在上面的代码中,我不明白 VBO 和 VAO 之间的“连接”或“绑定”是如何建立的? 我的意思是我们如何知道哪个 VBO 绑定到哪个 VAO 以及如果一个 VBO 绑定到多个 VAO 怎么办?

所以,基本问题是:VBO 绑定到 VAO 是什么意思,我们如何知道哪个 VBO 绑定到哪个 VAO 以及这个绑定是如何建立的?

0 投票
2 回答
159 浏览

c++ - 无法通过glGetBufferSubData获取缓冲区对象数据

我希望使用opengl制作河内塔游戏。最终,我遇到了处理和将数据从一个缓冲区对象传输到另一个缓冲区对象的问题。我已经成功地将我的顶点存储在一个缓冲区对象中,并将它与一个顶点数组绑定。现在想将它移动到另一个创建的缓冲区对象,该对象绑定到另一个顶点数组。问题是当我尝试使用 glGetBufferSubData 获取我的顶点时,我的数据数组显示它的所有元素都为零(我将它打印在控制台上)。我仔细检查了天气,我的缓冲区对象的数据正确,看起来是这样。请帮助我,我在这里的绳索尽头。

我的代码:

希望输出屏幕

0 投票
1 回答
128 浏览

java - OpenGL VBO,每个顶点有一个浮点数问题

我昨天整天都被这个问题困住了,无法弄清楚。代码如下,但通常我试图为 1.Postions 2.Indices 3.Normals 和 4.a 单个浮点值提供网格顶点属性。这些值都存储在不同的 VBO 中,在绑定每个 vbo 后,我声明vertexAttribPointer. 我不能让法线和浮点值都工作。我看到的似乎浮点值的位置是vec3前一个 vbo 中法线的 xy 或 z 部分。

这是声明 vao 和 vbos 的代码。在此之前,我使用glDrawElements并启用所需的 VertexAttributeArray 索引。在我的着色器中,我访问的值如下:

和片段着色器

我可以让它们分开工作,但如果我声明它们的浮点值不再正确。然而,正常情况似乎是正确的。正如我所说,浮动中的值似乎是法线中的值。从普通 vbo 到浮动 vbo 会有某种溢出吗?经过数小时查看代码后,我无法发现错误。

0 投票
0 回答
369 浏览

opengl - OpenGL顶点数组对象无法绑定顶点缓冲区

我正在通过https://learnopengl.com/学习 OpenGL 。从该站点以及我在尝试解决此问题时在互联网上的研究中,我了解到顶点数组对象很有用,因为您可以将其与glBindVertexArray, 和

  1. 将设置任何关联的属性。
  2. 绑定到 GL_ARRAY_BUFFER 的缓冲区将被自动绑定。
  3. 关联的 GL_ELEMENT_ARRAY_BUFFER 也将被自动绑定。

因此,我希望下面的设置代码设置两个顶点数组对象,每个对象都有自己的数组缓冲区,当绑定顶点数组对象时,它们会自动绑定。请注意,这本质上是相同代码的两个副本。此外,这是 Zig 的代码片段,与 C 非常相似。

我有一个绘制矩形的功能:

如果我显式调用glBindBufferafter glBindVertexArray,那么该函数就可以正常工作,但如果我删除它,那么我会得到GL_INVALID_OPERATION in glBufferData(no buffer bound). 但是,我希望glBindVertexArray调用绑定适当的缓冲区。

帮助!

0 投票
1 回答
129 浏览

c++ - OpenGL程序不显示三角形

我正在关注 C++ 中的 OpenGL 教程,由于某种原因,完全相同的代码对我不起作用。它应该显示一个三角形,但它没有显示任何东西。只是一个空白屏幕。这是代码:

我真的不明白为什么它不起作用。三角形的位置看起来正确。glVertexAttribPointer看起来也正确。我在着色器及其源代码的编译和链接中找不到任何错误。在编译和链接它们时我也得到零错误。

0 投票
1 回答
665 浏览

c++ - OpenGL 无法使用 VAO 程序更新顶点缓冲区

我试图通过修改它的位置顶点属性来移动一个顶点。作为测试,我vertices[0] = 0.4f;在创建 VAO 过程之前和之后都添加了该行,以查看是否能够在初始渲染后修改顶点数组。当我在创建 VAO 之前添加它时,它会修改顶点的位置,而在之后添加它时不会。这让我相信我的渲染过程:

不知何故,实际上并没有用float[]内存中的电流更新缓冲区。但是,我可以glBindVertexArray(VAO);用整个渲染过程替换该行:

以此作为我的渲染过程,我可以更新顶点数组,并将此更改传递到 GPU,从而更新顶点在屏幕上的位置。这是我的 VAO 创建代码:

所以当我明确表达渲染过程时它可以工作,但当我将它存储在 VAO 中时它不起作用?据我了解,VAO 是一种用于存储渲染过程的构造,然后当我们运行时glBindVertexArray(VAO);,会执行此渲染过程。我理解错了吗?在创建 VAO 或渲染时是否需要另一条线?

这是 C++ 中的完整源代码:https ://pastebin.com/DgZuZt4K

和用 OpenTK、C# 编写的相同内容:https ://pastebin.com/DHj9UN16

0 投票
1 回答
317 浏览

c++ - OpenGL绘制多个顶点数组

我想绘制多个顶点数组。这是初始化:

初始化时:

抽签时:

无论我最后初始化的哪个顶点数组都会正确绘制,而另一个则不会绘制。例如,如果我调用 init_va1(),然后调用 init_va2(),使用 va2 的绘图将显示,而使用 va1 的绘图则不会。如果我重新排序调用,那么将显示使用 va1 的绘图,而使用 va2 的绘图将不会显示。如何绘制两个顶点数组?

0 投票
1 回答
141 浏览

javascript - 绘制多个对象时,什么时候创建一个新的顶点数组对象?

我正在尝试使用 WebGL 创建游戏。

我目前有三个纹理,一个是字体的字母,一个是角色的精灵表,一个是世界的瓦片图。所以我有一些大的纹理,我需要多次绘制其中的一小部分。

做这个的最好方式是什么?

我目前的方法是为每个字母、地图上的正方形、角色姿势等使用 VAO……所以我会有 150 多个 VAO。我认为 VAO 很好,因为它们既简单又快速,但是thisthis和其他让这看起来不是最好的选择。

例如,我知道的另一种方法是只有三个 VAO 并更改 WebGL 在缓冲区中开始读取的位置以获取正确字母的位置。因此,我将拥有三个带有大型阵列的 VAO,而不是数百个带有小阵列的 VAO。如果这是正确的方法,我每次绘制东西时是否必须在 gl.enablevertexAttribArray() 之后调用 gl.vertexAttribPointer() ,还是只修改 gl.drawArrays() 中的 count 参数?

gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS) 是 16 或 32,因此切碎纹理似乎也不是一个好方法。

最好的概念方法是什么?

0 投票
1 回答
206 浏览

java - 调用 GL30.glGenVertexArrays() 时出错;

我正在尝试使用 java 学习 usinf opengl 和 lwjgl,并且我有一个程序,并且正在尝试渲染一些网格,但是处理 Vaos 和 Vbos 的类是错误的。在做了一些研究之后,我了解到这可能是因为我调用方法相对于 MakecontextCurrent() 的位置;方法,但我没有运气。

警告

前面有很多代码

错误的班级

这是处理游戏循环的类

处理窗口创建的类

}

渲染器

}

原始模型

}

错误