标签: vertex-array-object

绑定到 VAO 后我可以 glDeleteBuffer VBO 和 IBO 吗?

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

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

c++ opengl vertex-buffer vertex-array-object index-buffer

3
推荐指数
1
解决办法
121
查看次数

OpenGL大项目,VAO-s等

所以我一直在https://open.gl/上学习OpenGL 3.3 ,我对一些东西感到很困惑.

  1. VAO-S.根据我的理解,它们用于存储glVertexAttribPointer呼叫.
  2. VBO-S.他们储存脊椎.因此,如果我正在制作具有多个对象的东西,我是否需要为每个对象提供VBO?
  3. 着色器程序 - 为什么我们需要多个程序,它们到底做了什么?
  4. 这行究竟是做什么的:glBindFragDataLocation(shaderProgram,0,"outColor");

最重要的是这一切如何适合大型项目?究竟是什么用于VAO-s?大多数教程只是为了绘制一个立方体或2个带有硬编码顶点的东西,那么如何管理具有大量对象的场景呢?我已经阅读了这个帖子并且对场景管理的发生方式有了一些了解,但我仍然无法弄清楚如何将OpenGL的东西连接到它.

c++ opengl shader vertex-buffer vertex-array-object

2
推荐指数
1
解决办法
485
查看次数

OpenGL中建立VAO的流程

我可以获得更全面/一般的描述吗?

我整个星期都在尝试研究这些东西,但我只涉及超级技术解释或示例。

有人可以解释一下这些 VAO 的总体流程或目标吗?也许概述一下在 OpenGL 中设置 VAO 的“分步”流程图?

我从来都不是一个通过例子学习的人……所以到目前为止,我在网上找到的所有东西都没有什么帮助。

c++ opengl graphics vertex-array-object vao

1
推荐指数
1
解决办法
3414
查看次数

将多个缓冲区对象与单个顶点数组对象绑定不起作用

我试图了解 OpenGL 顶点缓冲区绑定点和顶点数组索引之间的映射。我有一个二维矩形和一个二维三角形

const GLfloat rect[] = {
       -0.5f,  0.5f,
        0.5f,  0.5f, 
        0.5f, -0.5f,
       -0.5f, -0.5f};

const GLfloat tri[] = { 
        0.0f,  1.0f,
        0.5f,  0.5f,
       -0.5f,  0.5f};
Run Code Online (Sandbox Code Playgroud)

我将它们放在不同的顶点缓冲区对象中,并尝试将它们映射到顶点数组对象的索引,以便前 3 个属性来自三角形,接下来的 2 个属性来自矩形的最后 2 个点。然后我把它们画成三角形条。

GLuint vbo[2];
glGenBuffers(2, vbo);
GLuint varr;
glGenVertexArrays(1, &varr);
glBindVertexArray(varr);
// draw triangle
glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
glBufferStorage(GL_ARRAY_BUFFER, sizeof(tri), tri, 0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
// draw rectangle
glBindBuffer(GL_ARRAY_BUFFER, vbo[1]);
glBufferStorage(GL_ARRAY_BUFFER, sizeof(rect), rect, 0);
glVertexAttribPointer(3, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), 0);
glEnableVertexAttribArray(3);

glDrawArrays(GL_TRIANGLE_STRIP, …
Run Code Online (Sandbox Code Playgroud)

opengl vertex-buffer vertex-array-object

1
推荐指数
1
解决办法
1965
查看次数