0

テクスチャ アトラス マネージャーを作成するつもりですが、問題が発生しました。元の UV 座標を変更すると、プログラムは何もレンダリングしなくなりました?? これは私の描画コードです:

- (void)drawFrame {
[(EAGLView *)self.view setFramebuffer];

//GLfloat aspectRatio = self.view.bounds.size.height/self.view.bounds.size.width; 
float m[16] = {2/self.view.bounds.size.width, 0, 0, 0, 0, 2/self.view.bounds.size.height, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1 };

CGSize imageSize = CGSizeMake(512, 512);
CGRect drawBounds = CGRectMake(0, 0, 106, 126);

GLfloat x = (1/imageSize.width) * drawBounds.size.width;
GLfloat y = (1/imageSize.height) * drawBounds.size.height;

static const GLfloat vertices[] = {
    -53.0f, -63.0f,
    53.0f, -63.0f,
    -53.0f,  63.0f,
    53.0f,  63.0f,
};

GLfloat texCoords[] = {
    0.0, 0.0,
    x, 0.0,
    0.0, y,
    x, y
};

glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);

glUseProgram(program);

[[TextureLibrary sharedTextureLibrary] bindTexture:@"bounce" toSlot:GL_TEXTURE0];

glUniform1f(uniforms[UNIFORM_TEXTURE], 0);
glUniformMatrix4fv(UNIFORM_MVP_MATRIX, 1, GL_FALSE, m);

glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, vertices);
glEnableVertexAttribArray(ATTRIB_VERTEX);
glVertexAttribPointer(ATTRIB_TEXTURE_POSITION, 2, GL_FLOAT, 0, 0, texCoords);
glEnableVertexAttribArray(ATTRIB_TEXTURE_POSITION);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);


[(EAGLView *)self.view presentFramebuffer];
}

ただし、次のように問題なく動作します。

GLfloat texCoords[] = {
    0.0, 0.0,
    1.0, 0.0,
    0.0, 1.0,
    1.0, 1.0
};

ヘルプ?

4

1 に答える 1

1

推測ですが、OpenGL は (0, 0) を画像の左下隅と見なします。グラフィックが左上にある可能性があるため、表示している領域は実際にはテクスチャの透明な部分からのものですか?

その場合は、テクスチャ座標を調整するか、(0, 0) が左上になるようにテクスチャ マトリックス スタックを調整できます。

于 2011-09-02T01:24:58.213 に答える