2011-03-05 7 views
0

나는 Pango 레이아웃에서 텍스처를 생성하고 OpenGL과 GLUT를 사용하여 텍스처를 화면에 매핑합니다. 창에서 텍스처를 스크롤하고 싶습니다. 나는 스크롤 할 컨트롤에 관심이 없지만,보고자하는 텍스처의 부분을 화면에 어떻게 맵핑시킬 수 있습니까? 내가 glTranslate를 사용한다고 가정하지만, 어디에서 적용 할 수 있습니까?OpenGL - 텍스처를 어떻게 스크롤합니까?

미리 감사드립니다. 당신은 또한 타일하려는 경우가 아니면

glEnable(GL_TEXTURE_2D); 

{ 
    glBegin(GL_QUADS); 

    { 
     glTexCoord2f(0.0f, 0.0f); glVertex2f( 0.0f+x, 0.0f+y); 
     glTexCoord2f(1.0f, 0.0f); glVertex2f(_width+x, 0.0f+y); 
     glTexCoord2f(1.0f, 1.0f); glVertex2f(_width+x, _height+y); 
     glTexCoord2f(0.0f, 1.0f); glVertex2f( 0.0f+x, _height+y);  
    } 

    glEnd(); 
} 

glFlush();  

glDisable(GL_TEXTURE_2D); 

답변

1

난 그냥 당신이 출력되는 정점의 UV 좌표를 수정하는 것입니다 : 여기

내가 현재 할 것입니다. 그런 다음 glTexCoord2f에 공급하는 좌표를 변경하여 자르기를 지정하면됩니다.

또한 텍스처 여기 변환 http://potatoland.org/glart/week5/GLART_5_texture_samples.java의 좋은 예입니다 (그것의 자바하지만 당신은 쉽게 C로 변환 할 수 있습니다)

3

또 다른 방법은 텍스처 행렬 (매트릭스 모드 GL_TEXTURE)를 사용하는 또는에서 할 것 셰이더.

수정해야 할 정점 수에 따라 달라집니다. 몇 개만 더 성능이 좋지만 많은 버텍스에서는 텍스처 매트릭스/쉐이더 방식이 더 좋을 수 있습니다. 기본 제공되는 행렬 연산은 더 이상 사용되지 않습니다. 즉, 이제는 텍스처를 사용하는 것이 좋습니다.

셰이더에서 스크롤하는 것이 쉽습니다. out.tex = in.tex + offset 여기서 offset은 프레임마다 설정되거나 다른 입력에서 계산되는 균일 한 값일 수 있습니다.

예제가 직접 모드를 사용하기 때문에 텍스처 매트릭스 모드로 확장 해 보겠습니다. 그러나이 방법은 더 이상 사용되지 않습니다.

glEnable(GL_TEXTURE_2D); 
{ 
    glMatrixMode(GL_TEXTURE); 
    glLoadIndentity(); 
    glTranslatef(x,y,0); 
    glMatrixMode(GL_MODELVIEW); 


    glBegin(GL_QUADS); 
    { 
    glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f); 
    glTexCoord2f(1.0f, 0.0f); glVertex2f(_width, 0.0f); 
    glTexCoord2f(1.0f, 1.0f); glVertex2f(_width, _height); 
    glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, _height); 
    } 
    glEnd(); 
} 
glFlush(); 
glDisable(GL_TEXTURE_2D); 
관련 문제