2014-09-14 4 views
0

GLSL/OpenGL 텍스처에서 1보다 크거나 0보다 작은 수를 저장하는 방법이 있습니까? 지연 렌더링 프레임 워크에서 작업하고 있는데, 위치가 동일하지 않은 값 (첫 번째 셰이더)으로 저장하려고하면 phong 셰이더 (두 번째 셰이더)에서 0-1 사이의 값만 가져옵니다. 법선과 동일하게 빛이 잘못 표시되었습니다. 이 문제를 해결하는 방법은 첫 번째 쉐이더에서였다OpenGL/GLSL 색상 첨부 범위

gbuffer[x] =normal *0.5 +1. and in phong : normal * 2. - 1. //(non-)homogenious conversation 

하지만이 방법을 사용하지 않습니다.

그래서 현재 텍스처 형식은 RGB입니다. 나는 RGB_16을 시도했지만 검정색 창이 뜹니다.

+0

부동 소수점 텍스처를 살펴 보았습니까? – amgaera

답변

1

GL_RGB16은 여전히 ​​표준화 된 형식이므로 샘플링 된 값은 0.0과 1.0 사이입니다.

[0.0, 1.0] 이외의 범위를 가져와야하는 것은 부동 소수점 텍스처입니다. 3 개의 구성 요소가있는 형식은 16 비트 부동 요소의 경우 GL_RGB16F이고 32 비트 부동 요소의 경우는 GL_RGB32F입니다. 이 두 형식은 렌더링 대상에 대해 지원되지 않을 수도 있습니다 (GL 4.5 사양의 표 8.12 참조). 렌더링 할 필요가있는 경우 4 컴포넌트 버전 GL_RGBA16F 또는 GL_RGBA32F을 사용해야합니다.

여전히 값의 고정 된 범위가있는 경우 오프셋/스케일을 적용하여 지정된 범위를 [0.0, 1.0] 범위로 매핑 한 방법은 실제로 나에게 매우 적합합니다. 예를 들어 GL_RGBA16을 사용하면 16 비트의 정밀도를 얻을 수 있지만 동일한 메모리 사용량을 가진 GL_RGBA16F에서 12 비트의 정밀도 만 얻을 수 있습니다. 4 비트가 지수로 사용되기 때문입니다.

+0

고마워요, 완벽하게 작동합니다. – bitQUAKE

관련 문제