繁体   English   中英

学习开放式GL

[英]Learning open GL

我正在尝试通过网站学习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;
}

如果我理解正确,则上面的代码应将视图的背景设置为灰色。 但是,我确定我缺少一些非常简单的概念。 如果有人指出,那真的很棒。 谢谢

glClear()之后缺少glFlush()。

您没有正确使用Cocoa Touch框架。 在将视图插入视图层次结构之前,对drawView调用仅发生一次。 也许如果将drawView方法中的代码移动到drawInRect:方法,则可能会起作用。 更好的解决方案是放弃这一行编程,而使用GLKit。

GLKit提供了GLKView和GLKViewController类,用于设置和管理OpenGL ES将内容绘制到iOS设备屏幕所需的大部分功能。 仅通过子类化GLKViewController并实现一些委托方法,就非常容易使用。

Jason L. McKesson的在线书“ Learning Modern 3D Graphics Programming”是学习OpenGL的可编程管道版本(如iOS上的OpenGL ES 2.0)的良好起点。 我正在研究本书, 将McKesson的示例移植到iOS ,并分享我学到的知识 自从我在GLKit上构建端口以来,它们是一堆有关如何使用GLKit的示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM