iphone opengl camera ar

http://hyena0.tistory.com/421

iPhone 에서 OpenGL 로 AR 기능을

사용하려고 하면 필수적으로 OpenGL 의

모델 도형을 투명한 배경위에 보여줘야 합니다.

그래서 설정해야 할 것들이 몇가지 있습니다.

우선 기본 설정에서 RGBA8 로 해주고,

배경의 색깔을 모두 지운 후 alpha 에 투명값을

설정하는 겁니다. “0″ 으로 말이죠.

다시 정리하면 아래 코드를 볼 수 있습니다.

// The GL view is stored in the nib file. When it’s unarchived it’s sent -initWithCoder:

- (id)initWithCoder:(NSCoder*)coder {

if ((self = [super initWithCoder:coder])) {

CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;

eaglLayer.opaque = NO;//no – transparent

eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:

[NSNumber numberWithBool:NO], kEAGLDrawablePropertyRetainedBacking, kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil];

context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];

if (!context || ![EAGLContext setCurrentContext:context]) {

[self release];

return nil;

}

animating = FALSE;

displayLinkSupported = FALSE;

animationFrameInterval = 1;

displayLink = nil;

animationTimer = nil;

// A system version of 3.1 or greater is required to use CADisplayLink. The NSTimer

// class is used as fallback when it isn’t available.

NSString *reqSysVer = @”3.1″;

NSString *currSysVer = [[UIDevice currentDevice] systemVersion];

if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending)

displayLinkSupported = TRUE;

[self setupView];

}

return self;

}

해당 코드는 일반적으로 제공되는 OpenGL 코드인데, eaglLayer.opaque = NO 로 설정해야 투명한 배경을

얻을 수 있습니다. 또한 도형을 그리는 부분에서는 배경화면의 색깔을 투명으로 지정해야 합니다.

glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

여기서 glClear(Red, Green, Blue, alpha) 값을 보시면 모두 0 으로 설정하면 됩니다.

그런데 이렇게 하고서 투명처리가 안되어 무지 고생을 했습니다.

알고 봤더니 인터페이스 빌더에서 해당 OpenGL 을 그리는 View 의 배경색이 흰색으로 설정되어 있었습니다

그래서 위와 같이 View 를 선택한 뒤, 배경색 팔레트에서 Opacity 값을 0 으로 설정하면

View 자체가 투명한 색을 가지게 됩니다.

그러면 아래와 같은 투명배경의 도형을 카메라와 같이 볼 수 있게 됩니다.

'Computing' 카테고리의 다른 글

The new iPad  (0) 2012.03.09
CentOS 5.5, mongoDB, node.js  (0) 2011.05.19
https in java, android  (0) 2010.12.08
x.inf contains DirIDs, which are not supported  (0) 2010.06.10
ffmpeg build  (0) 2010.06.04