yoz*_*ozo 5 iphone opengl-es coordinates
任何人都知道如何创建一个不使用完整的iPhone屏幕尺寸作为绘图表面的OpenGL ES应用程序?
到目前为止我看到的所有内容都有EAGLView(或其他)绘制到0,0,320,480.
我想让我的EAGLView分别为100,100,100,100.这可能吗?看起来我需要做的就是更改glViewport()调用,但不确定... glViewport是否只是为全屏OpenGL ES视图设置剪切矩形?或者它实际上定义了原点(0,0)的位置?
这是非常令人困惑的,特别是当你试图用UIViews来思考它时,我就是这样.我想将CGRect传递给我的初始化函数,以便设置glViewport以及其他所有内容.
谢谢!
您需要做的就是在启动它时使用您想要的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;
}
Run Code Online (Sandbox Code Playgroud)
然后我从我的控制器创建EAGLView,如下所示:
theEAGLView = [[EAGLView alloc] initWithFrame:CGRectMake(30.0f, 30.0f,
90.0f, 70.0f)];
theEAGLView.opaque = NO;
[self.view addSubview:theEAGLView];
Run Code Online (Sandbox Code Playgroud)
在我的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];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3102 次 |
| 最近记录: |