2012-11-19 253 views
7

我想繪製一個4行(左邊一個)的矩形。但無論我如何繪製(strip,loop,plain lines),結果都是右邊的 - 它在角落處缺少像素。OpenGL繪製矩形輪廓

|||||||||||  |||||||||| 
|   | |   | 
|   | |   | 
|||||||||||  |||||||||| 

有沒有辦法得到左手邊的結果?

編輯

,因爲它依賴於底層框架很多,但所有的繪圖調用只不過是與索引緩衝區指向4個頂點,沒有alpha測試glDrawElements更不能發佈代碼。

座標爲這個有趣的結果(iPhone模擬器)建議擺弄抵達後:

sample

公告僅左上角缺少一些矩形像素... 所有矩形繪製GL_LINES模式在單個繪製元素內調用。沒有其他東西被繪製。

EDIT 2

OpenGL FAQ問題14.100指出

的OpenGL並沒有提供一種機制來乾淨加入共享公共頂點也不乾淨帽端點線。

+6

怎麼樣你告訴我們,你的代碼? – datenwolf

+1

另外,你使用的是桌面OpenGL還是OpenGL ES? –

+0

我在iOS模擬器上使用OpenGL ES – Kimi

回答

12

改變你的座標系一下,讓你的線落在像素的中心:

rect

#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, 0, h, -1, 1); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

    // important 
    glTranslatef(0.5, 0.5, 0); 

    float offset = 40; 
    glColor3ub(255, 0, 0); 
    glBegin(GL_LINE_LOOP); 
    glVertex2f(0+offset, 0+offset); 
    glVertex2f(0+offset, h-offset); 
    glVertex2f(w-offset, h-offset); 
    glVertex2f(w-offset, 0+offset); 
    glEnd(); 

    glutSwapBuffers(); 
} 

int main(int argc, char **argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); 
    glutInitWindowSize(320,240); 
    glutCreateWindow("Rect"); 
    glutDisplayFunc(display); 
    glutMainLoop(); 
    return 0; 
}