2014-09-26 8 views
1

OpenGL을 사용하여 간단한 GUI 응용 프로그램에서 작업하기 시작했습니다. 간단한 배경 쿼드 그리기는 많은 어려움을 낳고 나는 내가 잘못하고있는 것이 무엇인지 '고장났다'는 것을 발견 할 수 없습니다. 여기 내 배경 '쿼드'를 그리기에 대한 책임이 코드의 일부는 다음과 같습니다OpenGL C++ - 원치 않는 검은 색 삼각형이 표시됩니다.

static void Draw(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glColor3f(0.5f, 0.5f, 0.5f); 
    glBegin(GL_QUADS); 
    glVertex2f(-1.0f, -1.0f); 
    glVertex2f(1.0f, -1.0f); 
    glVertex2f(-1.0f, 1.0f); 
    glVertex2f(1.0f, 1.0f); 
    glEnd(); 
    glutSwapBuffers(); 
} 


int main(int argc, char **argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); 
    glutInitWindowSize(600, 600); 
    glutCreateWindow("Pro Sound"); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glutDisplayFunc(Draw); 
    glutKeyboardFunc(keyPressed); 
    glutKeyboardUpFunc(keyUp); 

    glutMainLoop(); 
} 

출력은 회색 쿼드처럼 보이지만, (오른쪽)의 상단에 정점을 가진 검은 색 삼각형이 센터, 오른쪽 위 코너 및 오른쪽 하단 코너. 그래서 내 배경은 삼각형 이빨 픽셀 괴물에 물린 것처럼 보입니다. 문제는 최근에 제대로 작동했습니다. 텍스처를 추가하고 위치를 잘 잡을 수도 있습니다.

답변

4

쿼드 정점을 잘못된 순서로 그리는 것처럼 보입니다. 정점은 기본적으로 다각형의 둘레를 따라 반 시계 방향으로 정렬되어야합니다.

은 그래서 당신이 가진 것은 : 만드는

(-1.0f, -1.0f) Bottom-Left 
(1.0f, -1.0f) Bottom-Right 
(-1.0f, 1.0f) Top-Left 
(1.0f, 1.0f) Top-Right 

는 :

enter image description here

은 당신이 원하는 경우 :

(-1.0f, -1.0f) Bottom-Left 
(1.0f, -1.0f) Bottom-Right 
(1.0f, 1.0f) Top-Right 
(-1.0f, 1.0f) Top-Left 

생성되는 :

enter image description here

Face Culling

+0

너무 간단하면서도 계몽. 내 구세주 께 감사드립니다. 경례! – Bizarre

+0

그는 GL_QUADS를 사용하여 두 개의 삼각형이 아닌 쿼드를 그립니다. –

+0

모든 현대 GPU는 삼각형 만 사용하므로 드라이버에 의해 두 삼각형으로 삼각 분할됩니다. GPU가 쿼드로 작업한다면 그는 본 아티팩트를 보지 못했을 것입니다. – ssell

3

대신 GL_QUADS를 사용하여 좌표를 변경 Primitive - Quads, 좌표를 유지하고 GL_TRIANGLE_STRIP를 사용을 참조하십시오.

나는 상당히 특정이다 GL_QUADS은 사용하지 않는 것이 바람직하고, GL_TRIANGLE_STRIP 또는 GL_TRIANGLE_FAN을 사용하는 것이 좋습니다.

GL_QUADS을 사용해야하는 유일한시기는 직접 모드에 있고 성능이 중요하지 않은 작은 프로그램을 스케치하는 경우입니다. (그 중 하나일지도 모르지만, 보강과 좋은 측정을 위해 나는 항상 GL_TRIANGLE_STRIP 또는 GL_TRIANGLE_FAN을 사용합니다.)

+0

예, Quads는 3.0에서 사용되지 않으며 3.1에서 완전히 제거되었습니다. 이것은 좋은 지적입니다. – ssell

+0

즉시 들어갈 수 있습니다. 시간 내 주셔서 감사합니다. 알겠습니다. – Bizarre

관련 문제