关于在opengl上绘制矩形的问题

Question about drawing rectangle on opengl

题目要求在键盘上按"r"时绘制矩形。我尝试编写一个函数来绘制这个矩形。字符回调函数是正确的,它给我的反馈是我已经按了"r"。我不知道如何使三角形出现。我在函数中添加了这一行glfwSwapBuffers(window),但它仍然无法正常工作。提前感谢您的帮助。

#define GLEW_STATIC
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>
#include <vector>
#include <cmath>
#include <iostream> 

#define WINDOW_WIDTH 900
#define WINDOW_HEIGHT 600

float frameBuffer[WINDOW_HEIGHT][WINDOW_WIDTH][3];
bool mask[WINDOW_HEIGHT][WINDOW_WIDTH];
GLFWwindow *window;
void display()
{
    glColor3f(1.0, 0.0, 0.0);
    glBegin(GL_POLYGON);
    glVertex2i(50, 90);
    glVertex2i(100, 90);
    glVertex2i(100, 150);
    glVertex2i(50, 150);
    glEnd();
    glFlush();
}
void CharacterCallback(GLFWwindow* lWindow, unsigned int key)
{
    if(char(key) == 'r')
       display();
}


 void Init()
{
    glfwInit();
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
    window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "- <xx>", NULL, NULL);
    glfwMakeContextCurrent(window);
    glfwSetCharCallback(window, CharacterCallback);
    glewExperimental = GL_TRUE;
    glewInit();
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    ClearFrameBuffer();
}

int main()
{   
    Init();
    while (glfwWindowShouldClose(window) == 0)
    {
        glClear(GL_COLOR_BUFFER_BIT);
        Display();
        glFlush();
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

当你按glBegin/glEnd序列绘制时,每个顶点坐标都由当前视图矩阵和当前投影矩阵变换。
绘制场景时,在变换之后,几何体的坐标必须在剪辑 space 中,分别归一化设备 space。归一化设备 space 是一个立方体积,左下在前 (-1, -1, -1),右上在远 (1, 1, 1)。此立方体中的所有几何体在视口上都是 "visible"。此立方体之外的所有几何体都被剪裁。
如果要使用 window ("pixel") 坐标绘制场景,则必须设置 orthographic projection by glOrtho。在正交投影中,视图 space 坐标线性转换为剪辑 space 坐标。这意味着正交投影矩阵可用于缩放视图 space 坐标。例如:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, (GLdouble)WINDOW_WIDTH, (GLdouble)WINDOW_HEIGHT, 0.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);

您可以在 Init() 结束时执行此操作。