ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 블랜딩 공식을 이용해 텍스쳐에 컬러키 지정.
    3D Graphics/Open GL 2007. 8. 4. 04:45
    728x90

    일단 블랜딩 모드를 켜고 시작합니다. 더불어서 깊이검사를 끔으로써 블랜딩시 계산의 실수가 없도록 합니다.

    glDisable(GL_DEPTH_TEST);
    glEnable(GL_BLEND);

     다음으로 컬러키를 지정하는 부분입니다. 마스크 개념을 이용하는데 지워질 영역은 흰색, 뿌려야할 부분은 검은색을로 텍스쳐를 만들어서 그립니다.

    glBlendFunc(GL_DST_COLOR,GL_ZERO);
    //여기서 마스크 이미지를 그린다.

    다음은 이제 원본 이미지를 그릴 차례입니다. 원본 이미지는 지워질 부분을 검은색으로 칠합니다. 그리고 블랜딩 옵션은 아래처럼 조정합니다.

    glBlendFunc(GL_ONE,GL_ONE);
    //여기서 원본 이미지를 그린다.

    작업이 끝났으면 상태를 복구시키도록 합니다.

    glDisable(GL_DEPTH_TEST);
    glEnable(GL_BLEND);

    그리고 뒤에 그려질 다른 이미지에 영향을 받지않도록 컬러설정도 디폴트로 복원합니다.

    glColor4f(1,1,1,1);

    조금 다른예로 PLIB를 이용해 배경이 투명한 글자를 그리는 코드를 보여드리죠.

    text -> setFont ( new fntTexFont ( "Resorce/font/old/derniere.txf" ) ) ;
    text -> setPointSize ( 30.0f ) ;

    glDisable(GL_DEPTH_TEST);
    glEnable(GL_BLEND);

    glBlendFunc(GL_DST_COLOR,GL_ONE_MINUS_SRC_COLOR);
    text -> begin () ;
    glColor3f ( 0, 0, 0 ) ;
    text -> start2f ( 140.0f, -100.0f ) ;
    text -> puts ( "Hello World." ) ;
    text -> end () ;

    glBlendFunc(GL_ONE,GL_ONE);
    text -> begin () ;
    glColor4f ( 0.0f, 0.0f, 0.5f ,1) ;
    text -> start2f ( 140.0f, -100.0f ) ;
    text -> puts ( "Hello World." ) ;
    text -> end () ;

    glDisable(GL_DEPTH_TEST);
    glEnable(GL_BLEND);
    glColor4f(1,1,1,1);

     블랜딩옵션을 잘 이용하면 여려가지 멋진효과를 만들수가 있습니다. 이펙트 구현시 필수적인 요소죠~^^ 시간이 나는데로 블랜딩에 대한 글을 좀더 올리도록 하겠습니다~

    댓글

Designed by black7375.