기타/DirectX

오늘이 DirectX 수업 마지막이었다. 제대로 이해한 내용들은 내가 이해할 수 있게 한번 더 정리했지만, 아직 자세하게 이해 못한 내용들이 있다. 나중에 정리할 것들인데, 어디서 막히는 지 알아야하니까 일단은 아는 데까지 적어보겠다. View Matrix (뷰 행렬) 구하는 법. 카메라가 존재하는 게 아니라, 카메라가 있다고 생각하고 오브젝트의 위치를 옮기는 것이다!!! 모두 눈속임이다. 1. 카메라를 왼쪽으로 5 움직인다면, 실제로는 오브젝트들이 오른쪽으로 5만큼 움직이는 것이다. 2. 카메라를 왼쪽으로 5 움직였을 때, 오브젝트의 옆면이 보이는 이유는 오브젝트가 조금 회전했기 때문이다. 이렇게 카메라를 기준으로 오브젝트의 위치, 회전 값을 바꿀 때 필요한 행렬이 View 행렬이다. 1. (바라 볼 ..
참고 링크 c++ 공부 www.youtube.com/watch?v=18c3MTX0PK0&list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb 물리기반 렌더러 이론 gamedevforever.com/93 이 링크는 이전 6일차 정리에서도 올린 링크이다. (그만큼 좋은 정리 글.) lifeisforu.tistory.com/category/Physically%20Based%20Rendering 타이머 만들기 (프레임 계산) 유니티를 공부할 때, 오브젝트를 움직이려면 습관적으로 Time.DeltaTime을 곱했다. 왜 곱해야 하는지 구글링을 해서 대충 이해하고 있었지만, 이제는 진짜 이해됐다. 일단은 CPU 클럭(Clock)을 알아보자. 클럭은 디지털 회로의 전기적 진동 수이다. Hz 헤르츠 ..
어제는 디퓨즈(난반사)를 하프램버트 공식으로 구현해보았었다. 오늘할 것은 1. 디퓨즈를 이용해서 툰 쉐이더 느낌을 내보기. 2. 스페큘러(정반사)를 퐁, 블린 퐁 공식으로 구현해보기. 3. 림 라이트도 구현해보기. (조명 연산이랑은 상관 없음.) 툰 쉐이더 느낌 내보기 지난 12일차에 구현했던 디퓨즈는 하프램버트 방법을 사용했다. 이 그래프를 수식적으로 좀 갖고 놀면 툰 쉐이더 느낌을 낼 수 있다. 툰 쉐이더 느낌 내기 만화 느낌을 내기 위해서는 음영이 계단처럼 뚝뚝 끊어지는 느낌이 나야한다. 1. 디퓨즈 연산을 곱해서 길게 늘리고, (나는 3을 곱함.) 2. 올림. (내림, 반올림 이런 것들 중에서 올림을 사용.) 3. 늘린만큼 다시 줄여줌. (나는 3을 곱했었으니, 3을 나누었음.) 코드로는 이렇게 ..
조명 연산 앰비언트 라이트(간접광) + 디퓨즈(난반사) + 스페큘러(정반사) + ... = 최종 조명. 빛 처리는 하나하나 구한 뒤에 모두 더해서 구한다. 디퓨즈, 스페큘러는 구현하는 유명한 방법이 있다. 현재도 이 방법에서 크게 변하진 않았다. 요즘에 '때깔이 좋다.' 라고 하는 것은 앰비언트 라이트가 많이 발전했기 때문이다. 디퓨즈(난반사) 구하기 디퓨즈를 구현하는 가장 유명하고 간단한 방법이 있다. 램버트, 하프 램버트 모델이다. 요즘 물리 기반 렌더링에서는 Oren-Nayar 모델로 디퓨즈를 구현한다고 한다. gamedevforever.com/93 램버트 (Lambert) 1. 빛을 직접 연구해보니까 Cos그래프와 비슷하더라. (램버트가 연구함.) 2. 우리에게 주어진 것은 벡터 2개이다. (Li..
__declspec(align(16)) 요즘에는 16바이트씩 정렬해야 연산 속도가 빨라진다. 위의 키워드는 '우리가 16바이트씩 정렬했다' 라는 의미로 붙여주는 것이다. float 변수 3개를 써서 12byte만 사용했을 경우, 안 쓰는 float 값을 하나 추가해서 억지로 16byte를 맞춰주는 작업을 하기도 한다. 작성한 DirectX 코드 오늘은 카메라를 만들었다. View 행렬, Projection 행렬을 만들어서 Vertex에 곱했다. 키보드, 마우스 입력을 받아서 카메라의 위치, 회전 값을 바꿀 수도 있게 만들었다. github.com/mingyu243/STL_GraphicsEngine2/tree/32e60642044b677878a4c1949d7ffa6626cd4c1d mingyu243/STL..
애니메이션도 Mesh의 Vertex가 움직이는 것이기 때문에, VertexShader에서 작업한다. 애니메이션이 있는 것과 없는 것의 VertexShader 구조가 다르기 때문에, 언리얼에서는 Static(스태틱), Skeletal(스켈레탈)로 구분. 유니티에서는 MeshRenderer, SkinnedMeshRenderer로 구분. 버퍼 사용 코드 Buffer를 사용할 때는 요런 구조이다. (예시는 VertexBuffer를 사용할 때.) D3D11_BUFFER_DESC처럼 설정해야하는게 구조체로 되어있어서, 자료형을 알아야한다는 게 친절하지는 않은 것 같다. // 버퍼 변수 선언. ID3D11Buffer* buffer; // 버퍼 설정 값 지정. D3D11_BUFFER_DESC vertexBufferDe..
DirectXTK (다이렉트x 툴킷) 라이브러리 다운로드 사용자 입력처리를 쉽게 만들어주는 라이브러리이다. 2021/02/24 - [프로그래밍/DirectX] - DirectX 8일차 (텍스쳐 매핑하기) 이 글에서 라이브러리를 다운받는 과정처럼 똑같이 하면 된다. github.com/microsoft/DirectXTK 여기서 다운받으면 됨. 키보드, 마우스 입력만 받을거기 때문에, 헤더파일은 이렇게만 복사해왔다. 나중에 다른 것이 필요하면 또 복사해오면 된다. assimp 라이브러리 다운로드 모델을 불러오는 라이브러리이다. 이거는 위의 방법처럼 라이브러리를 빌드해서 추가하려고 하면, 솔루션 파일이 없어서 Visual Studio로 열 수 없다. 윈도우 전용이 아니라, Mac, Linux에서도(다양한 운영..
텍스쳐 로드 라이브러리 다운받기 삼각형과 사각형을 그려봤으니까, 사각형에 텍스쳐를 입혀볼 것이다. 텍스쳐를 읽어야 하니까 라이브러리를 다운받는다. 라이브러리를 바로 다운받아도 되는데, 직접 빌드를 해서 lib 파일을 만들어보자. 구글에 directxtex을 검색하면, 깃허브 사이트가 나온다. github.com/microsoft/DirectXTex 다운로드를 하고, Zip 파일을 푼다. 2019 솔루션 파일을 Visual Studio로 연다. 빌드를 하기 전에, 여기 x64(64비트), x86(32비트)를 정하고 빌드를 한다. 솔루션 구성을 Debug, 솔루션 플랫폼을 x86으로 하고 빌드를 했다. (왼쪽 이미지) 솔루션 구성을 Debug, 솔루션 플랫폼을 x64로 하고 빌드를 했다. (오른쪽 이미지) ..
푸쿠이
'기타/DirectX' 카테고리의 글 목록