내 렌더링은이 두 개의 수직 쿼드의 가장자리를 따라 픽셀을 출혈 (빨간색 점)합니다.직교 렌더링을하지 않을 때 어떻게 반 텍셀 오프셋이됩니까?
내가 사용하고 있습니다 :
GL_NEAREST
최소/최대 텍스처 필터링합니다.texture
프래그먼트 셰이더에서 작동합니다. 원하는 스프라이트 @와 함께 1024 × 1024의- 스프라이트 아틀라스 (X = 320, Y = 732, 폭 = 8, 높이 = 8)
s1 = 320.0f/1024.0f; s2 = (320.0f+8.0f)/1024.0f; t1 = 732.0f/1024.0f; t2 = (732.0f+8.0f)/1024.0f;
어두운 질감 # 1 (렌더 쉽게) 출혈을 볼 수 있도록 :
렌더 # 2 (밝은 텍셀을 카운트 텍스처하지만 적색 화소가 여전히 존재한다)와 :
OpenGL의 texture
함수는 픽셀 중심에서 샘플링되지만, "S, T"좌표를 반 화소만큼 오프셋하려고하면 (수정되지만) 부작용이 있다는 것을 알고 있습니다.
예를 들어 아래의 텍스처 좌표는 스프라이트 테두리를 따라 텍셀의 너비를 줄입니다.
s1 = (0.5f+320.0f)/1024.0f; s2 = (0.5f+320.0f+8.0f)/1024.0f; t1 = (-0.5f+732.0f)/1024.0f; t2 = (-0.5f+732.0f+8.0f)/1024.0f;
I는 T가 결합 오프셋 수 S & 무리 시도 (모두 0.5 추가 S는 & T, T로 첨가되지만 S로부터 뺀 양에서 차감)과 다른 값, 그것의 아무도는 작동하지 않았다. 내가 뭘 놓치고 있는지 모르겠다. 출혈하는 픽셀 색상이 텍스처가 아닌 배경에서 나오기 때문에 T- 접합 문제라고 생각하지 않습니다.
흥미 롭습니다. 따라서 [0,1]을 고정하거나 오쏘 렌더링을 사용하지 않으면 조각 쉐이더에서 좌표를 클램프해야합니까? –
예. 이 작업을 수행하기 전에 클램프 - 투 - 에지를 재조합하지 않고 대신 텍스처를 늘려야합니다. 무언가 일어날 수있는 유일한 곳은 [320, 320.5]와 [327.5, 328] 사이의 영역입니다. 다른 곳에서는 텍스처에 특별한 것이 없어야합니다. 투영법 (오르 소 또는 원근법)은 전혀 차이가 없습니다. 정사영 렌더링을 사용하더라도 조각 쉐이더에서이를 수행해야합니다. – BDL