2017-04-01 4 views
-1

텍스처를 바둑판 식으로 조각하는 조각 쉐이더를 만들었습니다. 코드에서 볼 수 있듯이 실제로 텍스처 배열입니다. 그러나 각 타일 주위에 매우 흉측 한 1 픽셀 테두리가 있습니다. mipmapping하는 동안 이상한 물건을 일으키는 함수의 불연속성으로 인해 발생할 수 있습니다 알지만, mipmapping 사용 안 함 (비록 내가 안티 앨리어싱 사용하고 있습니다). 여기 내 코드입니다 : 내가 반올림 오류에 대한 내성의 비트를 제공 할 거라고 생각밉 매핑을 사용하지 않을 때 바둑판 식 테두리를 제거하는 방법

vec2 tiledCoords = fract(pass_textureCoords * 256.0)/4.0; // pass_textureCoords are the texture coordinates 

out_Color = texture(testArray, vec3(tiledCoords.x, tiledCoords.y, 0)); // testArray is the sampler2DArray 

,하지만 난 그것을 넣을 위치를 알아낼 수 없습니다. 이 추한 테두리를 제거하려면 어떻게해야합니까? 미리 감사드립니다! Ugly lines

+0

텍스처 매개 변수는 어떻게 설정됩니까? 랩 모드 및 필터 관련. – pleluron

+0

@pleluron 랩 모드 나 필터가 없습니다. 나는 텍스쳐를'glTexSubImage3D' (배열을 사용하고 있기 때문에)를 사용하여 정기적으로로드하고 렌더링하기 전에 단순히 텍스처를 바인딩했습니다. –

+0

또한'GL_CLAMP_TO_EDGE'를 사용합니까? 그렇지 않다면 (당신의 의견이 암시 하듯이) 텍스쳐 좌표 인'0.0'과'1.0'은 텍스쳐 밖에 있고 검은 색 테두리를 치고 있습니다. 텍스쳐가 '256x256'이라면 좌표는 '<0.0 , 1.0>'대신에 '<1/256, 255/256>'이되어야합니다. – Spektre

답변

2

나는 당신이 당신의 코드에서 계산으로 뭘 하려는지 정확히 모르겠어요 : 여기

는 스크린 샷입니다. 첫 번째 줄은 결과에 전혀 기여하지 않는 것 같습니다 (두 번째 줄에서 덮어 씁니다). 필터 모드 나 랩 모드를 설정하지 않았으므로 선형 필터링과 반복 모드 인 기본 설정이 활성화됩니다.

[0, 0.25]의 범위에서 tiledCoords를 사용하고 있으며 0.25에서 0으로 감싸는 것처럼 보입니다. 선형 필터링은 0.25의 자동 감싸기 모드가 없기 때문에 자동으로 작동하지 않습니다 -> 0 전이. 검정색 선은 [0, 1/(2 * num_pixels)] 범위의 선형 보간에서 발생합니다.이 영역은 0 번째 텍셀과 "-1st"텍셀 사이에서 선형으로 삽입되기 때문입니다 (래핑 모드로 인해 마지막 텍셀 조직). [0.25 - 1/(2 * num_pixels), 0.25] 범위에서 똑같은 일이 발생합니다. 여기서 텍스쳐 좌표 0.25의 바로 왼쪽에있는 픽셀을 텍셀 오른쪽으로 보간합니다.

시나리오에서 하드웨어 선형 보간을 얻는 방법은 없습니다. 가장 가까운 이웃 샘플링을 사용하거나 선형 보간을 수동으로 계산할 수 있습니다.