Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ openGL es 2.0纹理坐标参数ios_C++_Ios_Xcode_Opengl Es - Fatal编程技术网

C++ openGL es 2.0纹理坐标参数ios

C++ openGL es 2.0纹理坐标参数ios,c++,ios,xcode,opengl-es,C++,Ios,Xcode,Opengl Es,我必须剪辑一段视频 所以我修改了纹理坐标 代码如下 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); glVertexAt

我必须剪辑一段视频

所以我修改了纹理坐标

代码如下

    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 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 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和iPhone 6具有相同的比例,如果渲染OpenGL代码的视图已调整大小(如果您对该视图使用autolayout,您可能会自动解决该问题)。

您能否显示如何定义
屏幕宽度
屏幕高度
,即#定义屏幕宽度[[UIScreen mainScreen]界限].size.WIDTH您确定第一个代码段正确吗?它包含两对相等的坐标。并且它与第二个代码段不匹配。抱歉,这是类型错误。正确的版本在上面,谢谢!