Текстура больше не отображается после смены УФ - PullRequest
0 голосов
/ 02 сентября 2011

Я собираюсь написать менеджер атласа текстуры, но я столкнулся с проблемой. Когда я изменил свои исходные координаты 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
};

Помощь

1 Ответ

1 голос
/ 02 сентября 2011

Просто предположение, но OpenGL считает (0, 0) левым нижним углом изображения. Возможно ли, что ваша графика находится в верхнем левом углу, так что отображаемая область фактически является прозрачной частью текстуры?

Если это так, то вы можете либо отрегулировать координаты текстуры, либо отрегулировать стек матриц текстуры так, чтобы (0, 0) находился в верхнем левом углу.

...