2013-02-02 2 views
0

나는 내 게임에 100x100 쿼드로 이루어진 바닥을 가지고 있습니다. 조명을 망칠 것이기 때문에 1 쿼드만으로는 할 수 없었습니다. 그리고 여기에 문제가 있습니다 - 모든 텍스처에 어떻게 하나의 텍스처를 넣을 수 있습니까? 이 코드는 텍스처를 각 쿼드에 배치하지만 원하는 효과가 아닙니다. 질감이 바닥에 관해서는 좌표에 대한OpenGL - 어떻게 이것을 텍스처에 매핑합니까?

glBegin(GL_QUADS); 
glNormal3f(0,0,1); 

for(float j = 0; j < 1; j+=0.01) 
{  
     for(float i = 0; i < 1; i+=0.01) 
    {   
     glTexCoord2f(0.0,0.0); glVertex2f(i,j+0.01); 
     glTexCoord2f(1.0,0.0); glVertex2f(i,j); 
     glTexCoord2f(1.0,1.0); glVertex2f(i+0.01,j); 
     glTexCoord2f(0.0,1.0); glVertex2f(i+0.01,j+0.01); 
    } 

} 
glEnd(); 
glPopMatrix(); 
+0

조명이 잘 작동합니다. – JasonD

답변

0

더러운 빠른 앤 솔루션은 같은 값을 사용할 수 있습니다 : 당신이 그렇게는 OpenGL의 이전 버전을 사용하는 것처럼

glTexCoord2f(i, j+0.01);  glVertex2f(i, j+0.01); 
glTexCoord2f(i, j);   glVertex2f(i, j); 
glTexCoord2f(i+0.01, j);  glVertex2f(i+0.01, j); 
glTexCoord2f(i+0.01, j+0.01); glVertex2f(i+0.01, j+0.01); 
0

글쎄, 그것은 본다 사용할 수있는 것은 아니지만 사용자 정의 조각 쉐이더를 사용하면 문제가 해결됩니다. 내가 뭘 할거야. 하지만 당신이 찾고있는 것은 UV 좌표를 보간하기 만하면된다는 것입니다. 예를 들어 대신

0.0f,0.0f 
1.0f,0.0f 
1.0f,1.0f 
0.0f,1.0f 

의 4 제곱을,이 경우 첫 번째는 당신이 할 수있는 것을 나는 또한 당신의 예측 행동 루프 만과의 정수로 갈 것

0.0f,0.0f 
.5f,0.0f 
.5f,.5f 
.0f,.5f 

해야한다 인덱스에 대한 정점의 위치를 ​​계산하는 방식을 적용하십시오.

glTexCoord2f(i,j); glVertex2f(i,j+0.01); 
    glTexCoord2f(i+.01,j); glVertex2f(i,j); 
    glTexCoord2f(i+.01,j+.01); glVertex2f(i+0.01,j); 
    glTexCoord2f(i,j+.01); glVertex2f(i+0.01,j+0.01); 

텍스 코드의 순서에 유의하십시오.

-1

조명을 망칠 수 있기 때문에 1 쿼드만으로는 할 수 없었습니다.

이것은 픽셀 단위의 조명이 전부입니다. 정점에서만 조명 색상을 평가하고 전체 삼각형에 대해 보간하는 정점 별 조명은 바닥에있는 경우처럼 삼각형이 빛과의 거리에 비해 상당히 큰 경우 결과가 좋지 않습니다. 픽셀 별 조명을 사용하는 경우에는 자체 조각 쉐이더를 작성해야하지만 전체 바닥에 대해 하나의 쿼드 만 사용할 수 있으며 조명이 얼마나 가깝거나 멀리 있더라도 조명은 ​​정확합니다.

은 참조 : 당신은 기존의 고정 기능 GL 인터페이스를 도랑과 프로그램 파이프 라인을 사용하는 경우 http://www.swiftless.com/tutorials/glsl/5_lighting_perpixel.htmlhttp://en.wikipedia.org/wiki/Per-pixel_lighting

+0

-1 : 유용한 정보이지만 실제 문제는 해결되지 않습니다. –

+0

@ NicolBolas : "문제에 대한 더 나은 해결책 제시"는 문제를 해결하는 데 유용하다고 생각합니다. 하지만 그건 나뿐 이니? – sheu

+0

그러나 실제 문제는 해결되지 않습니다. 그것 * 숨 깁니다. 그는 여전히 텍스처 작업을 올바르게하는 방법을 모릅니다. 당신의 방법은 그에게 그의 무지를 숨길 수있는 방법 일 것입니다. 어쨌든 하나의 표면에 여러 다각형을 사용하는 이유는 바로 조명이 아닌 이유입니다. 귀하의 답변은 의견으로 더 잘 작동합니다. –

관련 문제