iphone opengl camera ar
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 |