很奇怪,当我像下面那个坏的那样使用纹理时,出现的纹理很糟糕,只显示了视图的 1/16 大小,应该用纹理填充视图。
但是如果我将顶点数组设置为好的一击,
然后视图的右上四分之一完美地显示纹理!
而且我尝试了更多的负顶点坐标,都失败了,买正顶点坐标就可以了。我感到很困惑!
这意味着,当我尝试将纹理粘贴到视图时,只有右上四分之一的视图是可以的,其他位置(甚至是完整视图)无法显示,或者无法正确显示,为什么?
并且程序(坏的)在模拟器上运行,但在真正的设备上失败了......
注意:squareVertices 是顶点数组,coordVertices 是纹理坐标数组。
BAD 和 GOOD 之间的区别只是 squareVertices 数组。
坏的:
结果图片: http: //i.stack.imgur.com/SycVY.png(抱歉我还不能发布图片)
static const GLfloat squareVertices[] = {
-1.0f, -1.0f,
1.0f, -1.0f,
-1.0f, 1.0f,
1.0f, 1.0f,
};
static const GLfloat coordVertices[] = {
0.0f, 1.0f,
1.0f, 1.0f,
0.0f, 0.0f,
1.0f, 0.0f,
};
好:(但只有右上四分之一的视图是可以的)
结果图片: http: //i.stack.imgur.com/yg2Kg.png(抱歉我还不能发布图片)
static const GLfloat squareVertices[] = {
0.0f, 0.0f,
1.0f, 0.0f,
0.0f, 1.0f,
1.0f, 1.0f,
};
static const GLfloat coordVertices[] = {
0.0f, 1.0f,
1.0f, 1.0f,
0.0f, 0.0f,
1.0f, 0.0f,
};
// Update attribute values
glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, squareVertices);
glEnableVertexAttribArray(ATTRIB_VERTEX);
glVertexAttribPointer(ATTRIB_TEXTURE, 2, GL_FLOAT, 0, 0, coordVertices);
glEnableVertexAttribArray(ATTRIB_TEXTURE);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, iTexNameY);
glUniform1i(textureUniformY, 0);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, iTexNameU);
glUniform1i(textureUniformU, 1);
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, iTexNameV);
glUniform1i(textureUniformV, 2);
// Draw
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
// glFlush();
[_context presentRenderbuffer:GL_RENDERBUFFER];