【发布时间】: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 = 20和y = 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);
}
【问题讨论】:
-
Face Culling 是否启用?