그래픽 헤더에 상수 0.0039215689는 뭘 하는 건가요?


그래픽 헤더 파일에서 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);
    }
}
//등등..

  • 2016년 01월 29일에 작성됨

조회수 203


1 답변


좋아요
0
싫어요
채택취소하기

0.00392156891/255와 가까운 값입니다.

OpenGL같은 그래픽 관련 코드에서는 퍼포먼스를 중시하기때문에 255로 나누는것 보다는 역수를 곱하는게 더 빠른 방법이라 저렇게 쓰는 것이지요.

보통 이런 최적화는 컴파일러에게 맡기는게 일반적이지만, 부동소수점에서는 round-off에러같은 오차가 발생할 수 있기 때문에 프로그래머가 별도로 해준 것 같습니다.

관련된 질문으로는 GCC가 a*a*a*a*a*a를 (a*a*a)*(a*a*a)로 최적화 하질 않습니다.를 봐주세요

  • 2016년 01월 29일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close