二维形状坐标与现代 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.;
我正在尝试在现代 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.;