c++ - 用窗口坐标绘制正方形

标签 c++ opengl

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

例如:glPrint(150, 150, "dgdg"); 其中我的视口(viewport)为 0, 0, 800, 500

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

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();

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

最佳答案

这里工作正常:

#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;
}

关于c++ - 用窗口坐标绘制正方形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17157258/

相关文章:

c++ - OpenGL glOrtho 设置匹配窗口大小

opengl - 设置 OpenGL : Why am I getting these errors? 为什么 Visual Studio 卡住?

c++ - 在 emplace_back() 中初始化内部结构

c++ - opencv有类似matlab中size和bwperim的功能吗?

c++ - 源文件中成员函数模板的显式特化

c++ - OpenGL glTexParameteri错误0x0500

c++ - OpenGL 垂直同步让渲染更快

python - 将数据传递给 PyOpenGL 中的 glBufferData,空屏幕

c++ - 在 Intellisense 中评估枚举中的字符串常量

c++ - 致命信号 4 SIGILL,不知道 eclipse 和 cocos2d-x 发生了什么