본문 바로가기

DirectX49

19. Frustum Culling - 절두체컬링이라고 불리며 최적화기법 중 하나이다. - 위 사진처럼 카메라가 찍는 범위 안의 물체들만 그려주고, 나머지는 스킵하는 기법 - 레스터라이저 단계에서 시계방향, 반시계방향인지에 따라 한쪽 면을 그려주지 않는 것 이 기법은 어떤 점이 평면을 기준으로 안인지, 밖인지를 검사하는 수식을 통해 구현할 수 있다. - ax + by + cz + d = 0 이 식은 어떤 평면을 이루는 점을 나타낸다. - 이 수식을 만족하면 그 점은 그 평면 안에 있다는 뜻 - 이 수식에서 n(a, b, c)는 노멀벡터(평면과 수직인 벡터)이고, d는 원점에서 평면까지의 거리이다. 왜 n(a, b, c)가 노멀벡터인가? - 임의의 두 점 A(X, Y, Z), B(X', Y', Z')으로 이루어진 벡터 AB가 있다면, - A.. 2023. 1. 28.
18. SkyBox - 월드에서 하늘을 담당하는 큰 박스 - 위 사진처럼 6면에 큰 그림을 붙여서 큐브형태로 조립해서 사용하는게 일반적 - 이번 예제에서는 큐브형태는 아니고 구 모양으로 만듦 스카이 박스의 좌표 변환 - 로컬 좌표에서 스카이박스의 중심점은 (0, 0)이다(당연한 얘기) - 그런데 스카이박스는 말 그대로 배경의 역할을 하기 때문에 움직이거나 할 필요가 없음 - 그렇다고 가만히있어서 플레이어가 스카이박스의 끝에 닿는 일이 생기면 안되니까 - 뷰 좌표 (0, 0) 위치에 고정시키는 것은 어떨까 하는 아이디어 - 말 그대로 카메라를 따라다니는 것이다 - 그냥 (0, 0)에 있으면 되니까 World를 거쳐도, View에서 다시 (0, 0)이다. - 그럼 굳이 World를 거칠 필요가 있을까? 그냥 View 좌표계로 .. 2023. 1. 27.
17. Normal Mapping 노멀 매핑 적용 전의 텍스쳐 - 한 면에 적용되는 네 점의 노멀 벡터를 모두 같게 세팅해줬는데, 그러다보니 - 그 면에 보여지는 무늬가 심심해진다 노멀 벡터란? - 한 점에 접하는 평면과 수직인 벡터 - 정점을 더 세밀하게 나누면 좀 더 선명한 표현이 가능하지만 속도가 현저히 느려짐 노멀 매핑이란? - 이 노멀 벡터들로 이루어진 노멀 맵을 만들어서 노멀값을 저장하겠다는 의미 - 그리고 이 노멀 맵을 텍스쳐에 매핑하는게 노멀 매핑임 - 노멀 텍스쳐는 대부분 이렇게 청색 빛을 띠는데 왜 청색빛일까? - 텍스쳐 자체가 이미지 파일이고 RGB로 이루어진 데이터이기 때문에 - XYZ에서 Z가 RGB의 BLUE와 대응되는 것 탄젠트 스페이스란? - 노멀 맵은 오브젝트기준의 좌표계 (로컬)을 사용하지 않음 - 왜 별.. 2023. 1. 27.
16. Lighting 구현 Light 클래스 구현 - LightColor -> diffuse, ambient, specular 세 요소를 가진 구조체 - LightInfo -> LightColor, 위치, 방향, 라이트 타입, 범위, 각도를 가진 구조체 - LightParams -> 라이트의 개수, 패딩, LightInfo의 배열을 가진 구조체 -> 이 구조체는 오브젝트가 렌더링되기 전에 씬의 오브젝트를 다 긁어와서 -> 라이트를 다 LightInfo의 배열의 요소로 집어넣은 후 한번에 쉐이더에 전달됨 그러므로 쉐이더 코드에서 이 LightParams를 받아주게 되는데, 그러면 그 코드에서도 같은 형식을 맞춰줘야 함 struct LightColor { float4 diffuse; float4 ambient; float4 specu.. 2023. 1. 26.