1. 개요
카툰랜더링이나 캐릭터 선택효과에 주로 쓰이는 실루엣 기법을 알아본다.
2.경계선 메쉬 만들기
메쉬를 구성하는 모든 edge들을 퇴축 사각형(넓이가 0인 사각형)으로 재구성한다.
A B
*--------*
| edge |
*--------*
C D
초기에 A==C , B==D 이 다.
이부분은 silhouetteEdges.cpp,silhouetteEdges.h가 처리를 해준다.
SilhouetteEdges객체 초기화는 아래와 같이 메쉬를 넣어서 만든다.
ID3DXBuffer* adjBuffer = 0;
D3DXCreateTeapot(Device, &Teapot, &adjBuffer);
OutLineShader::g_pMesh = new SilhouetteEdges(Device, Teapot, adjBuffer);
SAFE_RELEASE(adjBuffer);
랜더방법은 아래와같이 쉐이더 적용후에 render함수를 호출해준다.
pd3dDevice->SetVertexShader(OutLineShader::g_pShader);
...
OutLineShader::g_pMesh->render();
3. 실루엣 외각선 구분하기
두개의 면을 공유하는 외각선이 있을때 관찰자 기준으로 두개의 면이 서로 다른방향을 보면 그 외각선은 실루엣 외각선이다.
이부분은 outline.hlsl 이 처리한다.
4. 결론
출처 : http://gbox2.blog.me/100050813839