OpenGL na iOS-u

Nikola Novak, 0016062797

Fakultet organizacije i informatike
Računalna grafika

Sadržaj

Uvod

Kako početi?

Specifičnosti

OpenGL

OpenGL ES

OpenGL 1.0/1.1 vs 2.0

OpenGL 1.0

OpenGL 2.0

OpenGL ES

Ispod haube: dohvaćanje konteksta (1)


- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];

    if (!self.context) {
        NSLog(@"Failed to create ES context");
    }
    
    GLKView *view = (GLKView *)self.view;
    view.context = self.context;
    view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
    
    [EAGLContext setCurrentContext:self.context];
}

Ispod haube: početak (2)


- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
	glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    //glEnable(GL_CULL_FACE);
    glOrthof(-1.0f, 1.0f, -1.5f, 1.5f, -1.0f, 1.0f);
    glMatrixMode(GL_MODELVIEW);
    glRotatef(3.0f, 3.0f, 0.0f, 1.0f);
    
    glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    glEnableClientState(GL_VERTEX_ARRAY);
    
    glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
    
    glEnableClientState(GL_NORMAL_ARRAY);
    
    glEnable(GL_COLOR_MATERIAL);
    
    glEnable(GL_NORMALIZE);
  
    glEnable(GL_DEPTH_TEST);
}

Ispod haube: crtanje (3)


- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
    //static GLfloat rotation = 0.0;
    
    vertices[] = {
    0.0, 0.8, 0.0, 
    0.8, 0.0, 0.0, 
    -0.8, 0.0, 0.0
    };
    
    glLoadIdentity();
    //glRotatef(rotation, 0.0, 0.0, 1.0);
    glClearColor(0.7, 0.7, 0.7, 1.0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnableClientState(GL_VERTEX_ARRAY);
    glColor4f(0.0, 1.0, 0.0, 1.0);
    glVertexPointer(3, GL_FLOAT, 0, vertices);
    glDrawArrays(GL_TRIANGLES, 0, 9);
    glDisableClientState(GL_VERTEX_ARRAY);
    
    //rotation+= 0.5;
}
	

Ispod haube: osvjetljenje (4)

glEnable(GL_LIGHTING);

glEnable(GL_LIGHT0);
    
const GLfloat light0Ambient[] = {0.05, 0.05, 0.05, 1.0};
glLightfv(GL_LIGHT0, GL_AMBIENT, light0Ambient);
    
const GLfloat light0Direction = {0.0, 0.0, -1.0};
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, &light0Direction);
    
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 45.0);

Zaključak

Pitanja?

Korisne poveznice

/

#