如何在 OpenGL 3.2 中绘制全屏四边形?

Posted

技术标签:

【中文标题】如何在 OpenGL 3.2 中绘制全屏四边形?【英文标题】:How to draw a full screen quad in OpenGL 3.2? 【发布时间】:2012-12-24 05:20:16 【问题描述】:

我在尝试让 OpenGL 3.2 工作时遇到问题,在花了几个小时试图找出问题所在后,我意识到它不支持 glBegin。我在引擎中使用该命令大约 50-100 次来绘制全屏四边形和 GUI 元素。那么使用 OpenGL 3.2 绘制矩形的简单方法是什么?我真的必须创建一个顶点缓冲区、片段着色器和顶点着色器来做这么简单的事情吗?!

【问题讨论】:

如果你想使用 modern api 那么是的,你将不得不创建顶点和片段着色器......固定管道已经消失,除非你使用兼容性扩展. 您始终可以恢复到兼容性配置文件,但使用较新版本时您一无所获。此外,使用固定管道获取东西也没有意义。可编程管道不是未来,它已经在这里。 【参考方案1】:

我真的必须创建一个顶点缓冲区、片段着色器和顶点着色器来做这么简单的事情吗?!

是的,Core 配置文件中没有免费赠品。

【讨论】:

@SteveDeFacto:不是真的。编写着色器比处理固定功能管道中涉及的所有状态管理要少得多。使用着色器,它只是一个简单的glUseProgram,固定管道有大量的glEnableglDisable 调用,至少设置投影和模型视图,设置十几个 glTexEnvi 调用来获得正确的纹理,等等。 最终会更好,但转换我的整个图书馆会很糟糕。 @SteveDeFacto 转换旧东西有点麻烦,但值得付出努力。我确实摆脱了所有固定管道的东西,最近完全放弃了兼容模式。我会说这只是让事情变得更清洁和更简单。更不用说相当不错的性能提升了。 @Grimmy 实际上,我一直在努力让它工作,但无论我做什么都不会。我相信是CG造成的,但我不能不使用CG……也许你会知道我做错了什么? ***.com/questions/14038001/… 什么意思?我确实用代码发布了另一个问题。我在上面链接了它^

以上是关于如何在 OpenGL 3.2 中绘制全屏四边形?的主要内容,如果未能解决你的问题,请参考以下文章

Opengl/glsl 试图为绘制四边形编写着色器,但不确定如何处理屏幕纵横比的变化

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

如何在 C++ 中将位图绘制为 OpenGL 纹理?

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

如何为 OpenGL 文本渲染计算字符映射中的最佳字形边界

Android OpenGL基础相机预览及滤镜