2012-08-15 223 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)。