홈
태그
미디어로그
위치로그
방명록
Angler Blog
(115)
일상생활_리뷰
(1)
UnrealEngine
(3)
ROS
(3)
Network
(5)
GamePrograming
(35)
Create Game
(9)
Direct3D
(14)
OpenGL
(4)
Orge Engine
(4)
내가본 GPG_One
(4)
랭귀지
(20)
C\C++
(5)
API
(4)
MFC
(7)
OpenMP
(4)
KAU
(38)
운영체제
(4)
Linux
(34)
iOS
(1)
언어정리
(4)
휴양
(0)
ABOUT ME
-
트위터
인스타그램
Today
-
Yesterday
-
Total
-
Angler
Angler
메뉴
검색
컨텐츠 검색
블렌딩
GamePrograming/Direct3D
2009. 5. 4. 22:53
알파 테스트와 알파블렌딩에 대한 설명은 윗분이 설명해주신데로(DX 도움말에 있는데로)입니다. D3DRS_ALPHATESTENABLE가 TRUE로 설정되어 있을때 D3DRS_ALPHAFUNC이 D3DRS_ALPHAREF을 이용해서 테스트를 실행합니다.D3DRS_ALPHATESTENABLE가 FALSE이면 당연히 D3DRS_ALPHAFUNC, D3DRS_ALPHAREF는 설정안하셔도 됩니다.그리고 알파테스트를 통과했을 경우에 한해서 알파블렌딩이 일어납니다.참고로,알파테스트를 통해서 알파블렌딩할 영역을 줄여주는게 퍼포먼스에 도움이 됩니다 //알파테스팅 - Z축에 대한 알파가 먹히게 된다. m_pDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE); m_pDevice->SetRenderState( D3DRS_ALPHAREF, 0x08 ); m_pDevice->SetRenderState( D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL ); //알파블랜딩 - 일반적 반투명 알파로서 그려지는 순서대로 알파가 먹힌다.(Z축에 대한 알파 안먹힘) m_pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE); m_pDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); m_pDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); //D3DBLEND_INVSRCALPHA -> D3DBLEND_ONE 로 하면 더 밝게 알파연산을 할 수 있으나 원래 이미지가 퇴색 //텍스처컬러와 디퓨즈(버텍스컬러)컬러 를 모듈레이트 시켜서 출력시킨다. //텍스처알파와 디퓨즈(버텍스알파)알파 를 모듈레이트 시켜서 출력시킨다. m_pDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE); m_pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); m_pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE); m_pDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE); m_pDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); m_pDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE); //텍스처컬러와 백터컬러를 모듈레이트 시켜서 출력한다 //텍스처알파와 백터알파를 모듈레이트 시켜서 출력한다. m_pDevice->SetRenderState(D3DRS_TEXTUREFACTOR, D3DXCOLOR); m_pDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE); m_pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TFACTOR); m_pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_TEXTURE); m_pDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE); m_pDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TFACTOR); m_pDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_TEXTURE); ---------------------------------------------------------------------------------------- 특정 텍스처에 알파값 변경하기 DWORD alpha = 175; -> 일정 시간마다 요 값만 변경해주면 알파값이 변한다. driver->getDevice()->SetRenderState(D3DRS_TEXTUREFACTOR, (0x00ffffff)+(alpha<<24)); driver->getDevice()->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 ); driver->getDevice()->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); driver->getDevice()->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE ); driver->getDevice()->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE ); driver->getDevice()->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_TFACTOR ); 설정해주고, setTexture()한 뒤, render한다. 그리고 나서 SetRenderState(D3DRS_TEXTUREFACTOR, 0xffffffff); <-- 요걸 반드시 해주자. 해주지 않는다면, 그 외 다른 텍스처에도 알파값이 전부 적용되어 버린다!!ㅋ
공유하기
게시글 관리
Angler
관련글
관련글 더보기
MFC Direct X 연동
사원수를 이용한 로테이션
ASE Animation [ *TM_ANIMATION FINAL ]
ASE Animation [ *TM_ANIMATION 2 ]
댓글
댓글 접기
댓글 펼치기
티스토리툴바