2011-12-21 2 views
0

을 통해 하나 개의 질감을 스트레칭하면 다음과 같은 코드가 작동하는 단일 쿼드지도 텍스처 : 나는 한 질감 다음과 같은 여러 쿼드을지도 할 수있는 방법여러 쿼드

glBegin(GL_QUADS); 
    glTexCoord2f(0,0) ; 
    glVertex3f(-1,-1,0); 

    glTexCoord2f(1,0); 
    glVertex3f( 1,-1,0); 

    glTexCoord2f(1,1); 
    glVertex3f( 1, 1,0); 

    glTexCoord2f(0,1); 
    glVertex3f(-1, 1,0); 
glEnd(); 

내 질문입니다. for 루프는, 내가 10x10th하는 1x1th 쿼드에서 내 질감을 스트레칭 할 2 단위 가장자리의 작은 쿼드 만든 10 × 10 쿼드을 생성 쿼드 :

void wall(int num) 
{ 
int wallx; 
int wally; 
for(wallx=0;wallx<num;wallx++) 
{ 
    for(wally=0;wally<num;wally++) 
    { 
    glPushMatrix(); 
     glBegin(GL_QUADS); 
     glVertex3f(-1 + wallx*2,-1+ wally*2,0);   
     glVertex3f( 1+ wallx*2,-1+ wally*2,0);    
     glVertex3f( 1+ wallx*2, 1+ wally*2,0);    
     glVertex3f( -1+ wallx*2, 1+ wally*2,0);   
      glEnd(); 
    glPopMatrix(); 
    } 
} 

}

+1

내 눈이 나를 속이겠습니까? glBegin() 및 glEnd()? 사용하지 마십시오. 사용되지 않습니다. – ScarletAmaranth

+0

어떻게 glBegin과 glEnd를 사용하지 않고 이것을 할 수 있습니까? –

답변

0

생각해 보면, 이것은 각 쿼드에 대해 올바른 텍스처 좌표를 지정하는 것입니다.

float unitx = 1.0f/(float)num; 
float unity = 1.0f/(float)num; 
for(wallx=0;wallx<num;wallx++) 
{ 
    for(wally=0;wally<num;wally++) 
    { 
    glPushMatrix(); 
     glBegin(GL_QUADS); 
     glTexCoord2f(unitx * (float) wallx, unity * (float) wally); 
     glVertex3f(-1 + wallx*2,-1+ wally*2,0);  
     glTexCoord2f(unitx * (float) (wallx+1), unity * (float) wally); 
     glVertex3f( 1+ wallx*2,-1+ wally*2,0);    
     glTexCoord2f(unitx * (float) (wallx+1), unity * (float) (wally+1)); 
     glVertex3f( 1+ wallx*2, 1+ wally*2,0);    
     glTexCoord2f(unitx * (float) wallx, unity * (float) (wally+1)); 
     glVertex3f( -1+ wallx*2, 1+ wally*2,0);   
      glEnd(); 
    glPopMatrix(); 
    } 
} 
1

당신은 아마 당신의 첫 번째 코드에서 알 수 있듯이 스 니펫, 텍스처 좌표는 0-1 범위에 있으므로 0,0은 대각선 방향으로 1, 1로 진행하는 하나의 코너입니다. 쿼드의 단위 크기는 무의미하며 텍스처 좌표는 월드 공간이 아니라 텍스처 공간에 있습니다.

따라서 텍스처 좌표를 1/n으로 계산하면됩니다. 여기서 n은 큰 쿼드를 빌드하는 데 사용하는 쿼드의 수입니다. 이 경우 첫 번째 코드는 (0,0), (0,0.1), (0.1,0) 및 (0.1,0.1)을 예로들 수 있습니다. 간단히 1/n을 계산 한 다음 루프에서이 값을 사용하여 각 작은 쿼드의 좌표를 계산하십시오. 쿼드의 한 모서리에서 좌표 (0,0)를 사용하고 대각선으로 마주 보는 모서리에서 (10,10)을 사용한 경우 (다른 두 개에서는 올바른 값으로) 텍스처를 10 배나 바둑판 식으로 배열 할 수 있습니다 쿼드.