0

OpenGLESに手を出し、さまざまなレベルの成功を収めています。私の現在の問題は、.objファイルを読み込もうとしていることです。私は現在のプロジェクトで実装してきた素晴らしいGLOBJLoaderを見つけましたが、まだそこにはありません。

これが私のコードです

- (void)createFramebuffer
{

glGenFramebuffersOES(1, &viewFrameBuffer);
NSLog(@"Check 1");
[self checkFrameBuffer];
glGenRenderbuffersOES(1, &viewRenderBuffer);
NSLog(@"Check 2");
[self checkFrameBuffer];

glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFrameBuffer);
NSLog(@"Check 3");
[self checkFrameBuffer];
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderBuffer);
NSLog(@"Check 4");
[self checkFrameBuffer];
[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer];
NSLog(@"Check 5");
[self checkFrameBuffer];
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewFrameBuffer);
NSLog(@"Check 6");
[self checkFrameBuffer];

GLint wide = 320;
GLint high = 480;

glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &wide);
NSLog(@"Check 7");
[self checkFrameBuffer];
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &high);
NSLog(@"Check 8");
[self checkFrameBuffer];

if(USE_DEPTH_BUFFER)
{
    glGenRenderbuffersOES(1, &depthRenderBuffer);
    NSLog(@"Check 9");
    [self checkFrameBuffer];
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderBuffer);
    NSLog(@"Check 10");
    [self checkFrameBuffer];
    glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, glWidth, glHeight);
    NSLog(@"Check 11");
    [self checkFrameBuffer];
    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderBuffer);
    NSLog(@"Check 12");
    [self checkFrameBuffer];
}
}

-(void)checkFrameBuffer
{
GLuint returned = (glCheckFramebufferStatus(GL_FRAMEBUFFER_OES));

if(returned != GL_FRAMEBUFFER_COMPLETE_OES)
{
    NSLog(@"Error code: %x -->", returned);
    switch (returned) {
        case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES:
            NSLog(@"Incomplete: Dimensions");
            break;

        case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES:
            NSLog(@"Incomplete: Formats");
            break;

        case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES:
            NSLog(@"Incomplete: Missing Attachment");
            break;

        case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES:
            NSLog(@"Incomplete: Attachment");
            break;

        default:
            NSLog(@"Complete");
            break;
    }
}
}

createFrameBuffer()メソッドは明らかにフレームバッファーを作成するためのものであり、checkFrameBuffer()は単にデバッグを支援し、各ステップの後にフレームバッファーの状態を出力するためのものです。

これから得られる出力は次のとおりです。

  1. チェック1
  2. エラーコード:8cdd->
  3. 完了
  4. チェック2
  5. エラーコード:8cdd->
  6. 完了
  7. チェック3
  8. エラーコード:8cd7->
  9. 不完全:添付ファイルがありません
  10. チェック4
  11. エラーコード:8cd7->
  12. 不完全:添付ファイルがありません
  13. チェック5
  14. エラーコード:8cd7->
  15. 不完全:添付ファイルがありません
  16. チェック6
  17. エラーコード:8cd6->
  18. 不完全:添付ファイル
  19. チェック7
  20. エラーコード:8cd6->
  21. 不完全:添付ファイル
  22. チェック8
  23. エラーコード:8cd6->
  24. 不完全:添付ファイル
  25. チェック9
  26. エラーコード:8cd6->
  27. 不完全:添付ファイル
  28. チェック10
  29. エラーコード:8cd6->
  30. 不完全:添付ファイル
  31. チェック11
  32. エラーコード:8cd6->
  33. 不完全:添付ファイル
  34. チェック12
  35. エラーコード:8cd6->
  36. 不完全:添付ファイル

これらの問題はそれが機能するのを妨げており、私は完全に困惑しています。私はOpenGLについてあまりよく知らないので、パッチを当てて学習しようとしていますが、JeffLamarcheの「OpenGLESFromthe Ground Up」を実行したので、少し知っています。

どんな助けでも大歓迎です、そしてあなたがより多くの情報を必要とするならば、遠慮なく尋ねてください!

ありがとう、

マット

4

1 に答える 1

3

これを使用して、この前のある時点でコンテキストを設定していますか?

[EAGLContext setCurrentContext:context];

すべてを添付するまで、わざわざフレームバッファのステータスを確認しないでください。そうして初めて、完了として登録されます。

以下は、深さバッファーを使用してOpenGL ES 1.1(コードにOESサフィックスが表示されている場合)フレームバッファーをセットアップするために使用したコードです。

    [EAGLContext setCurrentContext:context];

    glGenFramebuffersOES(1, &viewFramebuffer);
    glGenRenderbuffersOES(1, &viewRenderbuffer);

    glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);

    [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:glLayer];
    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer);

    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);

    glGenRenderbuffersOES(1, &viewDepthBuffer);
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewDepthBuffer);
    glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight);
    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, viewDepthBuffer);

    if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) 
    {
        return;
    }

私が飛び出した違いの1つは、のレンダリングバッファではなくフレームバッファをフィードしていることですglFramebufferRenderbufferOES()。それがあなたの問題の原因かもしれません。また、ビューのレイヤーからFBOサイズを取得するのではなく、ピクセル単位でFBOサイズを明示的に設定しているので、それを実行するかどうかはわかりません。

于 2012-05-23T17:32:00.680 に答える