2D形状坐标与现代Opengl

2D Shape Coordinates with Modern Opengl

本文关键字:Opengl 坐标 2D      更新时间:2023-10-16

我试图在现代opengl中渲染一系列2D形状(矩形,圆形)等,希望不使用任何变换矩阵。我希望我能够为一个由两个三角形组成的矩形指定坐标,像这样:

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 }

你可以看到顶点坐标是在视口中指定的?太空(我想它就是这么叫的)。现在,当它被opengl渲染时,它不起作用,因为剪辑空间从-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.;