OpenGL Es 2纹理缩放问题

问题描述:

我正在为我的项目开发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

如果我有了解你的描述,这听起来像你需要调整你的纹理过滤。

虽然_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。”