2013-04-05 3 views
1

enter image description here [내 이미지 설명 입력] [2]GL_REPEAT를 사용할 때도 내 텍스처 스트링이 왜 사용됩니까?

크기가 작을 때 벽이 길고 압착 될 때 이미지가 늘어납니다.

텍스처를로드하기위한 내 코드 loadTGATexture 메서드는 superBible에서 가져온 것입니다.

glGenTextures(1,&texture); 
glBindTexture(GL_TEXTURE_2D,texture); 
LoadTGATexture(textureFile, GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, GL_REPEAT); 

내가 텍스처 좌표를 제공하고 코드 조각은 다음과 같습니다

buildingArray[j][0] = n2.x; 
    buildingArray[j][3] = 0; 
    buildingArray[j][4] = n2.y; 

    texBlgArray[j][0] = repeat_after_length; 
    texBlgArray[j][5] = 0; 

    normals[j][0] = normal.x; 
    normals[j][6] = normal.y; 
    normals[j][7] = normal.z; 

    j++; 

내가 1

에 길이 후 반복 설정 (j는 건물의 벽의 인덱스) GL_REPEAT 텍스처는 길이가 1보다 큰 경우에 발생합니다. 하나보다 큰 값으로 설정해야하지만, 그렇게하면 텍스처의 윈도우가 매우 작아지고 커집니다. 창이 표시됩니다. 텍스처를 바둑판 식으로 배열하고 싶습니다. 내 orignal 텍스처 이미지의 크기가 변경되지 않기를 바랍니다. enter image description here

무엇이 잘못 되었나요?

+0

"superBible에서"라고 말하면 직접 구현했거나 문자 그대로 링크하여 호출하고 있다는 의미입니까? – Hydronium

+0

@Hydronium 복사 내 코드에 자신의 메서드를 붙여 넣은 ... 그것은 지상 및 기타 개체에 잘 작동 – Anubha

답변

5

텍스쳐 좌표는 긴 벽에서도 정규화됩니다 (즉, 왼쪽 모서리에는 [0,0], 오른쪽 하단에는 [1,1]). 텍스처를 반복하려면 좌표 1.0을 초과해야합니다. 그래서, 삼각형면의 길이가 x라면, 텍스쳐는 x * some k에 걸쳐 있어야합니다.

+0

편집 후 코드를 붙여 넣은 2 나는 당신의 제안을 따랐지만 이렇게하면 편집은 매우 작고 많은 수의 창을 만든다. . – Anubha

+1

@Anubha 내가 본 것으로부터, 당신은 단지 각각의 모든 요소에 일정한 요소를 곱했습니다. 당신은 대신 영향을받는 벽에있는 것들만 번식해야했습니다. IOW는 각 벽에 적합한 * 텍스처 좌표를 만듭니다. –

+0

float wallLength = sqrt ((n1.x - n2.x) * \t (n1.x - 2.x) + (n1.y - n2.y) * (n1.y - n2.y)); // 벽 길이에 대한 거리 공식 \t \t // 텍스처가 반복되는 길이 // \t \t int repeat_after_length = wallLength * 0.2; // 최대 텍스쳐 좌표를 위해이 벽 길이 * 0.2를 가졌습니다. – Anubha