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

时间:2019-09-06 23:05:52

标签: c++ opengl opengl-compat

当我在键盘上按“ 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;
}

1 个答案:

答案 0 :(得分:1)

当您按glBegin / glEnd序列进行绘制时,每个顶点坐标将由当前视图矩阵和当前投影矩阵进行变换。
绘制场景时,在进行转换之后,几何的坐标必须位于剪辑空间或归一化的设备空间中。规范化的设备空间为立方体积,其左下前(-1,-1,-1)和右上前远(1、1、1)。此多维数据集中的所有几何图形在视口上都是“可见的”。裁剪出该立方体中的所有几何图形。
如果要使用窗口(“像素”)坐标绘制场景,则必须通过orthographic projection设置glOrtho。在正交投影中,视图空间坐标被线性转换为剪辑空间坐标。这意味着可以使用正交投影矩阵来缩放视图空间坐标。例如:

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

您可以在Init()的末尾执行此操作。