我有几个立方体形状的对象,我添加到单个上下文中,这是在我的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:
方法的cube数组中,我将添加到数组中的所有多维数据集执行-draw
方法:
-(void)draw{
[self.effect prepareToDraw];
glBindTexture(GL_TEXTURE_2D, texture[2]);
glDrawArrays(GL_TRIANGLES, 0, 24);
}
有人可以解释这个问题吗?
答案 0 :(得分:1)
我有几个立方体形状的对象,我添加到单个上下文中,
第一个感知错误:您没有向OpenGL上下文添加对象。这不是OpenGL的工作原理。 OpenGL绘制点,线或三角形,就是这样。更高级别的一切都取决于你。
你想要多个立方体,每个立方体都有自己的视角?你一个接一个地绘制它们,每个它都有自己的透视设置。
我不能只将投影矩阵移回一点
投影矩阵是一种镜头。你不会将镜头从相机的身体上拉下来,移动它,保持三脚架与相机就位。出于某种原因,模型视图矩阵称为模型 - 视图。视图部分类似于3D图形中的相机。