二维形状坐标与现代 Opengl

2D Shape Coordinates with Modern Opengl

我正在尝试在现代 opengl 中渲染一系列 2D 形状(矩形、圆形)等,希望不使用任何变换矩阵。我希望我能够为 2 个三角形的矩形指定坐标,如下所示:

float V[] = { 20.0, 20.0, 0.0, 
              40.0, 20.0, 0.0,
              40.0, 40.0, 0.0, 
              40.0, 40.0, 0.0,
              20.0, 40.0, 0.0,
              20.0, 20.0, 0.0 }

你可以看到顶点坐标是在视口中指定的? space(我相信这就是它的名字)。现在,当它被 opengl 渲染时,它不起作用,因为剪辑 space 从 -1.0 变为 1.0,原点在中心。

我处理这个问题的正确方法是什么?我最初认为将 glClipControl 调整到左上角和 0 到 1 会起作用,但它没有。将剪辑控件设置为左上角和 0 到 1 时,原点仍位于中心,但它确实允许 Y 轴在向下移动时增加(这是一个开始)。

理想情况下,我希望让 opengl 的左上角为 0.0,0.0,右下角为 1.0, 1.0,然后我只是标准化每个顶点位置,但我不知道如何获得 opengl使用那种类型的坐标系。

在顶点着色器中无需矩阵即可轻松完成这些变换:

// From pixels to 0-1 
vPos.xy /= vResolution.xy;

// Flip Y so that 0 is top 
vPos.y = (1.-vPos.y);

// Map to NDC -1,+1
vPos.xy = vPos.xy*2.-1.;