如何使用 Legacy OpenGL 绘制不同颜色的线条?

Posted

技术标签:

【中文标题】如何使用 Legacy OpenGL 绘制不同颜色的线条?【英文标题】:How to draw different colored line strips with Legacy OpenGL? 【发布时间】:2019-05-03 04:48:58 【问题描述】:

所以,我有一个由 x 和 y 坐标对组成的矩阵,矩阵中的每一行代表一条路线,我想在 OpenGL 中将其表示为 GL_LINE_STRIP。问题是我想每次都用不同的颜色画线。我以为我的代码可以工作,但不知何故,OpenGL 一直在用相同的颜色绘制 line_strips。

我认为这样就可以了,xy 是坐标对的矩阵:

static void Redraw(void)

    ...
    glClear(GL_COLOR_BUFFER_BIT);
   //drawing routes
    srand(time(NULL));
    for(int i = 0; i < xy.size(); i++)
       
        vector<pair<int, int>> route = xy[i];
        double r = ((double) rand() / (RAND_MAX));
        double g = ((double) rand() / (RAND_MAX));
        double b = ((double) rand() / (RAND_MAX));
        glColor3f(r,g,b);
        glLineWidth(2);
        glBegin(GL_LINE_STRIP);

        for(int j = 0; j < route.size();j++)
            glVertex2d(route[j].first, route[j].second);

        glEnd();
    
    glFlush();

和我的主要:

int main(int argc,char *argv[])

    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(1080,720);
    glutInitWindowPosition(0,0);
    glutCreateWindow("h_constante");
    gluOrtho2D(0,1000,0,1000);
    glutDisplayFunc(Redraw);
    glutMainLoop();


    return 0;

【问题讨论】:

实际上,这应该可以。 (OT:我会将srand(time(NULL)); 移动到main()。)您是否尝试在glBegin() 之后移动glColor3f()?虽然医生。 khronos 上的glColor() 声明当前颜色可以随时更新。,但我没有更好的主意。 明确一点:我想每次都用不同的颜色画线。我假设你的意思是:我想画线条 b> 每次都有不同的颜色? 你是对的,这部分代码其实是正确的。我只是想通了,我将所有节点推入矩阵的第一行,所以我实际上是在绘制一个大的 GL_LINE_STRIP。非常感谢您的帮助! 请注意。我的 OpenGL 项目总是以蓝屏开始。 (用蓝色清除是唯一的事情,我从一开始就开始工作......);-)(而且,大多数时候,这些都是像你一样的问题......) 【参考方案1】:

我将所有节点推入矩阵的第一行,所以我实际上是在绘制一个大的 GL_LINE_STRIP。非常感谢大家的帮助!

【讨论】:

以上是关于如何使用 Legacy OpenGL 绘制不同颜色的线条?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 LEGACY OPENGL 颜色反转了?

在 OpenGL 3+ 中有效地绘制多边形(每个多边形一种颜色)

OpenGL 绘制 2个不同颜色的三角形

OpenGL ES 3.0 Java绘制带有颜色数组的顶点(每个顶点的颜色不同)

在OpenGL中将深度映射到颜色

无法使用 VAO 和 EBO (openGL) 绘制多个对象