다음 코드를 고려하십시오. imageDataf는 float *입니다. 사실, 코드에서 보듯이 광선 추적기로 만든 float4 값으로 구성됩니다. 물론, 색상 값은 선형 공간에 있고 화면의 출력을 위해 감마 보정이 필요합니다. 그래서 내가 할 수있는 것은 2.2의 감마 보정을 가진 간단한 for 루프입니다 (for 루프를 참조하십시오). 또한 GL_FRAMEBUFFER_SRGB_EXT를 사용할 수도 있습니다. 거의 틀림없이 작동하지만 "밴딩"문제가 있습니다. 왼쪽 GL_FRAMEBUFFER_SRGB_EXT를 사용GL_FRAMEBUFFER_SRGB_EXT 밴딩 문제 (감마 보정)
는 바로 서, 감마 보정이다. 오른쪽 그림이 완벽 해 보인다. 일부 모니터에서이를 감지하는 데 약간의 어려움이있을 수 있습니다. 누구든지이 문제를 해결하는 방법을 알고 있습니까? 나는 CPU 버전이 GUI를 약간 느리게 만드는 것처럼 "자유"에 대한 감마 보정을하고 싶습니다. 실제 광선 추적은 GPU (optix)를 사용하는 다른 스레드에서 수행되므로 사실 렌더링 성능이 빨라집니다. GL_FRAMEBUFFER_SRGB
활성화되면
GLboolean sRGB = GL_FALSE;
glGetBooleanv(GL_FRAMEBUFFER_SRGB_CAPABLE_EXT, &sRGB);
if (sRGB) {
//glEnable(GL_FRAMEBUFFER_SRGB_EXT);
}
for(int i = 0; i < 768*768*4; i++)
{
imageDataf[i] = (float)powf(imageDataf[i], 1.0f/2.2f);
}
glPixelStorei(GL_UNPACK_ALIGNMENT, 8);
glDrawPixels(static_cast<GLsizei>(buffer_width), static_cast<GLsizei>(buffer_height),
GL_RGBA, GL_FLOAT, (GLvoid*)imageDataf);
//glDisable(GL_FRAMEBUFFER_SRGB_EXT);
+1 : nice 대답 – radical7
물론 GL_FRAMEBUFFER_SRGB를 사용할 때 for 루프를 주석 처리합니다. 물론 생성 된 이미지에서 분명해야합니다. 글쎄, GUI의 약간의 지연 외에는 GPU가 혼자서 실제 광선 추적을 할 수 있도록 할 것이므로 제게 벌금이 부과되지 않습니다. 당신의 도움을 주셔서 감사합니다. – apartridge