2016-05-16 17 views
0

Ich arbeite an OpenGL ES 2.0 für mein Projekt, was ich versuche zu tun ist, geben Sie einfach Auto-Zoom der Textur durch Skalierung Wert zu Modell-Matrix.Aber das Problem ist, während das Zoomen der Textur die Kanten der Textur halten nicht die glatte Bewegung anstatt die Kanten schrittweise Bewegung bewegen ... kann mir die Lösung geben ....OpenGL Es 2 Textur Zoom-Problem

(void)render:(CADisplayLink*)displayLink { 

    _currentScale++; 

    glClearColor(0, 104.0/255.0, 55.0/255.0, 1.0); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glEnable(GL_DEPTH_TEST); 
    glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer); 

    glEnable(GL_TEXTURE_2D); 
    glEnable(GL_BLEND); 
    glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
    glDisable(GL_DEPTH_TEST); 


    GLKMatrix4 aspect = [animations getActualScaleForImage:inputImage.size withPortSize:CGSizeMake(self.frame.size.width, self.frame.size.height)]; 
    aspect = GLKMatrix4Scale(aspect,1 + (_currentScale/3000), 1 + (_currentScale/3000) , 0); 
    glUniformMatrix4fv(_modelViewUniform, 1, 0, aspect.m); 

    glViewport(0, 0, self.frame.size.width, self.frame.size.height); 
    glActiveTexture(GL_TEXTURE0); 
    glBindTexture(GL_TEXTURE_2D,_backGroundTxe); 
    glUniform1i(_textureUniform, 0); 
    glVertexAttribPointer(_positionSlot, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0); 
    glVertexAttribPointer(_texCoordSlot, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*) (sizeof(float) * 7)); 

    glDrawElements(GL_TRIANGLES, sizeof(Indices)/sizeof(Indices[0]), GL_UNSIGNED_BYTE, 0); 

    [_context presentRenderbuffer:GL_RENDERBUFFER]; 
} 

Dies ist meine render-Funktion

+0

können Sie ein gif von was Sie meinen und etwas Code? glaube nicht, dass irgendjemand sagen kann, was an deiner Frage falsch sein könnte – Fonix

Antwort

0

Wenn ich Wenn Sie Ihre Beschreibung verstanden haben, klingt es, als müssten Sie Ihre Texturfilterung anpassen.

Während _backGroundTxe noch während des Prozesses gebunden, wo Sie es zuerst das Hinzufügen erstellen versuchen:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

Alternativ, wenn Sie die Textur wollen glatt aussehen, wenn es weit zoomt heraus, können Sie dies versuchen wollen stattdessen :

glGenerateMipmaps(GL_TEXTURE_2D); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

Diese OpenGL-Texturfilterung eine schöne Einführung ist: http://www.learnopengles.com/android-lesson-six-an-introduction-to-texture-filtering/ es ist für Android/Java ist, aber es ist trivial es auf iOS/C++ zu übersetzen, lassen sie einfach alle "GLES20."