2013-01-07 1 views
0

사이트를 통해 OpenGL을 배우려고합니다. 먼저 예제를 본 다음 그것을 보지 않고 직접 시도해 봅니다. 그렇게하면 학습이 향상되는 것에 확신을 가질 수 있습니다. 그러나 20 일이 지난 지금부터 OpenGL 튜토리얼을 보았습니다. 기본적인 기본 지식을 알고 있으며, 매우 기본적인 프로그램을 만들려고 할 때 실패합니다.오픈 GL 학습

나는 UIView 하위 클래스가 있으며 나는 opengl을 사용하여 간단한 삼각형을 그리려하고있다. 그러나 나는 심지어 배경색을 일정한 색으로 설정할 수없는 것처럼 보입니다. 내 UIView 하위 클래스는 이렇게됩니다.

@implementation GLView{ 
    GLuint framebuffer; 
    GLuint renderbuffer; 
    EAGLContext *context; 
} 

+(Class)layerClass{ 
    return [CAEAGLLayer class]; 
} 

-(void)drawView{ 
    glLoadIdentity(); 
    glClearColor(0.7, 0.7, 0.7, 1.0); 
    glClear(GL_COLOR_BUFFER_BIT); 

} 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1]; 
     CAEAGLLayer *layer = (CAEAGLLayer*)self.layer; 
     layer.opaque = YES; 
     [EAGLContext setCurrentContext:context]; 
     if(!context){ 
      NSLog(@"Could not create context"); 
     } 
     glGenFramebuffers(1, &framebuffer); 
     glGenRenderbuffers(1, &renderbuffer); 
     glBindFramebuffer(GL_FRAMEBUFFER_OES, framebuffer); 
     glBindRenderbuffer(GL_RENDERBUFFER_OES, renderbuffer); 
     glFramebufferRenderbuffer(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, renderbuffer); 
     [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(id<EAGLDrawable>)layer]; 
     glViewport(0, 0, CGRectGetWidth(frame), CGRectGetHeight(frame)); 
     [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(id<EAGLDrawable>)self.layer]; 
     [context presentRenderbuffer:GL_RENDERBUFFER_OES]; 
     [self drawView]; 

    } 
    return self; 
} 

위의 코드는 내보기의 배경을 회색으로 설정해야합니다. 그러나 나는 아주 간단한 개념이 빠져 있다고 확신한다. 아무도 지적 할 수 없다면 정말 좋을 것입니다. 고마워요

답변

0

glClear() 후에 glFlush()가 누락되었습니다.

+0

glClear() 뒤에 glFlush()를 추가하더라도 아무 것도 렌더링하지 않습니다. 그건 그렇고, glFlush()는 모든 버퍼를 플러시하는 것입니까? 버퍼가 제대로 초기화되지 않았거나 아주 이상한 문제라고 생각됩니다. –

0

Cocoa Touch 프레임 워크를 올바르게 사용하고 있지 않습니다. 뷰가 뷰 계층에 삽입되기 전에 drawView에 대한 호출이 한 번 발생합니다. 어쩌면 drawView 메서드의 코드를 drawInRect: 메서드로 옮기면이 방법이 효과가있을 수 있습니다. 더 나은 해결책은이 프로그래밍 라인을 포기하고 GLKit를 사용하는 것입니다.

GLKit은 OpenGL ES가 iOS 기기 화면에 콘텐츠를 그리는 데 필요한 대부분의 것을 설정하고 관리하는 GLKView 및 GLKViewController 클래스를 제공합니다. GLKViewController를 하위 클래스 화하고 몇 가지 대리자 메서드를 구현하는 것만으로도 매우 쉽게 사용할 수 있습니다.

제이슨 L. 맥 케슨 (McKesson)의 온라인 책 Learning Modern 3D Graphics Programming는 iOS에서의 OpenGL ES 2.0의 OpenGL의 프로그래밍 가능한 파이프 라인 버전을 배우기위한 좋은 시작이다. 나는이 책을 통해 porting McKesson's examples to iOSsharing what I've learned이라는 책을 통해 일하고있다. GLKit에서 포트를 구축하기 때문에 GLKit을 사용하는 방법에 대한 예제가 많이 있습니다.

관련 문제