2011-09-01 4 views
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 
}; 

도움말이 내 드로우 코드?

답변

1

그냥 추측하지만 OpenGL은 (0, 0)을 이미지의 왼쪽 하단으로 간주합니다. 그래픽이 왼쪽 상단에 표시 될 수 있습니까? 실제로 표시되는 영역은 텍스처의 투명한 부분에서 가져옵니다.

그렇다면 텍스처 좌표를 조정하거나 (0, 0)이 왼쪽 상단에 오도록 텍스처 매트릭스 스택을 조정할 수 있습니다.

+0

죄송합니다.하지만 OpenGL에 대한 완전한 신조어입니다. ES 2.0에서 어떻게 할 수 있습니까? – Marc

+0

가장 쉬운 해결책은 모든 't'좌표 (텍스처 공간의 y 좌표)를 t에서 1.0 - t로 변환하는 것입니다. 따라서 코드에'0.0'과'y'가 아닌'1.0'과'1.0-y'를 저장하고있을 것입니다. 또는 버텍스 쉐이더에서 변환을 수행하십시오. 예전의 고정 된 기능은 텍스쳐 좌표에 매트릭스 변환을 적용했습니다. 이는 데이터 크기 축소 (예 : 좌표를 바이트로 저장하므로 관심있는 범위로 0에서 255 개의 입력을 스케일링 할 수 있음)와 같은 목적에도 유용합니다. 그러나 분명히 당신은 당신이 적절하다고 생각하는 것을 무엇이든 할 수 있습니다. – Tommy

관련 문제