我是刺客 2019-11-23 12:59 采纳率: 0%
浏览 508

OpenGL不能同时使用glDrawElements和glDrawArrays绘制两个不同的模型吗?

学习OpenGL的时候碰到一个奇怪的问题。刚学到了OpenGL可以使用glDrawElements或者glDrawArrays两种方式来绘制图元。我就想练习一下这两种不同的绘图方式。然后**在同一个渲染循环中**分别使用 glDrawElements绘制第一个模型,**glDrawArrays绘制第二个模型**,奇怪的问题出现了,只有glDrawArrays这个绘图有效,但是我把绘制第二个模型的代码段注释起来后,第一个也是可以正常绘制的,也就是说**在同一个渲染循环中不能同时使用glDrawElements和glDrawArrays这两个函数**?我猜测OpenGL应该不会犯这么傻的错误,但是我实在不知道我代码哪里出了问题,请大佬们帮忙看看到底是哪里出了问题。

下面贴上我的代码片段:


//准备第一个模型vbo,vao,ebo
GLuint vbo, ebo, vao;

glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertex), vertex, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);

glGenBuffers(1, &ebo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(index), index, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

glGenVertexArrays(1, &vao);

//准备第二个模型vbo,vao
GLuint sanvbo, sanvao;
glGenBuffers(1, &sanvbo);
glBindBuffer(GL_ARRAY_BUFFER, sanvbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(san), san, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);

glGenVertexArrays(1, &sanvao);

//渲染过程

//第一个模型:使用glDrawElements渲染
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
glBindVertexArray(vao);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 3 * sizeof(GLfloat), nullptr);
glEnableVertexAttribArray(0);
glDrawElements(GL_LINES, sizeof(index) / sizeof(GLuint), GL_UNSIGNED_INT, 0);

//第二个模型,使用glDrawArrays渲染
    glBindBuffer(GL_ARRAY_BUFFER, sanvbo);
    glBindVertexArray(sanvao);
    glVertexAttribPointer(0, 3, GL_FLOAT, false, 3 * sizeof(GLfloat), nullptr);
    glEnableVertexAttribArray(0);
    glDrawArrays(GL_TRIANGLES, 0, sizeof(san) / sizeof(float));

如上面代码段所示,如果我只单独的绘制一个模型,两个都可以正常绘制。但是一次绘制两个的时候就只有第二个被绘制出来了,第一个始终没有,不知道到底是哪里出了问题。

  • 写回答

1条回答 默认 最新

  • 胡默 2021-04-20 17:39
    关注

    你好 请问你解决这个问题了吗

    评论

报告相同问题?

悬赏问题

  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型