在 OpenGL (C++) 中绘制条纹

Posted

技术标签:

【中文标题】在 OpenGL (C++) 中绘制条纹【英文标题】:Drawing stripes in OpenGL (C++) 【发布时间】:2013-05-12 20:35:13 【问题描述】:

我正在关注 C++ 中 OpenGL 的 xoax.net 教程,但我一直坚持使用 for 循环在美国国旗上绘制条纹。我只是得到一个蓝屏(因为我将背景颜色设置为蓝色)。这是“DrawStripes”函数的代码:

void DrawStripes() 
for (int x = 0; x < 13; ++x) 
    if (x % 2 == 0) 
        glColor3f(204/255, 0, 0);
     else 
        glColor3f(1, 1, 1);
    

    float fStartX = 0;
    float fEndX = 1;
    float fStartY = x * (1/13);
    float fEndY = (x + 1) * (1/13);

    if (x > 5) 
        fStartX = .76/1.9;
    
    glBegin(GL_QUADS);
    glVertex3f(fStartX, fStartY, 0);
    glVertex3f(fEndX, fStartY, 0);
    glVertex3f(fEndX, fEndY, 0);
    glVertex3f(fStartX, fEndY, 0);
    glEnd();
    

(我已经把这个函数放在'draw'函数中,所以不仅仅是我没有告诉它使用这个函数) 有什么想法吗?

--- 编辑 --- 以下是“绘制”和“初始化”函数:

void Draw() 
glClear(GL_COLOR_BUFFER_BIT);
    DrawStripes();
    glFlush();


void Initialize() 
glClearColor(0.0, 0.0, 0.5, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

【问题讨论】:

有什么问题?使用这段代码你会得到什么样的结果? 正如我在问题中所说,我只是蓝屏(因为我将背景颜色设置为蓝色) 发布更多代码。如何设置模型-视图-投影矩阵? 啊,对不起,我很快就阅读了你的问题。如果你放下for-lopp,你能画一条线吗? 哦,好吧,我想知道它之后的“f”是什么!谢谢 :) 做出回答,我不接受 【参考方案1】:

1/13 在 C++ 中为 0。去过也做过。对于浮点常量,您想使用 1.0f/13.0f。

【讨论】:

好收获。同样204/255 将产生值 0,因此颜色将是黑色而不是红色。 您只需要一个浮点操作数:1/13。够了。 问题是如果他不花时间真正理解他为什么这样做,它可能会成为 OP 的巫术编程(无关的 f 和 .0)。

以上是关于在 OpenGL (C++) 中绘制条纹的主要内容,如果未能解决你的问题,请参考以下文章

如何在OpenGL中将像素作为纹理绘制到多边形?

优化流媒体vbo openg

切换到使用交错 VBO - 编译但没有绘制 - opengl es 2.0

OpenGL不在C++中绘制三角形

C++ OpenGL/Glut 无法绘制

在我的 OpenGL C++ 项目中究竟应该在哪里添加我的 BMP 文件?在 Mac 上使用 Xcode