[DX3D] 반사광
·
개발/DX11
반사광픽셀 쉐이더에서 반사 벡터를 계산하면 각 픽셀마다 반사 벡터 값이 나오는데 이를 카메라가 오브젝트를 쳐다보는 방향, 즉 Eye Vector와 이루는 각도를 비교하여 반사광을 계산할 수 있다. 구현을 위해 필요한 것들은 아래와 같다. 1. 픽셀의 View Space 위치2. 카메라의 View Space 위치3. Eye Vector4. 반사벡터 View Space는 카메라가 기준이 되기 때문에 카메라의 위치가 (0.f, 0.f, 0.f)이므로 카메라의 View Space 위치를 따로 생각할 필요가 없고, 또한 픽셀의 View Space에서의 좌표가 곧 Eye Vector가 된다.   두 벡터를 Normalize 하여 Reflect Vector와 -Eye Vector를 내적하면 두 벡터의 cos 값이 나..
[DX3D] 반사 벡터
·
개발/DX11
반사 벡터3D Light 구현을 위해 반사광 계산을 해야 하는데 반사 벡터를 이용할 수 있다.HLSL에는 reflect() 라는 반사 벡터를 구하는 함수가 존재하지만 과정을 유도하여 직접 반사벡터를 구해보겠다. 1. 빛의 방향을 v, 표면의 노말 벡터를 n 이라고 했을 때 반사 벡터는 r 이다.2. 입사각과 반사각은 같으므로 반사 벡터 r 은 v와 노말 벡터 n 을 축으로 하여 대칭 모양이 된다. 3. 반사 벡터 r 은 v 벡터에 (-v · n) 을 두 번 더한 결과이므로 r = v + 2 (-v · n) 이 나오게 된다.4. 마지막에 n을 곱해주는 이유는 (-v · n) 이 스칼라 값이므로 단위 벡터인 n을 곱해주어 벡터로 만들기 위함이다.
[DX3D] Cube Mesh
·
개발/DX11
법선, 접선, 종법선법선(Normal) : 한 평면에 수직인 벡터접선(Tangent) : 정점 표면의 정보종법선(Bi-Normal) : 노말의 수직인 벡터 (접선과 법선의 외적)    정점2D 에서는 인덱스 버퍼를 이용하여 정점 4개 만을 사용해 RectMesh를 생성했었다. 3D 에서는 표면에 수직인 법선 벡터를 알아야 빛의 세기를 계산할 수 있으므로 (램버트 코사인 법칙 참고) 기존에 정점이 가지고 있던 정보인 Pos, Color, UV 값에 법선 벡터 정보가 추가되어야 한다.더 다양한 3D Light 연산을 위해 접선, 종법선 벡터도 같이 추가해 준다.  Rect Mesh  Rect Mesh 는 정점 6개로 Triangle Mesh 2개를 이어붙인 구조였다. 여기서 인덱스 버퍼를 활용하면 정점 수를..