📒3D Vtx
📌복습: VB & IB

- 다각형을 그리기 위해서는 중첩된 정점이 발생함
- Index Buffer: 정점을 재활용하므로 같은 정점을 두 번 만들지 않음
📌Normal Vector & Tangent Vectors
3D Vertex에는 정점의 방향 정보가 추가됨


- Normal: (정점 표면 방향 벡터) 표면의 수직 방향으로 향함
- Tangent: (접선 벡터) Normal Vector에 수직이며 UV의 U축으로 향하는 벡터
- DX에서 UV의 U축은 왼손좌표계 기준 우측으로 향하는 벡터임
- Binormal: (종법선 벡터) Normal Vector에 수직이며 UV의 V축으로 향하는 벡터
- Normal과 Tangent 벡터에 모두 수직한 벡터
[복습] Vertex Struct 변경 시
📌추가된 벡터(방향정보)의 사용
: 3D Lighting
📒3D Shader
📌Vertex Shader
: Vtx의 방향 계산
- 단위벡터
- 확장: 좌표가 아닌 단위벡터이므로 0으로 확장
- Rotate에만 영향받아야 함: World Matrix는 Scaling이 이미 적용되어 있으므로 Normalize 필요
- 좌표계: Local -> World 변환
- Vtx의 정보는 Local 좌표계 기준으로 들어오지만,
- Light의 World 방향과 연산 등
- World상에서의 normal 방향을 표기해 사용해야 하므로
- World좌표계로 옮겨줘야 함
📌Pixel Shader
: 최종 출력 색상 결정
- Obj color * Light color * Light Pow
- + Obj color * Light Amb color
📌Light Pow의 범위
: 0~1
- 음수일 수 없음
- Ambient color 등 빛의 개념을 의도대로 적용하기 위해선 0~1에서 잘라줘야 함
📒3D Debug Shading
📌Inner Glow
- Sphere의 중앙일수록 Normal이 카메라를 보고
- Sphere의 가쪽일수록 Normal이 카메라와 직교함
- 카메라의 시선벡터 (부호반대)와 내적해서 유사도 계산
- alpha = ~유사도
📒3D Mesh
📌Normal, 평면과 곡면
[평면]
: 극단적으로 표면의 각이 변화하는 경우
- ex Cube Mesh
- Normal 공유할 수 없음
- 4*6 개의 Vtx 필요
[곡면]
: 표면의 각이 부드럽게 변화하는 경우
- ex Sphere
- Normal 중간값으로 둬서 공유해도 됨
📌Culling
: Cull-Back
-
3D Light 연산
- CW를 가정한 Vtx 세팅의 연산결과이므로
- 뒷면(CCW)에서 보더라도 CW의 연산결과를 보게됨
- ➡️ 그냥 뒷면을 그리지 않게 Cull back 사용
-
뒷면을 그리려면
📌(곡면예시) Sphere Mesh 만들기
- Vtx: 가로/세로 분할해 접근
- Normal: 본인의 좌표가 Normal임
- 중점에서 바라보는 방향이 표면의 방향이 되므로