我有几个立方体形状的对象,我添加到一个上下文中,它在我的 GLKView 中。每一个立方体都是 NSObject 的一个子类,并且分别有自己的基础效果。我为每个立方体设置了投影矩阵和基础效果,如下所示:
self.effect = [[GLKBaseEffect alloc]init];
self.effect.transform.projectionMatrix = GLKMatrix4MakePerspective(45.0f,0.95f, 0.0f, 10.0f);
self.effect.transform.projectionMatrix = GLKMatrix4Translate(self.effect.transform.projectionMatrix, 0, 0.0, 2.0);
现在,似乎所有人都有一个连接的投影。我想从前面看到他们所有人。但是,如果我将它们放置一点,那么我可以看到立方体的底部或顶部。
关于上面代码行的另一件事:我必须沿着 z 轴稍微移动我的模型视图矩阵以正确地构图它们。我不能将投影矩阵向后移动一点吗?我尝试了几个值,但无济于事。
容器设置如下所示:
- (void)setupGL {
[EAGLContext setCurrentContext:self.context];
self.layer.contentsScale = 2.0;
// Create default framebuffer object.
glGenFramebuffers(1, &defaultFrameBuffer);
glBindFramebuffer(GL_FRAMEBUFFER, defaultFrameBuffer);
GLfloat coordToPixScale = 1.0;
glGenRenderbuffers(1, &depthBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, self.bounds.size.width * coordToPixScale, self.bounds.size.height * coordToPixScale);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuffer);
glEnable(GL_DEPTH_TEST);
}
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
@synchronized(self){
self.opaque = NO;
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
[cubes makeObjectsPerformSelector:@selector(draw)];
}
}
在- (void)glkView:drawInRect:
方法中的立方体数组中,我使添加到数组中的所有立方体都执行它们的-draw
方法:
-(void)draw{
[self.effect prepareToDraw];
glBindTexture(GL_TEXTURE_2D, texture[2]);
glDrawArrays(GL_TRIANGLES, 0, 24);
}
有人可以阐明这个问题吗?