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

opengl-es-2.0 - 未使用 VBO 时 OpenGL 应用程序崩溃

我试图在 OpenGL ES 2.0 中不使用 VBO 来绘制对象。我的代码往往会不时使应用程序崩溃(并非总是如此,甚至没有任何改变)。以下是代码。我认为问题在于我只启用 m_distLocation 而不向着色器发送任何数据。所有统一值都已正确设置。我认为问题仅在于属性变量(m_posAttr 和 m_distLocation)、绑定。

我将不胜感激任何帮助。

0 投票
1 回答
737 浏览

java - 绘图时 VAO 和 VBO 崩溃

我将代码从 DisplayLists 更改为 VBO/VAO。但是当我运行应用程序时它崩溃了。

它在第一次尝试绘制 VAO 时崩溃。我不使用着色器进行绘制(所以它不会引起问题)。

一个 VAO 中最多有 12 个面(12 * 3 个顶点)以及这些面的纹理坐标。有多达 500 000 个 VAO。

我如何创建一张脸:

创建 VBO/VAO:

渲染 VBO / VAO:

这是错误:

我认为在这里发布整个错误是没有意义的。你知道为什么会这样吗?我找不到有关 VBO 的此错误的任何信息。

0 投票
1 回答
215 浏览

opengl - Opengl:第一个顶点总是在原点绘制

我遇到的问题是,无论我希望它在哪里(所有其他位置都是正确的),第一个顶点总是在 (0,0,0) 处绘制。我认为这是我的“init”函数中的一个错误。以下是我使用的职位:

我的“初始化”功能:

还有我的“渲染”功能(只是为了渲染 VAO,没有着色器):

我还尝试调整“glVertexAttribPointer”函数中的“步幅”和“指针”值,但它不起作用。

0 投票
2 回答
133 浏览

android - 将顶点缓冲区转换为顶点数组

我正在研究 OpenGL 程序,我必须计算一个边界框。我编写了代码来执行此操作,但我无法从 vertex buffer 获取顶点坐标。有人可以向我解释一种从顶点缓冲区获取数据的简单方法吗?我正在为 android 和 OpenGL es 使用 Java

0 投票
1 回答
1023 浏览

opengl - 为什么纹理(GL_TEXTURE_2D)不能与(VertexArray)VAO一起使用

我正在开发一个带有 openGL 部分的项目。场景图部分基于核心OpenGL1.0,仍然使用glBegin和glEnd。现在我在上面添加新东西并且必须使用 VAO。我是初学者并使用它QOpenGLFunctions_3_0,因为我无法从 openGL 注册表中找到 gl3.h 问题是现在我使用GL_TEXTURE_2Dwith glBegin(GL_QUADS),它可以工作,而且我也可以单独绘制glDrawElements( GL_QUADS, 4, GL_UNSIGNED_BYTE, 0);它。但是当我使用GL_TEXTURE_2Dand时glDrawElements( GL_QUADS...,纹理没有正确生成。请告诉我正确的使用方法。这是代码

0 投票
1 回答
958 浏览

opengl - 在绑定到一个 vao 的 vbo 之间切换

目前在我的渲染函数中,我使用一个 VAO(顶点数组对象)和四个与这个 VAO 绑定的 VBO(顶点缓冲区对象)。

对于每个 VBO,我绑定到 vao

然后在我的渲染函数(伪代码)中,对于每一帧:

我知道我可以将所有几何图形放在一个 VBO 中,但在某些情况下它的大小超过 5Mb,这导致(可能)它没有放在 GPU 上。

我如何切换所有绑定的 VBO 来绘制它们?

0 投票
2 回答
1212 浏览

opengl - OpenGL 顶点数组对象是存储顶点缓冲区名称和索引,还是只存储索引?

创建时,VAO 是否只跟踪 VBO 索引(通过glBindVertexBuffer),或者哪些 VBO 名称绑定到这些索引?如果我在 VAO 创建期间使用glVertexAttribBinding指定绑定索引为 0 ,我可以在绘制调用之前将不同的 VBO 绑定到索引 0 并让它使用该 VBO 的内容,还是总是使用任何 VBO在创建 VAO 时绑定到索引 0?

我问是因为我发现很多示例在调用glVertexAttribFormatglVertexAttribBinding之前调用,glBindVertexBuffer如果 VAO 仅跟踪索引(因为绑定索引在 中给出glVertexAttribBinding),则不需要这样做。

0 投票
1 回答
3970 浏览

c++ - glVertexAttribPointer GL_INVALID_OPERATION 无效 vao vbo 指针使用

我正在尝试在安装了最新驱动程序的 NVIDIA GTX 970 上使用 OpenGL 4.4 实现延迟着色。
我的代码直接渲染到屏幕上。为了添加第二个通道,我创建了一个用于渲染场景的 FBO 和一个用于渲染最终图像的四边形。当我尝试在第一遍中不渲染任何内容并在第二遍之后绘制四边形时,四边形是可见的。当我在第一次通过时尝试渲染网格(例如立方体)时,四边形消失了。我还收到以下错误消息:
在此处输入图像描述

网格加载了 AssImp。
我使用以下代码创建 VBO / VAO:


我像这样渲染我的网格:


使用 gDEBugger 我发现错误消息来自 glVertexAttribPointer。但是由于 gDEBugger 不支持 OpenGL 4,所以它本身会抛出很多错误并且不能真正工作。

FBO 是这样生成的:


createGBuf() 函数如下所示:

0 投票
1 回答
119 浏览

opengl - 不能创建多个 VAO

我正在尝试使用现代(3.3)OpenGL 创建一个用于游戏的简单图形系统。动态对象将具有动态几何图形,并且 VBO 将在发生更改时更新。这部分很容易实现。虽然只要只使用一个 VAO,一切都运行良好,但对 glGenVertexArrays 的进一步调用不会创建另一个对象(打印第一个和第二个的 ID 都返回 1)并且新对象的 VAO 初始化中的某些内容会呈现第一个无法执行任何编辑。每个“现代 OpenGL”教程要么只使用一个对象,要么有一些非常显着的冲突(最常见的是使用 glVertexAttribPointer)。以下代码涉及对象的图形系统。(不知道这有多重要,但我使用 glfw3 来创建窗口和上下文)。

初始化游戏对象(图形片段)

更新网格

渲染对象

如果任何对 OpenGL 更有经验的人可以指出我的错误(或其他一些问题),那就太好了。

0 投票
2 回答
1721 浏览

c++ - 用于渲染不同对象的 VAO 和 VBO

我编写了这个“模型”类来加载 .obj 文件并在 VBO 中为它们分配数据。它的代码是这样的:(注意它是如何不使用 VAO 的)

我曾经认为下一个代码可以很好地渲染两个不同的对象:

但事实证明,OpenGL 只会绘制两只牛或两个立方体。(取决于我在 init() 中最后加载的模型) 两头牛 两个立方体

顺便说一句,我很确定在第一张图片中,opengl 确实尝试绘制了两只奶牛,但是调用 glDrawArrays() 函数时使用了立方体所需的顶点数量。

那么我错过了什么?我是否需要为每个缓冲区对象或类似的东西使用不同的 VAO?