在OpenGL 4中绘制简单矩形

3
根据这个wikibook的说法,以前可以很容易地绘制一个简单的矩形(在创建和初始化窗口后): (来源)
glColor3f(0.0f, 0.0f, 0.0f);
glRectf(-0.75f,0.75f, 0.75f, -0.75f);

然而在OpenGL 3.2及更高版本中,此功能已被删除。

在OpenGL 4中,是否有其他简单、快速且不使用着色器或任何高级技术的方法来绘制一个固定颜色的矩形?


1
这个已经被弃用了,然而在OpenGL 4中。不,它已经从GL 3.2(核心配置文件)及以上版本中被删除了。“弃用”意味着“可用,但可能会在未来被删除”。 - Nicol Bolas
@NicolBolas 你说得完全正确... 我已经纠正了 :) - traveh
1个回答

3

有没有一些...方式...可以在不使用着色器的情况下绘制一个矩形呢?

是的。实际上,在我所知道的所有OpenGL版本中都支持:您可以通过启用裁剪测试和清除帧缓冲区来绘制填充矩形:

glEnable(GL_SCISSOR_TEST);
glScissor(x, y, width, height);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);

这与 glRect 不同的地方有多个:

  • 坐标是相对于窗口原点指定的像素。
  • 矩形必须轴对齐,不能以任何方式进行变换。
  • 大部分逐样本处理都被跳过。包括混合,深度和模板测试。

然而,我更倾向于劝阻您这样做。您最好是构建一个VAO,将要在屏幕上绘制的所有矩形都放入其中,然后使用非常简单的着色器将它们全部绘制出来。


这太棒了...我实际上想在OpenGL拾取“hack”中使用它(只是为了用特殊的“颜色”标记某个矩形),这使得像素坐标对我来说更好...而且在这种情况下性能不应该是一个问题,因为它只会很少发生...(对吧?) - traveh
如果性能不重要,那么当然可以使用最容易的方法。 - Yakov Galka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接