2015-10-16 94 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有不同的尺寸) 所以我在TextureCoordinates中使用变量而不是const。 新代码如下所示;

 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]范围] .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变量作为纹理坐标。不过,我想代码的错误部分是这样的:

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代码的视图被调整大小(如果对该视图使用自动布局,则可能会自动解决该问题),则应该使用相同的纹理坐标。