我是刺客 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 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝