EAGLView 클래스를 시작할 때 원하는 프레임으로 [super initWithFrame : frame]을 호출하기 만하면됩니다. 이 예제는 왼쪽 상단 모서리에 투명한 OpenGL 뷰를 생성하고 컨트롤러 뷰에 추가합니다. 내가 이렇게 내 컨트롤러에서 EAGLView를 생성 한 후
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
// get the layer
CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
eaglLayer.opaque = NO;
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;
}
[EAGLContext setCurrentContext:context];
[self destroyFramebuffer];
[self createFramebuffer];
}
return self;
}
을 그리고 :
theEAGLView = [[EAGLView alloc] initWithFrame:CGRectMake(30.0f, 30.0f,
90.0f, 70.0f)];
theEAGLView.opaque = NO;
[self.view addSubview:theEAGLView];
의 실제 드로잉을 수행하는 코드
내 EAGLView 클래스에 다음 코드를 가지고 내 EAGLView 클래스가 컨트롤러에서 호출되어 다음과 같이 표시됩니다.
- (void)render {
glViewport(0, 0, backingWidth, backingHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(0.0f, backingWidth, 0.0f, backingHeight, 1000.0f, -1000.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
// this is where we draw our stuff
// ...
// ...
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
}
감사합니다. 나는 아직도 당신이 이것을 할 이유에 대해 혼란 스럽다 : glViewport (0, 0, backingWidth, backingHeight); glOrthof (0.0f, backingWidth, 0.0f, backingHeight, 1000.0f, -1000.0f); backingWidth 및 height가 320x480으로 설정되어 있고 드로잉 표면 (EAGLView)이 더 이상 전체 화면이 아닙니다. glViewport()와 EAGLView의 CGRect 사이의 관계는 무엇입니까? 아니면 완전히 독단적입니까? 또한 glOrtho() 호출에서 0에서 320이 아닌 EAGLView에서 너비가 최대 0이 되길 원하십니까? 도움 주셔서 감사합니다. – yozzozo
EAGLView의 backingWidth 및 backingHeight는 EAGLView를 초기화 할 때 사용되는 CGRect의 크기로 설정됩니다. 그래서이 예에서 그들은 둘 다 30이 될 것입니다. –