약 here입니다.
기본적으로 부동 소수점 텍스처는 데이터가 부동 소수점 유형 인 텍스처입니다. 즉 클램핑되지 않습니다. 따라서 텍스처에 3.14f가 있으면 셰이더에서 같은 값을 읽습니다.
채널 수를 달리하여 만들 수 있습니다. 또한 형식에 따라 16 비트 또는 32 비트 텍스처를 생성 할 수 있습니다. 예 : 데이터는 다음과 같이 될 수
// create 32bit 4 component texture, each component has type float
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 16, 16, 0, GL_RGBA, GL_FLOAT, data);
:
이
float data[16][16];
for(int i=0;i<16*16;++i) data[i] = sin(i*M_PI/180.0f); // whatever
다음 쉐이더에서 정확히 같은 얻을 수있는 값 (당신은 FLOAT32 텍스처를 사용하는 경우).
uniform sampler2D myFloatTex;
float value = texture2D(myFloatTex, texcoord.xy);
는 16 비트 포맷을 사용한다면, 당신은 쉐이더에서 읽을 때마다 당신은 convertion이있을 것이다, GL_RGBA16F을 말한다. 그래서 이것을 피하기 위해 half4 타입을 사용할 수 있습니다 : half4 value = texture2D (my16BitTex, texcoord.xy);
기본적으로 정규화 된 8 비트와 부동 소수점 텍스처의 차이점은 첫 번째 경우 값이 [0..1] 범위로 고정되고 클램핑되지만 후자는 값을 그대로 받게된다는 점입니다 16 < -> 32 변환을 제외하고 위의 예 참조).
FBO를 렌더 타겟으로 사용하고 싶지 않을 수도 있습니다.이 경우 모든 포맷이 렌더 타겟으로 첨부되지 않을 수도 있습니다. 예 : 휘도 및 강도 형식을 첨부 할 수 없습니다.
또한 모든 하드웨어가 부동 소수점 텍스처 필터링을 지원하지는 않으므로 필요한 경우 먼저 하드웨어에서 검사해야합니다.
희망이 도움이됩니다.
데이터를 셰이더 (예 : 등가)로 가져 오는 데 유용합니다. – pmr
그러면 채널 이미지 당 일반 RGB 또는 RGBA 8 비트를 읽고 어떻게 값을 내부적으로 해석합니까? 예 : 0-255 또는 0-1 범위의 값이 내부적으로 다른 다른 범위로 조정됩니까? – lokstok
@lokstok. '정규화 된'이라는 glTexImage에 대한 매개 변수가 있습니다. "true"로 설정하면 입력 바이트가 [0,1] 범위로 변환됩니다. 그렇지 않으면 나는 당신이 [0-255] (나는 그것을 시도하지 않았다)를 얻을 것이라고 생각한다. – kvark