2009-10-20 4 views
2

OpenGL ES (iPhone 용)를 사용하여 텍스처에 렌더링 한 다음 텍스처를 화면에 표시하려고합니다. 텍스처의 상단에 32 행 간격이 있고 하단의 32 행이 잘리는 것을 제외하면 모든 것이 작동합니다. 내 그림 모두가 32 픽셀 아래로 오프셋되어있는 것과 같습니다. 결과적으로 텍스처 바깥에있는 것처럼 아래쪽 32 개의 행이 그려지지 않습니다.OpenGL ES 텍스처의 상단에 32 픽셀 갭

여기 아주 간단한 예입니다 :

void RenderToTexture(int texture) 
{ 
    unsigned char buffer[4 * 320 * 480]; 
    unsigned char colour[4]; 
    colour[0] = 255; 
    colour[1] = 0; 
    colour[2] = 0; 
    colour[3] = 128; 
    for (int i = 0; i < 4 * 320 * 480; i += 4) 
    { 
     buffer[i] = colour[0]; 
     buffer[i+1] = colour[1]; 
     buffer[i+2] = colour[2]; 
     buffer[i+3] = colour[3]; 
    } 
    glBindTexture(GL_TEXTURE_2D, texture); 
    glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 320, 480, GL_RGBA, GL_UNSIGNED_BYTE, buffer); 
} 

그리고 여기 결과입니다 :

http://img10.imageshack.us/img10/2113/screenjc.th.jpg http://img10.imageshack.us/img10/2113/screenjc.th.jpg

그냥 glColor4f를 (사용하여 색상을 설정) 대신 빨간색 화면에서 RenderToTexture()를 호출하면의 예상대로

도움을 주시면 감사하겠습니다.

+0

코코아로 축소하면 상태 표시 줄을 배치하기 위해 공간이 도입됩니다. 이 줄을 사용하여 제거하십시오 : self.frame = [[UIScreen mainScreen] bounds]; – Raptor

+2

상태 표시 줄은 높이가 20px 밖에되지 않지만 .... –

답변

5

32 픽셀은 512 : 512 - 480 = 32의 누락 값입니다. 이유는 GL_TEXTURE_2D에서 2의 제곱의 텍스처 크기 만 사용할 수 있기 때문입니다. 너비와 높이를 512로 반올림해야합니다. 텍스처 좌표를 사용하거나 텍스처 매트릭스를 설정하여 원하는 텍스처의 일부만 계속 표시 할 수 있습니다.

1

iPhone 3GS는 특정 조건에서 2 개의 거듭 제곱 텍스처를 지원합니다. 모든 다음이 충족되어야합니다

  • GL_TEXTURE_WRAP_S이 GL_CLAMP_TO_EDGE하도록 설정해야
  • GL_TEXTURE_WRAP_T을 GL_CLAMP_TO_EDGE하도록 설정해야
  • 밉 매핑이 꺼져 있어야합니다; GL_LINEAR_MIPMAP_LINEAR 대신