2016-07-27 47 views
0

Ich versuche derzeit, den OpenGL ES 2.0 Zeichenprozess auf zwei Hälften zu teilen: die erste Hälfte, wo ich ein Objekt von Interesse (dh einen Würfel oder ein Dreieck) zu einem Framebuffer, der eine hat Textur an sie angehängt, und die zweite Hälfte, wo ich diese Textur auf die Fläche einer Form in einem anderen Framebuffer (dh einen anderen Würfel oder ein Dreieck gezeichnet) anwenden.iOS Rendering eines Objekts zu einer Textur

Ich habe den Framebuffer, der an die Textur gebunden ist, mit einer grünen Farbe gelöscht und konnte diese Farbe auf einem Dreieck erscheinen lassen, das ich in einem anderen Framebuffer gezeichnet habe, an den der Haupt-Renderbuffer angehängt ist und den ich [context presentRenderbuffer: renderbuffer] on. Aber egal, was ich mache, ich bin nicht in der Lage, zusätzlich eine andere Form in diese Textur zu zeichnen, nachdem ich sie auf einen grünen Hintergrund gerendert habe, und diese auf die Form rendern, die ich gezeichnet habe.

Für eine visuelle Referenz zeichne ich derzeit ein Quadrat auf den Bildschirm in meinem Framebuffer, und dann eine Textur anwenden, die einen grünen Hintergrund plus ein Dreieck in der Mitte haben soll, aber alles was ich bekomme ist dies green screen.

Es hat alles, was ich derzeit will, außer es gibt kein Dreieck, das auch in der Mitte ist. Im Wesentlichen sollte dies wie ein großes grünes Quadrat mit einem schwarzen Dreieck in der Mitte aussehen, wo das Grün und das Dreieck alle von der Textur stammen (das Quadrat wäre ursprünglich schwarz gewesen).

Meine Textur Ziehverfahren und Hauptframebuffer Ziehverfahren sind unten aufgeführt (ohne den Setup-Code):

- (BOOL) loadModelToTexture: (GLuint*) tex { 
    GLuint fb; 
    GLenum status; 

    glGenFramebuffers(1, &fb); 

    // Set up the FBO with one texture attachment 
    glBindFramebuffer(GL_FRAMEBUFFER, fb); 
    glGenTextures(1, tex); 
    glBindTexture(GL_TEXTURE_2D, *tex); 

    NSLog(@"Error1: %x", glGetError()); 

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 128, 128, 0, 
       GL_RGBA, GL_UNSIGNED_BYTE, NULL); 
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, 
          GL_TEXTURE_2D, *tex, 0); 

    status = glCheckFramebufferStatus(GL_FRAMEBUFFER); 

    if (status != GL_FRAMEBUFFER_COMPLETE) { 
     // Handle error here 
     NSLog(@"Loading model to texture failed"); 
     return FALSE; 
    } 

    glClearColor(0.0f, 1.0f, 0.0f, 1.0f); // Set color's clear-value to red 
    glClearDepthf(1.0f);   // Set depth's clear-value to farthest 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glViewport(0, 0, self.frame.size.width*self.contentsScale, self.frame.size.height*self.contentsScale); 

    NSLog(@"Error2: %x", glGetError()); 

    // Update attribute values. 
    glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, vertices); 
    glEnableVertexAttribArray(ATTRIB_VERTEX); 
    NSLog(@"Error3: %x", glGetError()); 
    glDrawArrays(GL_TRIANGLES, 0, 3); 

    return TRUE; 
} 

- (void) draw { 
    [EAGLContext setCurrentContext:context]; 

    glBindFramebuffer(GL_FRAMEBUFFER, framebuffer); 

    glClearColor(0.0f, 0.5f, 0.5f, 1.0f); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glViewport(0, 0, self.frame.size.width*self.contentsScale, self.frame.size.height*self.contentsScale); 

    // Use shader program. 
    glUseProgram(program); 

    // Update attribute values. 
    glEnableVertexAttribArray(ATTRIB_VERTEX); 
    glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, vertices); 

    //for some reason this is unneeded, but I'm not sure why 
    glVertexAttribPointer(ATTRIB_TEXTURE_COORD, 2, GL_FLOAT, 0, 0, texCoords); 
    glEnableVertexAttribArray(ATTRIB_TEXTURE_COORD); 

    glBindTexture(GL_TEXTURE_2D, textureName0); 
    glDrawArrays(GL_TRIANGLES, 0, 3); 
    glDrawArrays(GL_TRIANGLES, 3, 3); 

    [context presentRenderbuffer:renderbuffer]; 
} 

Welche weiteren Schritte muss ich es bekommen nehmen richtig auf die Textur zu zeichnen/richtig anwenden zur Hauptframebufferzeichnung?

Antwort

0

Egal, es stellt sich heraus, dass ich mein Dreieck auf die Textur gezeichnet habe, aber das Dreieck hat automatisch automatisch die gleiche Farbe wie die Hintergrundtextur, also ist es ein ganz anderes Problem.