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 不绘制正方形的主要内容,如果未能解决你的问题,请参考以下文章