Alpha는 투명도를 나타낸다
255일때 젤 불투명
0일때 투명
Alpha blend는 Alpha값을 써서 두 색상을 섞는 것
물체가 있고 막을 통해 내가 그 물체를 본다 했을때
가림막 RGB *A (0.5)로 하면
물체의 알파가 0.5 비율이 되면서
알파를 각각 곱한 RGB를 더해서 반투명하게 보이게 한다
서로 곱해준 Alpah의 전체 알파 비율의 합이 1이 되어야 한다
비트맵은 alpha가 따로 존재 하지 않음
따라서 알파를 따로 추가 해줘야 함
이미지 속성->자세히 ->비트수준이 24비트 라는 건 알파값이 존재 하지 않는 것이다
페이드 아웃은 점점 불투명 해지다가 검해지는 것 따라서 Alpha가0~255로 가야한다
페이드 인 은 그 반대로
fade in , out을 이벤트로 하여 호출되면
camera에서 이벤트들을 갖고 있다가 순서대로 처리하는 구조를 가진다
void CCamera::render(HDC _dc){
if (m_listCamEffect.empty())//갖고 있는 이벤트들이 없다면
return;
tcamEffect& cameffect = m_listCamEffect.front();//젤 앞에 있는 이벤트 참조
cameffect.m_fCurTime += fDT;//진행 시간 체크
float fRatio = 0.f;
fRatio = cameffect.m_fCurTime / cameffect.m_fDuration;//이벤트 진행 비율
if (CAM_EFFECT::FADE_OUT == cameffect.eEffect)
{
}
if (CAM_EFFECT::FADE_IN == cameffect.eEffect)
{
fRatio =1-fRatio;
}
if (fRatio < 0.f)
fRatio = 0.f; //fRatio가 dt에 의해 계산되고
//진행시간이 최대지정 시간을 넘어간 마지막 프레임까지 렌더를 하기 때문에 설정
if (fRatio > 1.f)
fRatio = 1.f;
Vec2 vResolution = CCore::GetInst()->Get_Resoulution();
int iAlpha = (int)(255.f * fRatio);
BLENDFUNCTION bf = {};
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.AlphaFormat = 0;//내가 만든것이 아닌 전역 알파를 사용하기 때문에
//내가 따로 alpha채널을 한 이미지라면 AC_SRC_ALPHA
bf.SourceConstantAlpha = iAlpha; //알파값을 넣는다
AlphaBlend(_dc, 0, 0,
(int)vResolution.x, (int)vResolution.y
, m_pVeilTex->Get_dc(), 0, 0,
(int)vResolution.x, (int)vResolution.y, bf);
if (cameffect.m_fCurTime > cameffect.m_fDuration)//이벤트 진행시간이 최대 지정시간을 넘어섰을때
{
m_listCamEffect.pop_front();
}
}