2016-05-16 3 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."

Смежные вопросы