2012-08-15 185 views
3

我想在屏幕上绘制正方形,但它清楚地绘制了一个矩形。OpenGL:GL_QUADS不绘制正方形

这是我的渲染代码:

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

这究竟是为什么?

+0

也许您的屏幕水平dpi不匹配垂直dpi? – 2012-08-15 14:31:48

+1

屏幕的dpi不会影响他的屏幕截图。 – Tim 2012-08-15 14:33:37

+2

我不知道我做了什么,但它现在正常绘制方块。我没有改变任何东西,所以我不知道什么是错的。只是宇宙拖动我我猜:( – 2012-08-15 14:34:40

回答

6

我没有看到你的代码在哪里设置了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非常基本的东西,如绘制图元,如三角形,正方形等...

+0

谢谢。我不知道什么glViewPort做的,但投给GLfloat做了我的诡计。 – 2012-08-15 21:03:46

+0

好吧,我刚刚读过,当OpenGL上下文首先被附加到一个窗口,宽度和高度被设置为该窗口的尺寸,所以它可能是没有必要的。至于glViewport命令,它定义了从规范化设备坐标的变换(即后投影矩阵坐标与应用透视分割)到窗口坐标 – tiguero 2012-08-15 21:35:28

0

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

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