【问题标题】:OpenGL GL_QUAD_STRIP is fading with glColor3f()OpenGL GL_QUAD_STRIP 与 glColor3f()
【发布时间】:2011-03-26 04:07:43
【问题描述】:

我正在使用 glColor3f() 和 GL_QUAD_STRIP 绘制 2 个彼此相邻的正方形,但似乎它们正在淡化 2 个正方形之间的颜色,有什么办法可以防止这种情况发生吗?还是 GL_QUAD_STRIP 根本不适合这种事情?更合适的是 GL_QUADS,但这太容易了。

glBegin(GL_QUAD_STRIP);

glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glColor3f(0.0f, 0.0f, 0.0f);
glVertex3f(2.0f, 0.0f, 0.0f);
glVertex3f(2.0f, 1.0f, 0.0f);
glColor3f(1.0f, 1.0f, 1.0f);

glEnd();

【问题讨论】:

  • 你应该张贴截图。
  • 顺便说一句,你的 GL 版本是什么?
  • 我使用的是 freeglut 2.6.0
  • err... freeglut 不是您的 GL 版本。它只是一个实用工具包。
  • 我知道。但我不知道如何找到我的 GL 版本。而且,我认为这甚至都不重要。

标签: opengl


【解决方案1】:

一般来说,颜色附加到每个顶点,而不是每个四边形。因此,由于 2 个顶点在条带的 2 个四边形之间共享,因此您可以获得用于两者的颜色(以及您正在观察的“褪色”。这称为插值)。

现在,在您的特定情况下,存在一种 OpenGL 模式可以提供帮助:您可以告诉 OpenGL 根本不插入颜色,而只获取每个图元(此处为四边形)的最后一个顶点的颜色原始人。

这是通过the following state完成的:

glShadeModel(GL_FLAT);

【讨论】:

  • 谢谢,但这对我的代码不起作用。我把它放在 glBegin() 之前,它仍然导致锯齿状边缘。
  • @maify:那么你需要提供更多关于你如何渲染的数据。 (如果 OpenGL 有任何 glGetError 错误)。
【解决方案2】:

每次调用 glColor3f 时,它都会将该颜色与每个顶点相关联,直到您使用不同颜色进行不同的 glColor3f 调用。我会使用 GL_QUADS 并像这样将它分解成两个独立的四边形(我相信是顺时针顺序):​​

glBegin(GL_QUADS);

glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);

glColor3f(0.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(2.0f, 1.0f, 0.0f);
glVertex3f(2.0f, 0.0f, 0.0f);

glEnd();

【讨论】:

    猜你喜欢
    • 2019-05-29
    • 2014-11-22
    • 2020-01-21
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多