2012-11-07 2 views
4

기본 채우기 모드에서 와이어 프레임으로 프리미티브를 렌더링하려고합니다.glPolygonMode (GL_FRONT_AND_BACK, GL_LINES)가 작동하지 않습니다.

렌더링 코드 :

glClear(GL_COLOR_BUFFER_BIT); 
glClearColor(0.9f, 0.9f, 0.9f, 1); 
// reset matrix 
glLoadIdentity(); 
// fill display list 
glColor3c(150, 255, 255); 
glCallList(lDList); 
// wireframe display list 
glColor3f(0, 0, 0); 
glLineWidth(10); 
glPolygonMode(GL_FRONT_AND_BACK, GL_LINES); 
glCallList(lDList); 
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); 

표시 목록 작성 코드 :

lDList = glGenLists(1); 
glNewList(lDList, GL_COMPILE); 
    glBegin(GL_QUADS); 
     glVertex3i(-1, -1, 0); 
     glVertex3i(1, -1, 0); 
     glVertex3i(1, -1, -25); 
     glVertex3i(-1, -1, -25); 
    glEnd(); 
glEndList(); 

glColor3c 매크로 : 나는 검은 색으로 그려 시안 색 비행기를 얻을 것으로 기대하고 있습니다

#define glColor3c(r, g, b) glColor3f(r/255, g/255, b/255) 

프레임을 둘러싼 프레임이지만, 두 번째로는 디스플레이 목록을 렌더링 할 때마다 전체를 그려서 다른 프리미티브의 픽셀을 덮어 씁니다. 나는 그려야 할 비행기로 끝나지 만 그 검은 색 (내가 "버전"이라는 줄로 지정한 색깔)이다. 유용 할 수 있습니다

다른 정보는 내가 glEnable에 대한 호출하지 않는 MSVC++ 2010과 Windows 7에서, SDL을 사용하고 있다는 것입니다, 그래서 나는 더 이상 설정이가 혼란을 것 활성화되지 있습니다 , 또는 아마도 문제를 해결하십시오. 내 유일한 OpenGL 설정 코드는 프로젝션 및 모델 뷰 매트릭스를 설정 한 다음 디스플레이 목록을 만듭니다.

분명히 내 질문은 왜 내가 라인을 만드는 대신 원시를 채우는 디스플레이 목록을 그리는 것입니까? 이 문제를 어떻게 해결할 수 있습니까?

+0

왜 매크로입니까? 'glColor3ub()'의 문제점은 무엇입니까? – genpfault

+0

와우 나는 그것에 대해 결코 알지 못했다. (나는 아직도 OpenGL에서 newb이다.) 잘 사용하자. – Aaron

답변

10

OpenGL은 4.0 초 인수 modeglPolygonMode 용 문서에 따르면, 단지 하나의 GL_FILL, GL_POINT 또는 GL_LINE 수있다. 귀하의 예에서는 완전히 다른 열거 형 값인 GL_LINES을 전달합니다.

GL_LINES을 전달하는 것이 수신 된 모드가 예상 한 값이 아닌 경우 GL_FILL으로 다시 설정되도록 OpenGL에서 처리되는 것으로 의심됩니다.

참고 : glPolygonMode의 사양은 OpenGL 2.1을 기준으로 동일합니다.

+2

나는 아직 내 멍청한 프로그래밍 실수 인 것처럼 보이기 위해 나 자신을 축하한다. 두 매크로가 매우 비슷하지만 w/e라고 고맙다. – Aaron

+2

@ ForgiveMeI'MAN00b 내가이 같은 실수를 저질 렀을 때마다 1 달러가 있다면 ... :) – kevintodisco

관련 문제