2015-10-16 5 views
0

Мне нужно обрезать видео.openGL es 2.0 TextureCoordinates параметр ios

Так что я изменяю TextureCoordinates.

Код выглядит следующим образом.

const GLfloat squareTextureCoordinates[] = { 
    0.22f , 1.0f, 
    0.22f, 0.0f, 
    0.78f, 1.0f, 
    0.78f, 0.0f, 
    }; 
    glVertexAttribPointer(positionAttribute, 2, GL_FLOAT, 0, 0, squareVertices); 
    glVertexAttribPointer(inputTextureCoordinateAttribute, 2, GL_FLOAT, 0, 0, squareTextureCoordinates); 

Этот код является работой.

Тем не менее, мне нужно поддерживать многие размеры iphone. (Например: iphone6 ​​имеют разный размер для iphone5) Так что я использую переменную, а не const в TextureCoordinates. И новый код выглядит следующим образом:

 const float cropX=(float)(SCREEN_HEIGHT-SCREEN_WIDTH)/(float)(SCREEN_HEIGHT*2); 
    const float cropXR=1- (float)(SCREEN_HEIGHT-SCREEN_WIDTH)/(float)(SCREEN_HEIGHT*2); 

    const GLfloat squareTextureCoordinates[] = { 
    cropX , 1.0f, 
    cropX, 0.0f, 
    cropXR, 1.0f, 
    cropXR, 0.0f, 
    }; 
    glVertexAttribPointer(positionAttribute, 2, GL_FLOAT, 0, 0, squareVertices); 
    glVertexAttribPointer(inputTextureCoordinateAttribute, 2, GL_FLOAT, 0, 0, squareTextureCoordinates); 

Однако, это не работает. Экран ничего не отображает.

Я не могу понять, почему я не могу использовать переменную const для TextureCoordinates.

+1

Можете ли вы показать, как определяются «SCREEN_WIDTH» и «SCREEN_HEIGHT»? –

+0

Несомненно, это #define SCREEN_WIDTH [[UIScreen mainScreen] bounds] .size.width –

+0

Вы уверены, что первый фрагмент кода верен? Он содержит две пары равных координат. И это не соответствует второму фрагменту кода. –

ответ

0

Я думаю, вы могли бы проверить вторую часть кода, изменив константные значения констант, которые вы использовали в первой части:

const float cropX = 0.22f; 
const float cropXR = 0.78f; 

const GLfloat squareTextureCoordinates[] = { 
cropX , 1.0f, 
cropX, 0.0f, 
cropXR, 1.0f, 
cropXR, 0.0f, 
}; 
glVertexAttribPointer(positionAttribute, 2, GL_FLOAT, 0, 0, squareVertices); 
glVertexAttribPointer(inputTextureCoordinateAttribute, 2, GL_FLOAT, 0, 0, squareTextureCoordinates); 

Если это работает (он должен), вы увидите, вы можете используйте константные переменные в качестве координаты текстуры. Тем не менее, я считаю, неправильно часть кода заключается в следующем:

const float cropX=(float)(SCREEN_HEIGHT-SCREEN_WIDTH)/(float)(SCREEN_HEIGHT*2); 
const float cropXR=1- (float)(SCREEN_HEIGHT-SCREEN_WIDTH)/(float)(SCREEN_HEIGHT*2); 

В текстурных координат, правильные значения между 0 и 1. Если ширина больше, чем высота, этот код не будет работать. В конкретном случае iPhone 5 и 6, которые имеют одинаковую пропорцию, одинаковые координаты текстуры должны работать, если вид, который отображает код OpenGL, был изменен (если вы используете автозапуск для этого представления, вы, вероятно, решите проблему автоматически).