내 디버깅에서 길이가 128 픽셀 인 1D 텍스처로 인해 좌표를 [0,1]
범위가 아닌 GLSL 조각 셰이더의 texture1D
으로 전달해야하지만 [0,1-1./257]
과 같은 것으로 나타났습니다 (증가 257->258
은 아티팩트 다시, 이등분으로 얻은 수는 0.99610897
). 그렇지 않으면 s==0
에서 얻은 값을 반복합니다.텍스처 좌표 범위가 가장자리 텍셀의 바깥 쪽 가장자리에서 끝나나요?
텍스처 파라미터 GL_TEXTURE_WRAP_T
을 기본값 GL_REPEAT
대신 GL_CLAMP_TO_EDGE
으로 설정하면 물론 이것은 발생하지 않습니다.
텍스처 좌표 범위의 끝이 가장자리 텍셀의 중심이 아니라 그 바깥 쪽 가장자리에 있다는 결론에 도달했습니다.
그것은 그때 (GL_REPEAT
모드에서) GL_NEAREST
에 GL_TEXTURE_*_FILTER
를 설정하면 샘플링이 s
지정의 오른쪽에있는 텍셀에서 보이는 것처럼 GL_LINEAR
필터는 평균을 취하면서, 그것이 작동 나을 좌우 s==1
에 대한 텍셀입니다.
내 결론이 맞습니까? 텍스쳐 좌표의 끝은 텍셀의 바깥 쪽 가장자리가 아닌, 그 중심에있다.
예. 이것이 실제로 의미있는 유일한 방법입니다. [0, 1]은 텍셀의 전체 범위를 다루기 때문에, s = 1은 가장 오른쪽의 텍셀의 오른쪽 모서리 여야한다. 동일한 질문은 아니지만 설명은 내 대답과 매우 유사합니다. http://stackoverflow.com/questions/31810822/opengl-3d-texture-shine-through. –