2012-11-19 3 views
7

4 개의 선 (왼쪽)으로 직사각형을 그리려합니다. 그러나 내가 (스트립, 루프, 일반 선을 그리는) 결과가 오른쪽면에 있습니다. 즉, 모서리에 픽셀이 없습니다.OpenGL 그리기 직사각형 윤곽

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

왼쪽 결과를 얻는 방법이 있습니까?

편집

는 기본 프레임 워크에 많이 의존하지만, 모든 통화는 4 개 정점, 아니 알파 테스트에 인덱스 버퍼를 가리키는 glDrawElements보다 더 아무것도 그릴 수 있기 때문에 코드를 게시 할 수 없습니다.

이 흥미로운 결과 (아이폰 OS 시뮬레이터)에 도착 제안 좌표로 바이올린을 켜는 후 :

sample

공지 사항 만 왼쪽 상단 모서리에 약간의 직사각형 픽셀이 없습니다 ... 모든 사각형은 GL_LINES 그려집니다 모드에서 호출합니다. 다른 것은 그려지지 않습니다.

편집 2

OpenGL FAQ 질문 OpenGL을 깔끔하게 공통의 정점을 공유하거나 깨끗하게 엔드 포인트를 모자에 라인을 결합하는 메커니즘을 제공하지 않습니다

것을 14.100 상태. 당신의 선을 넘어 있도록

+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; 
}