用于GUI的OpenGL 2d(正交)渲染,现代方式

时间:2016-12-26 13:27:48

标签: user-interface opengl 2d rendering lwjgl

我想在我的OpenGL程序中渲染GUI组件。它们仍然只是简单的纹理(vbo)矩形。 我想以正确的方式完成以下事情。

  1. 使用屏幕坐标绘图,或者至少使用不基于透视浮点的坐标系。例如:现在坐标系从-1f到1f(从屏幕的左侧到右侧)。使用屏幕/像素坐标会更符合逻辑。
  2. 如果这很容易,我希望当窗口(视口)调整大小时GUI不会拉伸。
  3. 我知道,之前您可以使用已弃用的函数glOrtho做很多事情。但是,既然我想以现代的方式做到这一点,希望对性能更好,我不知道如何开始。 在网上搜索后,我得出的结论是我必须使用着色器。我对着色器不太熟悉。 另一个问题是:使用着色器执行此操作时性能是否会提高?

1 个答案:

答案 0 :(得分:1)

使用现代OpenGL执行的操作与使用glOrtho设置正交投影矩阵基本相同:创建将坐标1:1映射到视口坐标并使用它转换坐标的转换(矩阵)。

例如,您可以创建vec2制服viewport并将其设置为视口宽度/高度。然后在顶点着色器中,您可以使用它将顶点像素坐标位置转换为范围[-1,1],就像这样

gl_Position = vec4(2*vpos.xy / viewport.xy - 1, 0, 1);