组合不同长度的线带?

时间:2018-10-25 07:10:37

标签: opengl opengl-3

现在,我正在以这种方式(简化代码)创建我的OpenGL几何对象-全部都是线框模型:

int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
glCompileShader(fragmentShader);
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
element.shaderProgram = glCreateProgram();
glAttachShader(element.shaderProgram, m_gl3VertexShader);
glAttachShader(element.shaderProgram, fragmentShader);
glLinkProgram(element.shaderProgram);
glGetProgramiv(element.shaderProgram, GL_LINK_STATUS, &success);
glDeleteShader(m_gl3VertexShader);
glDeleteShader(fragmentShader);

glGenVertexArrays(1, &element.VAO);
glGenBuffers(1, &element.VBO);
glBindVertexArray(element.VAO);

glBindBuffer(GL_ARRAY_BUFFER, element.VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(centerCrossVertices), centerCrossVertices, GL_STATIC_DRAW);

glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,3*sizeof(float),(void*)0);
glEnableVertexAttribArray(0);

glBindBuffer(GL_ARRAY_BUFFER, 0); 
glBindVertexArray(0); 
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

这是centerCrossVertices是一个固定长度的GL_LINE_STRIP。

后来它们是这样绘制的:

glUseProgram(shaderProgram);
glBindVertexArray(m_gl3ElementList[i].VAO);            
glDrawArrays(GL_LINE_STRIP,0,centerCrossVertices_size);

现在,我想显示一些更复杂的模型,该模型由几组线带组成,但是长度不同。意味着有一个对象本身并不使用一条线带,而是使用了其中几个可以包含不同数量顶点的线。

我的问题:是否必须为这些线带的每个调用的上层顺序,是否需要为每个线形创建单独的VBO / VAO?还是有一种组合多个线带的方法?如果是,怎么办?

1 个答案:

答案 0 :(得分:2)

  

现在,我想显示一些更复杂的模型,这些模型由几条线带组成,但是它们具有不同的长度

如果切换到索引绘制调用(如glDrawElements())并使用primitive restart,则可以在单个绘制调用中渲染所有带。