【问题标题】:How to make the height coordinates start from the top?如何使高度坐标从顶部开始?
【发布时间】:2021-04-17 20:48:01
【问题描述】:

我正在尝试为一款游戏制作叠加层。我需要这样做,以便我可以使用法线坐标来绘制对象,而不是 -1 和 1。也就是说,左边必须从零开始,右边必须等于窗口宽度。身高也是如此。顶部应从零开始,底部应等于窗口的高度。但由于某种原因,我并没有完全成功。

我使用

获得视口的大小
GLfloat viewport [4];
glGetFloatv (GL_VIEWPORT, viewport);

视口数组中有四个值

viewport[0] = 0
viewport[1] = 0
viewport[2] = 1366
viewport[3] = 715

然后我执行以下操作

glOrtho(viewport[0], viewport[2], viewport[3], viewport[1], -1, 1);

然后画一个矩形

glRectf(20, 20, 68, 68);

理论上应该在左上角画一个缩进20像素的矩形,但是根本看不到。但是,如果您交换viewport[3]viewport[1],则会出现矩形,尽管位置不正确。在左下角。

使用坐标x = 20y = 20时如何使矩形绘制在左上角?

完整代码

BOOL WINAPI __SwapBuffers(HDC hDC)
{
    GLfloat viewport[4];
    glGetFloatv(GL_VIEWPORT, viewport);

    glPushAttrib(GL_ALL_ATTRIB_BITS);

    glDisable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, 0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(viewport[0], viewport[2], viewport[3], viewport[2], -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glDisable(GL_DEPTH_TEST);

    glRectf(20, 20, 68, 68);

    glPopAttrib();
    return _SwapBuffers(hDC);
}

【问题讨论】:

标签: c++ winapi opengl


【解决方案1】:

OpenGL 2.1 API Specification - 2.10 Rectangles:

Rect (x1, y1, x2, y2);

与以下命令序列完全相同:

Begin(POLYGON);
Vertex2(x1, y1);
Vertex2(x2, y1);
Vertex2(x2, y2);
Vertex2(x1, y2);
End();

因此,启用Face Culling 时可以丢弃几何。禁用面部剔除 (glDisable(GL_CULL_FACE )) 或设置正确的缠绕顺序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 2013-01-15
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    相关资源
    最近更新 更多