openGL:带着色器的线条

Posted

技术标签:

【中文标题】openGL:带着色器的线条【英文标题】:openGL: lines with shaders 【发布时间】:2012-07-21 17:15:16 【问题描述】:

如何使用着色器创建一条线(可能是彩色的)?我正在使用可编程管道,并且我是 openGL 的初学者。我找不到有关如何使用着色器绘制线条的示例。我想我必须将 VAO(顶点数组对象)加载到着色器中,但是然后呢?我应该使用哪些功能以及如何使用?

【问题讨论】:

你知道怎么画三角形吗?真的没有什么不同,你只需指定 GL_LINES 而不是 GL_TRIANGLES 到 glDrawArrays/glDrawElements 【参考方案1】:

首先,设置使用shaderprogram。然后使用glDrawArrays(或元素,如果您的数据已编入索引)使用 mode=GL_LINES 或其他线条绘制模式之一绘制线条。

以下是两端不同颜色的二维线的代码示例。如果着色模式设置为平滑,OpenGL 将沿线插入颜色。

struct LineSegment_t

  float x1, y1;
  float r1,g1,b1,a1;
  float x2, y2;
  float r2,g2,b2,a2;
;

int num_verts = lines.size()*2;
glBindVertexArray( line_vao ); // setup for the layout of LineSegment_t
glBindBuffer(GL_ARRAY_BUFFER, LineBufferObject);
glBufferData(GL_ARRAY_BUFFER, sizeof(LineSegment_t)/2 * num_verts, &lines[0], GL_DYNAMIC_DRAW);
glDrawArrays(GL_LINES, 0, num_verts );

如果您需要更大的灵活性,您可以通过从线条端点创建一个矩形(4 个点)来使用三角形绘制线条。在 2D 中,您可以通过使用所需线的法线/垂直线 (-y,x) 平移端点来创建 4 个点。在 3D 中,您需要确保三角形与广告牌中的相机对齐。

【讨论】:

有了GL_LINES,顶点着色器还是只输出gl_Position吗?如何转换线段中的第二个顶点?

以上是关于openGL:带着色器的线条的主要内容,如果未能解决你的问题,请参考以下文章

带和不带着色器的 VBO OpenGL C++

如何避免使用着色器在 OpenGL 中消失线?

跨多个着色器的 OpenGL 统一

带有顶点/片段着色器的光。使用不同的变量。 (openGL)

OpenGL顶点着色器的NormalMatrix?

OpenGL着色器的显式与自动属性位置绑定