1

非常に奇妙なことに、以下の悪いテクスチャを使用すると、表示されるテクスチャがひどく、ビューの 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];
4

1 に答える 1