2

我可以通过指定来绘制文本glRasterPos2i(WindowX, WindowY);,它可以在我的窗口内的指定位置绘制文本。

例如:glPrint(150, 150, "dgdg"); 我的视口在哪里0, 0, 800, 500

但是,对正方形做同样的事情是行不通的。所以我尝试再次设置我的视图:

const int W = 800, H = 500;
    glViewport(0, 0, W, H);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, W, H, 0, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glColor3f(1.0f, 1.0f, 0.0f);
    glBegin(GL_QUADS);
        glVertex2f(100, 100);
        glVertex2f(150, 100);
        glVertex2f(150, 150);
        glVertex2f(100, 150);
    glEnd();

但我的方格从未出现过:l
我禁用了 DepthTesting 和 GL_RECTANGLE_2D。还是不行。我究竟做错了什么?如何让它在窗口坐标处绘制而不是指定 1.0f 等?

4

2 回答 2

2

在这里工作得很好:

#include <GL/glut.h>

void display()
{
    glClear( GL_COLOR_BUFFER_BIT );

    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    double w = glutGet( GLUT_WINDOW_WIDTH );
    double h = glutGet( GLUT_WINDOW_HEIGHT );
    glOrtho( 0, w, h, 0, -1, 1);

    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();

    glColor3f(1.0f, 1.0f, 0.0f);
    glBegin(GL_QUADS);
        glVertex2f(100, 100);
        glVertex2f(150, 100);
        glVertex2f(150, 150);
        glVertex2f(100, 150);
    glEnd();

    glutSwapBuffers();
}

int main( int argc, char **argv )
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
    glutInitWindowSize( 640, 480 );
    glutCreateWindow( "GLUT" );
    glutDisplayFunc( display );
    glutMainLoop();
    return 0;
}
于 2013-06-17T21:43:40.933 回答
1

您可以glFlush()在 OpenGL 代码之后添加以要求缓冲区中的图形刷新到窗口。

如需参考glFlush(),请查看此链接

于 2013-06-17T21:43:40.673 回答