0
텍스처 관리자를 작성하려고하는데 문제가 생겼습니다. 원래의 UV 좌표를 수정하면 내 프로그램이 더 이상 렌더링되지 않습니다 ??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
};
도움말이 내 드로우 코드?
죄송합니다.하지만 OpenGL에 대한 완전한 신조어입니다. ES 2.0에서 어떻게 할 수 있습니까? – Marc
가장 쉬운 해결책은 모든 't'좌표 (텍스처 공간의 y 좌표)를 t에서 1.0 - t로 변환하는 것입니다. 따라서 코드에'0.0'과'y'가 아닌'1.0'과'1.0-y'를 저장하고있을 것입니다. 또는 버텍스 쉐이더에서 변환을 수행하십시오. 예전의 고정 된 기능은 텍스쳐 좌표에 매트릭스 변환을 적용했습니다. 이는 데이터 크기 축소 (예 : 좌표를 바이트로 저장하므로 관심있는 범위로 0에서 255 개의 입력을 스케일링 할 수 있음)와 같은 목적에도 유용합니다. 그러나 분명히 당신은 당신이 적절하다고 생각하는 것을 무엇이든 할 수 있습니다. – Tommy