그래픽 헤더에 상수 0.0039215689는 뭘 하는 건가요?
조회수 2232회
그래픽 헤더 파일에서 0.0039215689
가 엄청 많이 쓰이는데
무슨 의미가 있는 건가요?
왜 const
로 설정하지도 않고 왜 꼭 다 0.0039215689
로 쓰나요?
소스코드
구글에서 제일 먼저 나오는 코드를 보면 (여기)
void RDP_G_SETFOGCOLOR(void)
{
Gfx.FogColor.R = _SHIFTR(w1, 24, 8) * 0.0039215689f;
Gfx.FogColor.G = _SHIFTR(w1, 16, 8) * 0.0039215689f;
Gfx.FogColor.B = _SHIFTR(w1, 8, 8) * 0.0039215689f;
Gfx.FogColor.A = _SHIFTR(w1, 0, 8) * 0.0039215689f;
}
void RDP_G_SETBLENDCOLOR(void)
{
Gfx.BlendColor.R = _SHIFTR(w1, 24, 8) * 0.0039215689f;
Gfx.BlendColor.G = _SHIFTR(w1, 16, 8) * 0.0039215689f;
Gfx.BlendColor.B = _SHIFTR(w1, 8, 8) * 0.0039215689f;
Gfx.BlendColor.A = _SHIFTR(w1, 0, 8) * 0.0039215689f;
if(OpenGL.Ext_FragmentProgram && (System.Options & BRDP_COMBINER)) {
glProgramEnvParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 2, Gfx.BlendColor.R, Gfx.BlendColor.G, Gfx.BlendColor.B, Gfx.BlendColor.A);
}
}
//등등..
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
0.0039215689
는1/255
와 가까운 값입니다.OpenGL같은 그래픽 관련 코드에서는 퍼포먼스를 중시하기때문에
255
로 나누는것 보다는 역수를 곱하는게 더 빠른 방법이라 저렇게 쓰는 것이지요.보통 이런 최적화는 컴파일러에게 맡기는게 일반적이지만, 부동소수점에서는 round-off에러같은 오차가 발생할 수 있기 때문에 프로그래머가 별도로 해준 것 같습니다.
관련된 질문으로는 GCC가 a*a*a*a*a*a를 (a*a*a)*(a*a*a)로 최적화 하질 않습니다.를 봐주세요
댓글 입력