Sensors, OpenGL iPhone




CS185c

Chris Pollett

Nov. 17, 2010

Outline

Introduction

Using Locations and the Accelerometer

SensorTestsViewController.h

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>

@interface SensorTestsViewController : UIViewController <CLLocationManagerDelegate, 
	UIAccelerometerDelegate> {
	IBOutlet UILabel *locationLabel;
	IBOutlet UILabel *headingLabel;
	IBOutlet UILabel *accelerometerLabel;
	CLLocationManager *locationManager;
}
@property (retain, nonatomic) UILabel *locationLabel;
@property (retain, nonatomic) UILabel *headingLabel;
@property (retain, nonatomic) UILabel *accelerometerLabel;

@end

SensorTestsViewController.xib

SensorTestsViewController.m

Remarks

Sensor App Running

Android Sensor's Revisited

AcceleratorDemo.java

Creating an OpenGL ES Application

Our EAGLView

startAnimation and drawView

ES2Renderer rendering

render code

The code to render things should look reasonably familiar if you followed the Android examples...

- (void) render
{
    // Replace the implementation of this method to do your own custom drawing
    
    static const GLfloat squareVertices[] = {
        -0.5f, -0.33f,
         0.5f, -0.33f,
        -0.5f,  0.33f,
         0.5f,  0.33f,
    };
	
    static const GLubyte squareColors[] = {
        255, 255,   0, 255,
        0,   255, 255, 255,
        0,     0,   0,   0,
        255,   0, 255, 255,
    };
    
	static float transY = 0.0f;
	
	// This application only creates a single context which is already set current at this point.
	// This call is redundant, but needed if dealing with multiple contexts.
    [EAGLContext setCurrentContext:context];
    
	// This application only creates a single default framebuffer which is already bound at this point.
	// This call is redundant, but needed if dealing with multiple framebuffers.
    glBindFramebuffer(GL_FRAMEBUFFER, defaultFramebuffer);
    glViewport(0, 0, backingWidth, backingHeight);
    
    glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    
	// Use shader program
    glUseProgram(program);
	
	// Update uniform value
	glUniform1f(uniforms[UNIFORM_TRANSLATE], (GLfloat)transY);
	transY += 0.075f;	
	
	// Update attribute values
    glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, squareVertices);
    glEnableVertexAttribArray(ATTRIB_VERTEX);
    glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, 1, 0, squareColors);
    glEnableVertexAttribArray(ATTRIB_COLOR);
    
	// Validate program before drawing. This is a good check, but only really necessary in a debug build.
	// DEBUG macro must be defined in your debug configurations if that's not already the case.
#if defined(DEBUG)
	if (![self validateProgram:program])
	{
		NSLog(@"Failed to validate program: %d", program);
		return;
	}
#endif
	
    // Draw
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
	
	// This application only creates a single color renderbuffer which is already bound at this point.
	// This call is redundant, but needed if dealing with multiple renderbuffers.
    glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);
    [context presentRenderbuffer:GL_RENDERBUFFER];
}

Translating from Android OpenGL to iPhone GL