2012-02-22 5 views
0

최근에 OpenGL (Cocoa)을 배웠습니다. 그리고 여기서 문제가 생겼습니다. 내가 깊이 버퍼를 초기화하기 위해서 시도 할 때, 컴파일러는 여기 GDB: Program received signal: "EXC_BAD_ACCESS".를 반환하는 코드입니다 : 나는 깊이 테스트의 3 선을 제거하면이 깊이 버퍼 설정이 작동하지 않는 이유

-(id)init { 
[super init]; 

[self initGL]; 

return self; 
} 

-(void)initGL { 
glClearDepth(1.0);      // Depth buffer setup 
glEnable(GL_DEPTH_TEST);    // Enable depth testing 
glDepthFunc(GL_LEQUAL); 
} 
-(void) drawRect: (NSRect)bounds { 

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluPerspective(60.0f, 1.33333f, 0.1f, 100.0f); 

glTranslatef(-1.5f, 0.0f, -6.0f); 
glRotatef(10, 1.0f, 0.0f, 0.0f); 
glRotatef(10, 0.0f, 1.0f, 0.0f); 
glRotatef(10, 0.0f, 0.0f, 1.0f); 

glBegin(GL_TRIANGLES);    // Draw a triangle 
glColor3f(1.0f, 0.0f, 0.0f);  // Set color to red 
glVertex3f( 0.0f, 1.0f, 0.0f);  // Top of front 
glColor3f(0.0f, 1.0f, 0.0f);  // Set color to green 
glVertex3f(-1.0f, -1.0f, 1.0f);  // Bottom left of front 
glColor3f(0.0f, 0.0f, 1.0f);  // Set color to blue 
glVertex3f( 1.0f, -1.0f, 1.0f);  // Bottom right of front 

glColor3f(1.0f, 0.0f, 0.0f);  // Red 
glVertex3f(0.0f, 1.0f, 0.0f);  // Top of right side 
glColor3f(0.0f, 0.0f, 1.0f);  // Blue 
glVertex3f(1.0f, -1.0f, 1.0f);  // Left of right side 
glColor3f(0.0f, 1.0f, 0.0f);  // Green 
glVertex3f(1.0f, -1.0f, -1.0f);  // Right of right side 

glColor3f(1.0f, 0.0f, 0.0f);  // Red 
glVertex3f(0.0f, 1.0f, 0.0f);  // Top of back side 
glColor3f(0.0f, 1.0f, 0.0f);  // Green 
glVertex3f(1.0f, -1.0f, -1.0f);  // Left of back side 
glColor3f(0.0f, 0.0f, 1.0f);  // Blue 
glVertex3f(-1.0f, -1.0f, -1.0f); // Right of back side 

glColor3f(1.0f, 0.0f, 0.0f);  // Red 
glVertex3f(0.0f, 1.0f, 0.0f);  // Top of left side 
glColor3f(0.0f, 0.0f, 1.0f);  // Blue 
glVertex3f(-1.0f, -1.0f, -1.0f); // Left of left side 
glColor3f(0.0f, 1.0f, 0.0f);  // Green 
glVertex3f(-1.0f, -1.0f, 1.0f);  // Right of left side 
glEnd(); 

glFlush(); 
} 

는 응용 프로그램이 원활하게 열립니다.

답변

0

initGL이 호출 될 때 현재 만들어진 OpenGL 컨텍스트가 있습니까? 가장 쉬운 방법은 모든 호출을 init의 드로잉 함수 ()에 두는 것입니다. OpenGL에서 초기화 할 것이 거의 없기 때문입니다.

당신이 그 간단한 조언을 따라 그리기 기능과 관련된 모든 것을 할 수 있었다면 세계의 80 %가 OpenGL 문제를 사라지게 될 것입니다.

BTW : ID 모델보기 행렬에서 계속 실행 중이기 때문에 자르기 코드는 잘린 큐브 만 그립니다. 즉, 일부 클리핑 평면이 가까운 클리핑 평면보다 먼저 나옵니다. 스카이 박스가되는 것이 좋습니다.

관련 문제