c++ - openGL:带着色器的线条

标签 c++ opengl graphics glsl shader

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

最佳答案

首先,设置使用着色器程序。然后使用 glDrawArrays 绘制线条(或元素,如果您的数据被索引)模式=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 );

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

关于c++ - openGL:带着色器的线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11594247/

相关文章:

c++ - Gnome 平台上的基础开发

c++ - 如何删除给定索引之间的所有元素?

android - 在 Android 中从 RectF 转换为 Rect 的最佳方法是什么?

用于绘制图形的 C++ 库

iphone - OpenGL 2D View 的最小样板代码是什么?

android - Qt on Android——C++代码是否在Dalvik虚拟机中运行

opengl - 交错顶点数组对象不显示颜色

c - 用 C 编写着色器错误检查器

visual-c++ - 在 OpenGL 中的纹理顶部显示 2D 形状

c++ - 为什么更改数组的第 0 个索引比第 0 个索引更改更多?