OpenGL:GL_QUADS 不绘制正方形

Posted

技术标签:

【中文标题】OpenGL:GL_QUADS 不绘制正方形【英文标题】:OpenGL: GL_QUADS does not draw square 【发布时间】:2012-08-15 14:29:21 【问题描述】:

我试图在屏幕上画一个正方形,但它显然画了一个矩形。

这是我的渲染代码:

glClear(GL_COLOR_BUFFER_BIT);
glTranslatef(0,0,-0.1);
glBegin(GL_QUADS);
    glVertex3f(0,0,0);
    glVertex3f(1,0,0);
    glVertex3f(1,1,0);
    glVertex3f(0,1,0);
glEnd();

SDL_GL_SwapBuffers();

以及 OpenGL 初始化代码:

glClearColor(0,0,0,0.6f);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30,640.0/480.0,.3f,200.0);
glMatrixMode(GL_MODELVIEW);

为什么会这样?

【问题讨论】:

也许您的屏幕水平 dpi 与垂直 dpi 不匹配? 屏幕的dpi不会影响他的截图。 我不知道我做了什么,但它现在可以正常绘制正方形。我没有改变任何东西,所以我不知道出了什么问题。我猜只是宇宙在欺骗我:( 你的窗口尺寸是 640x480 吗? 【参考方案1】:

我在您的代码中没有看到您设置 glViewport 的任何地方。我宁愿在你的 init 方法中写这样的东西:

glViewport(0,0,640,480);        // Reset The Current Viewport

glMatrixMode(GL_PROJECTION);    // Select The Projection Matrix
glLoadIdentity();               // Reset The Projection Matrix

// Calculate The Aspect Ratio Of The Window
gluPerspective(30.0f,(GLfloat)640/(GLfloat)480,0.3f,200.0f);

glMatrixMode(GL_MODELVIEW);     // Select The Modelview Matrix
glLoadIdentity();       

还可以查看第二个Nehe tutorial,它将帮助您从 OpenGL 开始学习非常基本的东西,例如绘制三角形、正方形等图元...

【讨论】:

谢谢。我不知道 glViewPort 做了什么,但转换为 GLfloat 对我有用。 好的,我刚刚读到,当 OpenGL 上下文首次附加到窗口时,宽度和高度设置为该窗口的尺寸,因此可能没有必要。至于 glViewport 命令,它定义了从标准化设备坐标(即应用了透视分割的投影后矩阵坐标)到窗口坐标的转换【参考方案2】:

尝试使用gluOrtho2D 生成正确的正交投影矩阵,在您的情况下为gluOrtho2D(0,640,0,480),这是假设您想要一个 2D 而不是 3D 的正方形。

这当然会将您的坐标系从 (0,1),(0,1) 更改为 (0,640),(0,480)。

【讨论】:

以上是关于OpenGL:GL_QUADS 不绘制正方形的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL - 004通过简单案例介绍绘制渲染流程

OpenGL索引缓冲区对象元素顺序绘制不正确

使用 OpenGL 的 C++ - 绘制正方形

在OpenGL中用极坐标绘制正方形

OpenGL - 用纹理绘制正方形的最简单方法

OpenGL 实现正方形绘制,键盘控制移动(三)