C ++ OpenGL配备了ortographic相机

时间:2016-04-09 15:50:43

标签: c++ opengl

我试图将OpenGL设置为渲染2D内容。

int width = 640, height = 480;
void render() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glClearColor(0.1f, 0.1f, 0.1f, 0.1f);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    int w, h;
    glfwGetFramebufferSize(window, &w, &h);
    glOrtho(0.0, w, h, 0.0, -1.0, 10.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    //RECTANGLE
    glColor4f(0, 0, 0, 0);
    glBegin(GL_QUADS);
    glVertex2f(0,0);
    glVertex2f(width, 0);
    glVertex2f(width, height);
    glVertex2f(0, height);
    glEnd();
}

当我现在调整窗口大小时,矩形会改变它的大小(以像素为单位)而不是保持它的大小640x480它会变小,为什么会这样?

据我了解glOrthoglOrtho(0.0, w, h, 0.0, -1.0, 10.0);应设置一个正交相机,用窗口大小填充窗口。

希望澄清。提前致谢

1 个答案:

答案 0 :(得分:1)

您没有更新视口转换。你也应该添加它:

int w, h;
glfwGetWindowSize(window, &w, &h);
glViewport(0, 0, w, h); // <------------ THIS
glOrtho(0.0, w, h, 0.0, -1.0, 10.0);
  

据我所知glOrtho glOrtho(0.0,w,h,0.0,-1.0,10.0);应该设置一个正交相机,用窗口的大小填充窗口。

没有。 glOrtho设置一个摄像头,使(0,0)映射到左上角,(w,h)映射到视口的右下角 。由于您没有更改视口,(宽度,高度)现在会映射到视口矩形内的某处,使四边形更小。