DirectX89 41. DirectX11 3D 입문_Mesh 실습을 편리하게 할 수 있게 Mesh들을 묶어서 관리하는 실습을 해본다. 1. 09. MeshDemo 생성하고 Main에서 세팅하기 탐색기에서 08. NormalDemo 클래스를 복붙 해서 09. MeshDemo로 이름을 바꾼다. 클래스를 MeshDemo에 맞게 수정하고, 솔루션 탐색기에서 Client/Game 필터에 넣는다. Mesh란 무엇이고 어떻게 나중에 지금 흩어져 있는 아이들을 묶어서 관리할 것인가를 얘기할 것이다. Main.cpp에서 #include "09. MeshDemo.h" 추가하고 WinMain에서 desc.app = make_shared(); // 실행 단위 이렇게 세팅한다. 셰이더는 바꿀 필요 없고, 09. MeshDemo.h의 // Object shared_ptr _geometry.. DirectX 2024. 2. 10. 40. DirectX11 3D 입문_Normal Normal 벡터에 대해 알아본다. 표면이랑 정확히 수직인 벡터를 Normal 벡터라고 한다. 쿼드는 정점들이랑 수직인 벡터 큐브도 각 평면마다 수직인 애를 찾으면 된다. 구형의 경우는 원점에서 도넛의 각 점으로 가는 방향벡터가 Normal 벡터이다. 그리드 같은 경우는 평면이니까 위로 가는 거 하나다. 이걸 구해서 무얼 하느냐 나중에 다양한 형태의 조명연산을 해줄 것이다. 빛이 정확히 수직으로 오면 쎈 거고, 빛이 거의 90도면 빛이 약한 거. 물체의 색상을 보여주고 싶으면 물체에 빛이 반사되는 걸로 물체의 색을 보는 것이다. 노멀 벡터를 이용해서 하고 싶은 건 각도가 작으면 작을수록 빛을 세게, 90도에 갈수록 약해지는 걸 원한다. 내적을 하는데 -L과 노멀벡터의 내적을 구하면 0도일 때 1, 90도.. DirectX 2024. 2. 9. 39. DirectX11 3D 입문_HeightMap 테크닉 같은 걸 연습하는 작은 공간이라 할 수 있는데 그다음으로 하고 싶은 건 높이맵을 테스트해 볼 것이다. 지금은 평면이지만 어디는 올라고 어디는 내려가게 해서 지형지물의 모양을 표시할 것이다. 유니티에서는 terrain툴이 있어서 올리고 내리는 걸 할 수 있었어. 그걸 별도의 데이터로 관리를 해주면 되는데 그게 Heigt map이라고 한다. 이 이미지 파일들이 jpg, png 등 보여주는 용도로 그리는 경우도 있지만 경우에 따라서는 그 자체가 특정 정보를 들고 있는 경우도 생긴다. 노멀맵이라고 해서 노멀 벡터, 수직인 방향을 저장하는 그런 용도로 사용될 수 있고, 높이 맵이라고 해서 연관성이 있는 모든 높이들의 정보를 가지고 있을 수 있다. 수업자료로 제공된 height.png 의 속성을 보면 8비트.. DirectX 2024. 2. 8. 38. DirectX11 3D 입문_Sampling Sampling과 관련된 부분을 실습해 본다. 1. 06. SamplerDemo 클래스 생성하기 탐색기에서 05. TextureDemo를 복제해서 이름을 06. SamplerDemo로 수정한다. 솔루션 탐색기에서 Client/Game 필터에 넣어준다. 코드 내용도 SamplerDemo에 맞게 수정한다. void SamplerDemo::Init() { _shader = make_shared(L"05. Sampler.fx"); 이 부분도 05. Sampler.fx로 수정한다. 2. 05. Sampler.fx 셰이더 생성하기 탐색기에서 Shaders 폴더의 04. Texture.fx를 복제하여 이름을 05. Sampler.fx로 바꿔준다. 그리고 Main/Shaders로 넣어준다. SamplerState Sa.. DirectX 2024. 2. 7. 37. DirectX11 3D 입문_Geometry Cube, Sphere, Grid도 만들어 보자. 1. Cube 그리기 Cube를 전략적으로 하나씩 생각해 보자. 정점이 몇 개 필요할까? 단순히 색상만 표현하려면 8개로 충분하다. 근데 UV 매핑까지 할 것이다. 면마다 하나씩 그림을 붙이는 걸 목표로 한다. 그런 경우는 점이 8면 uv 좌표를 세팅하게 될 텐데 정점을 줄일 수 없고, 4개씩 6면체에 그릴 수밖에 없다. 즉 24개가 있어야 한다. void GeometryHelper::CreateCube(shared_ptr geometry) { float w2 = 0.5f; float h2 = 0.5f; float d2 = 0.5f; vector vtx(24); // 앞면 vtx[0] = VertexTextureData{ Vec3(-w2, -h2, -d2.. DirectX 2024. 2. 6. 36. DirectX11 3D 입문_텍스처 CreateQuad로 사각형 만드는 거 까지 했는데 텍스처를 붙여서 UV 좌표를 개입시켜서 뭔가를 할 것이다. 모양을 여러 개 만들어 볼 것이다. 대표적으로 지원해야 되는 모양이 무엇이 있는지를 생각해 보면 사각형 + 큐브 + 구 + 그리드 + 실린더 이 정도가 일반적이다. 실린더는 공식이 복잡하니 스킵하고 나머지 3 총사를 구현해 본다. VertexData에 필요한 걸 이것저것 만들고 나중에 정리하는 식으로 구현을 해보도록 한다. vertexData.h에서 모형에 대한 것만 신경을 써 보자. VertexTextureData라고 uv까지 고려한 것을 넣어 보도록 할 것인데 struct VertexTextureData { Vec3 position = { 0, 0, 0 }; Vec2 uv = { 0, 0 }.. DirectX 2024. 2. 6. 35. DirectX11 3D 입문_카메라 언리얼 방식으로 할지, 유니티 방식으로 할지 정해야 하는데 언리얼 방식은 상속을 받아서 하는 것이기 때문에 조금 더 빠를 수 있다. 유니티 기반은 빈 게임 오브젝트부터 시작해서 붙이고 붙여서 조립을 해 만들어야 하다 보니 카메라를 만들어야 한다면 빈 게임 오브젝트 만들고, 카메라 컴포넌트 붙이고, 카메라 움직이기 위한 카메라 스크립트를 붙이는 식으로 부품을 여러개 붙여야 한다. 유니티상에서는 드래그 앤 드롭으로 붙일 수 있으니 문제가 안되는데 DX11 포폴을 만들 때는 수동으로 코드 상에서 붙이는 걸 만들어 줘야 한다. 그게 약간 부담이 된다. 유니티, 언리얼 스타일 둘을 섞어도 된다. 언리얼 이라도 부품이 없는게 아니다. 컴포넌트라는게 있다. 상속 구조도 최대한 활용하는게 언리얼 방식이라면 유니티는 게.. DirectX 2024. 2. 5. 34. DirectX11 3D 입문_Constant Buffer 1. 03. ConstantBufferDemo 클래스 생성하기 탐색기의 Client 프로젝트 폴더로 가서 02. QuadDemo클래스를 복제하고, 03. ConstBufferDemo라고 이름을 바꾼다. 그리고 솔루션 탐색기의 Client/Game 필터에 넣는다. 그리고 코드에서 QuadDemo라 되어 있는 걸 ConstBufferDemo라고 바꿔준다. 여기서 새로운 실습을 하면 된다. 2. 03. ConstantBuffer.fx 생성하기 02. Quad.fx도 탐색기 Shaders 폴더에서 복제하고 03. ConstBuffer.fx로 이름을 바꾼다. 그리고 솔루션 탐색기에서 Shaders 필터에 넣어준다. 3. 03. ConstantBufferDemo를 Main에서 GameDesc에 세팅하기 Main.c.. DirectX 2024. 2. 2. 33. DirectX11 3D 입문_사각형 띄우기 삼각형 띄우기부터 거슬러 올라갈 수 있다. TriangleDemo::Render에서 호출하는 Draw 함수를 f12로 보면 원리는 지난 시간에 했던 것과 비슷하게 된다는 걸 알 수 있다. 1. 새로운 02. QuadDemo 클래스를 만들고 Main.cpp의 WinMain에서 desc.app에 넣어주기 그다음 Demo로는 Rectangle 사각형을 그려 볼 건데 3D에서 사각형을 Quad라고 하기도 하기 때문에 Quad라고 하자. 탐색기로 Client 프로젝트에 들어가서 01. TriangleDemo.h, .cpp 파일을 복붙 해서 02. QuadDemo라고 이름을 바꾼다. 그리고 Client 프로젝트의 Game 필터에 넣어준다. 코드에서 class 이름도 QuadDemo로 수정한다. #include "0.. DirectX 2024. 2. 1. 32. DirectX11 3D 입문_프로젝트 설정 프로젝트를 빠르게 만들고 복붙을 하면서 기존에 만들었던 것들 중 필요한 것만 복사를 해서 이사를 할 건데 모든 거를 다 갖고 오진 않을 거고 파이프 라인 관련된 부분들을 조금 더 세련된 방법들이 있어서 그 방식으로 작업을 할 것이다. 1. 프로젝트의 Properties 폴더 세팅 Visual studio를 실행하고 Create New Project를 선택한다. Windosw Desktop Application, Windows Desktop Wizard 둘 중에서 하나로 만들면 된다. 여기선 Windows Desktop Wizard로 만들어 본다. Project name은 Client로 Solution name은 GameCoding2로 했다. Create를 누르면 나오는 화면에서 이렇게 설정한다. 일단 솔.. DirectX 2024. 1. 31. 31. 엔진구조_Data 정한 파일 포맷을 이용해서 어떻게든 메모리상으로 들고 있는 애들을 표현할 수 있는 게 중요하다. shared_ptr animation 같은 경우는 bool _loop = false; shared_ptr _texture; vector _keyframes; Animation.h에 있는 이런 내용들이 핵심이 될 것이다. 이런 거를 납작하게 해서 직렬을 해서 파일에 적어 놓은 다음에 결국 다시 출력하는 식으로 뭔가를 만들어 줘야 한다. 우리만의 포맷을 정해도 되지만 읽기 쉽게 하기 위해 데이터를 작성할 때 XML이란 JSON 두 가지 방식을 많이 사용한다. 게임회사에서 데이터 관리 시 JSON을 가장 많이 활용 한다. 기획자들은 보통 엑셀로 한다. 원본은 엑셀로 하다가 그거를 프로그램을 만들어서 XML이나 JS.. DirectX 2024. 1. 29. 30. 엔진구조_Animation 올려주신 프로젝트에서 Snake.bmp파일을 복붙 해서 코드가 있는 폴더로 가져온다. 유니티에서 sprite, multiple로 설정하고 100x100픽셀로 잘라서 애니메이션으로 쓰는 기능을 제공하고 있다. 언리얼도 플립북이라는 기능으로 잘라서 원하는 만큼 애니메이션화 할 수 있는 기능을 갖고 있다. 그거를 만들어 볼 것이다. WinAPI 때 비슷한 방식으로 하긴 했다. uv좌표로 원하는 영역을 맞춰주면 된다. 유니티에서 원하는 스프라이트를 Hierarchy로 드래그 앤 드롭했을 때 애니메이션 파일이 생성되는데, 그 파일을 살펴보면 SpriteRenderer라는 Sprite를 그려주는 역할을 하는 아이 하나와 Animator라는 애가 들어가 있다는 것을 볼 수 있다. Animator라는 애는 Sprite.. DirectX 2024. 1. 28. 이전 1 2 3 4 5 6 7 8 다음