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

萨米克

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

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};

我将它们放在不同的顶点缓冲区对象中,并尝试将它们映射到顶点数组对象的索引,以便前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, 0, 5);

glDeleteVertexArrays(1, &varr);
glDeleteBuffers(2, vbo);

从坐标中可以看到,预期的形状就像小屋,矩形上的相邻三角形。但是,我得到的是

展示

我是否误解了顶点数组对象的绑定或索引?完整的可编译代码在这里,我使用GtkGlExt,但是OpenGL部分是通用的。

Bas Nieuwenhuizen

我认为您在关于属性是什么方面犯了概念错误。

据我了解,您尝试执行的操作是使用5个顶点绘制一个三角形带,其中3个来自三角形,而2个来自矩形。

但是,属性是顶点的一部分,即位置和颜色等。顶点属性缓冲区绑定用于所有顶点的一组属性。即您可以将所有顶点的位置放在缓冲区1中,并将所有顶点的颜色放在缓冲区2中。

您不能将前几个顶点的位置和颜色都放置在一个缓冲区中,而将其他顶点的位置和颜色都放置在另一个缓冲区中,而仍无法在一次调用中绘制它们。

解决方案是将缓冲区(或更准确地说是三角形缓冲区和矩形缓冲区的最后一部分)连接到单个缓冲区中,或者将draw调用拆分为多个draw调用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

顶点数组对象和缓冲区对象之间的区别?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

如何在绑定顶点数组对象和缓冲区数据以在渲染时动态绘制时编写通用的 webgl 渲染循环?

来自分类Dev

OpenGL复制顶点缓冲区对象

来自分类Dev

何时清除顶点缓冲区对象

来自分类Dev

何时清除顶点缓冲区对象

来自分类Dev

OpenGL绘制顶点缓冲区对象

来自分类Dev

使用单个顶点缓冲区还是多个顶点缓冲区?

来自分类Dev

使用单个顶点缓冲区还是多个顶点缓冲区?

来自分类Dev

OpenGL更新顶点数组/缓冲区

来自分类Dev

更改顶点缓冲区对象中的顶点颜色

来自分类Dev

为什么在调用glDrawArrays之前不需要绑定顶点缓冲区对象?

来自分类Dev

为什么在调用glDrawArrays之前不需要绑定顶点缓冲区对象?

来自分类Dev

顶点数组对象的绑定顺序

来自分类Dev

同一顶点缓冲区对象中有多个网格?

来自分类Dev

使用顶点缓冲区对象的最低OpenGL ES版本

来自分类Dev

JOGL中具有顶点缓冲区对象的问题

来自分类Dev

动态打包OpenGL顶点缓冲区对象的数据

来自分类Dev

(DirectX 11)单个顶点缓冲区可以一次绑定到多个IA输入插槽吗?

来自分类Dev

同时将单个缓冲区绑定到SSBO的多个索引目标

来自分类Dev

对象绑定不起作用

来自分类Dev

将单个缓冲区对象用于OpenGL中的多组数据

来自分类Dev

OpenGL累积缓冲区不起作用

来自分类Dev

OpenGL帧缓冲区深度不起作用

来自分类Dev

深度缓冲区似乎不起作用-OpenGL Shader

来自分类Dev

OpenGL累积缓冲区不起作用

来自分类Dev

绑定FBO(帧缓冲区对象)的成本有多高

来自分类Dev

多个缓冲区还是单个缓冲区?

Related 相关文章

  1. 1

    顶点数组对象和缓冲区对象之间的区别?

  2. 2

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

  3. 3

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

  4. 4

    如何在绑定顶点数组对象和缓冲区数据以在渲染时动态绘制时编写通用的 webgl 渲染循环?

  5. 5

    OpenGL复制顶点缓冲区对象

  6. 6

    何时清除顶点缓冲区对象

  7. 7

    何时清除顶点缓冲区对象

  8. 8

    OpenGL绘制顶点缓冲区对象

  9. 9

    使用单个顶点缓冲区还是多个顶点缓冲区?

  10. 10

    使用单个顶点缓冲区还是多个顶点缓冲区?

  11. 11

    OpenGL更新顶点数组/缓冲区

  12. 12

    更改顶点缓冲区对象中的顶点颜色

  13. 13

    为什么在调用glDrawArrays之前不需要绑定顶点缓冲区对象?

  14. 14

    为什么在调用glDrawArrays之前不需要绑定顶点缓冲区对象?

  15. 15

    顶点数组对象的绑定顺序

  16. 16

    同一顶点缓冲区对象中有多个网格?

  17. 17

    使用顶点缓冲区对象的最低OpenGL ES版本

  18. 18

    JOGL中具有顶点缓冲区对象的问题

  19. 19

    动态打包OpenGL顶点缓冲区对象的数据

  20. 20

    (DirectX 11)单个顶点缓冲区可以一次绑定到多个IA输入插槽吗?

  21. 21

    同时将单个缓冲区绑定到SSBO的多个索引目标

  22. 22

    对象绑定不起作用

  23. 23

    将单个缓冲区对象用于OpenGL中的多组数据

  24. 24

    OpenGL累积缓冲区不起作用

  25. 25

    OpenGL帧缓冲区深度不起作用

  26. 26

    深度缓冲区似乎不起作用-OpenGL Shader

  27. 27

    OpenGL累积缓冲区不起作用

  28. 28

    绑定FBO(帧缓冲区对象)的成本有多高

  29. 29

    多个缓冲区还是单个缓冲区?

热门标签

归档