将多个简单的OpenGL多维数据集添加到一个上下文并为各个多维数据集设置透视图

时间:2013-03-03 18:27:30

标签: objective-c opengl glkview

我有几个立方体形状的对象,我添加到单个上下文中,这是在我的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);


}

有人可以解释这个问题吗?

1 个答案:

答案 0 :(得分:1)

  

我有几个立方体形状的对象,我添加到单个上下文中,

第一个感知错误:您没有向OpenGL上下文添加对象。这不是OpenGL的工作原理。 OpenGL绘制点,线或三角形,就是这样。更高级别的一切都取决于你。

你想要多个立方体,每个立方体都有自己的视角?你一个接一个地绘制它们,每个它都有自己的透视设置。

  

我不能只将投影矩阵移回一点

投影矩阵是一种镜头。你不会将镜头从相机的身体上拉下来,移动它,保持三脚架与相机就位。出于某种原因,模型视图矩阵称为模型 - 视图。视图部分类似于3D图形中的相机。