1

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);

今、あたかもすべてが接続された投影を持っているかのように見えます。全部正面から見てみたいです。ただし、少しずらして配置すると、立方体の下部または上部が見えます。

上記のコード行に関するもう 1 つの点は、モデル ビュー マトリックスを 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);


}

誰かがこの問題に光を当てることができますか?

4

1 に答える 1

1

単一のコンテキストに追加するキューブ型のオブジェクトがいくつかあります。

最初の概念エラー: オブジェクトを OpenGL コンテキストに追加しません。それはOpenGLの仕組みではありません。OpenGL は、点、線、または三角形を描画します。それだけです。より高いレベルはすべてあなた次第です。

それぞれ独自の視点を持つ複数のキューブが必要ですか? それらを次々と描き、それぞれ独自の遠近法設定を行います。

射影行列を少し戻すことはできませんか

射影行列は一種のレンズです。レンズをカメラ本体から引っ張って動かしたり、三脚をカメラと一緒に固定したりすることはありません。モデル ビューマトリックスは、理由からモデルビューと呼ばれます。ビュー パーツは、3D グラフィックでカメラに似たものです。

于 2013-03-03T18:37:24.633 に答える