2016-05-16 128 views
0

我正在爲我的項目開發OpenGL ES 2.0,我試圖做的只是通過給模型矩陣賦予縮放值來自動縮放紋理。但問題是,在縮放紋理時質感的邊緣無法維持平滑的運動,而不是邊緣一步動作移動一步...任何一個可以給我的解決方案....OpenGL Es 2紋理縮放問題

(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]; 
} 

這是我的渲染功能

+0

你能發表你的意思和一些代碼的gif嗎?不要以爲任何人都可以從你的問題中看出什麼是錯的 – Fonix

回答

0

如果我有了解你的描述,這聽起來像你需要調整你的紋理過濾。

雖然_backGroundTxe的過程中,你首先要創建它嘗試添加時仍難免:

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

另外,如果希望紋理看起來光滑時,它縮小爲止,你可能想試試這個,而不是:

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

這是一個很好的介紹的OpenGL紋理過濾:http://www.learnopengles.com/android-lesson-six-an-introduction-to-texture-filtering/它是爲Android/Java的,但它的瑣碎把它翻譯到iOS/C++,只是省略了所有的 「GLES20。」