OpenGL - gluOrtho2d 和 glLoadIdentity?

Posted

技术标签:

【中文标题】OpenGL - gluOrtho2d 和 glLoadIdentity?【英文标题】:OpenGL - gluOrtho2d and glLoadIdentity? 【发布时间】:2015-01-29 02:55:29 【问题描述】:

我开始使用 OpenGL。我不确定gluOrtho2dglLoadIdentity 如何一起发挥作用。特别是,我有以下代码,它应该在 10x10 显示器的中心绘制一个 2x2 正方形。

int main() 
    glutCreateWindow("Draw A Square");
    glutDisplayFunc(mydisplay);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(-5.0, 5.0, -5.0, 5.0);

    glutMainLoop();


void mydisplay() 
    glClearColor(1.0, 1.0, 1.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT);

    drawAUnitSquare();

    glFlush();


void drawAUnitSquare() 
    // glLoadIdentity();
    glBegin(GL_POLYGON);
        glColor3f(1.0, 0.0, 0.0);
        glVertex2f(-1, -1);
        glVertex2f(1, -1);
        glVertex2f(1, 1);
        glVertex2f(-1, 1);
    glEnd();

上面的代码有效。但是,如果我取消注释 drawAUnitSquare() 中的 glLoadIdentity();,则该正方形会填充整个视口。这里发生了什么?

【问题讨论】:

强制性注释 - 您正在使用即时模式,该模式已被弃用很长时间。开始可能会更容易一些,但最终你将不得不放弃它并开始学习现代 OpenGL,所以你不妨现在就开始学习。 【参考方案1】:

您忘记将矩阵模式切换回GL_MODELVIEW

只需在gluOrtho2D(-5.0, 5.0, -5.0, 5.0); 之后添加glMatrixMode(GL_MODELVIEW);

【讨论】:

以上是关于OpenGL - gluOrtho2d 和 glLoadIdentity?的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL之位图的绘制和gluOrtho2D等函数详解

Qt5中使用opengl时出现链接错误,关于gluOrtho2D

[图形学]Chapter 8.4 OpenGL 二维观察函数——视口

opengl中的正交投影和纹理坐标

OpenGL:使用 FBO 和视口偏移问题渲染到纹理

在opengl中显示图像