0

私はサイトを通じてopenglを学ぼうとしています。最初に例を見て、次に見ずに自分で試してみます。そうすれば、学習が改善されたことに自信が持てます。しかし、私は 20 日前から opengl のチュートリアルを見てきました。基本は非常に基本的なものであり、それを使用して非常に基本的なプログラムを実行しようとすると失敗します。

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;
}

私が正しく理解していれば、上記のコードはビューの背景を灰色に設定する必要があります。しかし、非常に単純な概念がいくつか欠けていると確信しています。誰かが指摘できれば、それは本当に素晴らしいことです。ありがとうございました

4

2 に答える 2

0

Cocoa Touch フレームワークを正しく使用していません。drawViewビューがビュー階層に挿入される前に、への呼び出しは一度だけ発生します。メソッド内のコードをdrawViewメソッドに移動すると、drawInRect:これが機能する可能性があります。より良い解決策は、このプログラミング行を放棄して GLKit を使用することです。

GLKit は、OpenGL ES が iOS デバイスの画面にコンテンツを描画するために必要なもののほとんどをセットアップおよび管理する GLKView および GLKViewController クラスを提供します。GLKViewController をサブクラス化し、いくつかのデリゲート メソッドを実装するだけで、非常に簡単に使用できます。

Jason L. McKesson のオンライン ブックLearning Modern 3D Graphics Programmingは、iOS 上の OpenGL ES 2.0 などの OpenGL のプログラム可能なパイプライン バージョンを学習するための良い出発点です。私は本を​​読み進め、McKesson の例を iOS に移植し、学んだことを共有しています。私は GLKit でポートを構築しているので、それらは GLKit の使用方法に関する一連の例です。

于 2013-01-09T14:17:39.013 に答える
0

glClear() の後に glFlush() がありません。

于 2013-01-07T21:05:42.650 に答える