非常に奇妙なことに、以下の悪いテクスチャを使用すると、表示されるテクスチャがひどく、ビューの 1/16 サイズしか表示されず、ビューをテクスチャで埋める必要があります。
しかし、頂点配列を良い一撃のように設定すると、
ビューの右上 4 分の 1 がテクスチャで完全に表示されます。
そして、負の頂点座標をさらに試してみましたが、すべて失敗しました。正の頂点座標を購入しても問題ありません。私はとても混乱しています!
つまり、テクスチャをビューに貼り付けようとすると、ビューの右上 4 分の 1 だけが OK で、他の位置 (全体ビューであっても) が表示されない、または正しく表示されないのはなぜですか?
そして、プログラム(悪いもの)はシミュレーターで動作しますが、実際のデバイスでは失敗しました...
注: 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,
};
GOOD: (ただし、ビューの右上 4 分の 1 のみは OK)
結果の画像: 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];