2013-09-23 2 views
0

텍스처를 사용하여 그림에 효과를 적용하는 색상 조회를 수행하고 있습니다. 내 조회는 첫 번째 텍스처의 조각의 광도를 사용하는 그래디언트 맵입니다. 그런 다음 두 번째 텍스처에서 그 빛을 보았습니다. 두 번째 텍스쳐는 256x256이고, 그라디언트는 수평으로, 그리고 여러 그라디언트는 위에서 아래로 나타납니다. 그래서 32 개의 가로 줄무늬가 각각 8 픽셀 큽니다. x에 대한 내 조회는 휘도, y는 그라디언트이며 크로스 오버를 피하기 위해 스트라이프의 중심을 대상으로합니다.텍스처 좌표가 텍스처 가장자리를 벗어나는 1.0 인 이유는 무엇입니까?

내 조각 쉐이더는 다음과 같습니다 : 그것은 잘 작동하지만 내가 백인과 흑인의 가장 검은 부분의 가장 흰 부분에서 왜곡을 얻고 있었다

lowp vec4 source = texture2D(u_textureSampler, v_fragmentTexCoord0); 
float luminance = 1.0 - dot(source.rgb, W); 
lowp vec2 texPos; 
texPos.x = clamp(luminance, 0.0, 1.0); 
// the y value selects which gradient to use by supplying a T value 
// this would be more efficient in the vertex shader 
texPos.y = clamp(u_value4, 0.0, 1.0); 

lowp vec4 newColor1 = texture2D(u_textureSampler2, texPos); 

. 기본적으로 texture2의 완전히 다른 곳에서 newColor를 가져온 것처럼 보였습니다. 아니면 그 조각에 대해 아무 것도 얻지 못했을 수도 있습니다. 쉐이더에 클램프를 추가하여 룩업 텍스처의 가장자리를 벗어나지 못하게했지만 그로 인해 도움이되지 않았습니다. 클램프를 올바르게 사용하지 않습니까?

마지막으로 나는 소스 텍스처 또는로드되는 방식과 관련이 있다고 생각했습니다. 나는 다음과 같이 덧붙여 수정했다.

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

그래서 .. 왜?

내 textPos.x하면 .. 그것은 내가 조회 테이블을로드있을 때 내 코드에서 예외를 작성해야 의미하기 때문에 텍스처를 고정해야하는 약간의 짜증과 .Y는에 고정된다 0-1 .. 가장자리를 넘어 샘플을 어떻게 끌어 당기는가?

또한 .. 텍스처를 만들 때 위의 클램프 호출을 사용해야합니까, 아니면 텍스처를 사용할 때 호출 할 수 있습니까?

답변

3

이것은 질감 샘플러의 올바른 동작입니다.

설명해 드리겠습니다. GL_LINEAR 샘플링 GPU로 텍스처를 사용하면 주변 픽셀과 혼합 된 픽셀의 평균 색상이됩니다 (이 때문에 GL_NEAREST 모드로 픽셀 화되지 않고 픽셀이 흐리게 표시됩니다). GL_REPEAT 모드 텍스처 좌표는 0에서 1로 또는 그 반대로 바뀝니다. 근처 픽셀과 블렌딩합니다 (즉, 극단적 인 좌표에서 텍스처의 반대쪽면과 혼합됩니다). GL_CLAMP_TO_EDGE은이 줄 바꿈 동작을 방지하고 픽셀은 텍스처의 반대쪽 픽셀과 섞이지 않습니다.

희망 사항은 분명합니다.

+0

그래서 GL_LINEAR에 있다면 쉐이더를 클램프하는 것은 불가능합니까? 그것은 OpenGL 호출로 고정해야합니까? glTexParameteri 호출은 어떻게됩니까? 텍스처를 바인딩 할 때 사용할 수 있습니까? 아니면 텍스처를로드 할 때 수행해야합니까? – badweasel

+0

@badweasel 당신은 *** 쉐이더에서 클램핑을 구현할 수 있습니다. 실제로'GL_CLAMP_TO_EDGE' *는 좌표 범위를 [0 + 0.5/texSize, 1-0.5/texSize]로 제한합니다. 이로 인해 *** 정확한 *** 텍셀 중심에서 샘플링이 발생하므로 인접한 텍셀을 사용하는 보간이 결코 발생하지 않습니다. –

+0

@badweasel이 특별 보증은 물론 에지 텍셀을 샘플링 할 때만 적용되므로 이름이 적용됩니다. –

관련 문제