DirectX89 65. 애니메이션_SkyBox 하늘 까는 걸 한다. 방법이 여러 가지 있다. 먼저 생각할 수 있는 방법은 큐브모양 형태로 만들어 준 다음에 카메라를 따라다니게 붙여주면 카메라가 움직이더라도 큐브가 같이 움직이니까 계속 하늘이 보이게 될 것이다. 하지만 이렇게 하면 사전작업이 필요해서 좀 더 간단하게 만들 수 있는 스피어를 이용한 방법으로 만들어 줄 것이다. 큐브가 아니라 스피어로 만들었을 때 문제가 몇 가지가 있다. 1. 캐릭터가 회전할 때 스피어도 같이 회전하면 안되는 걸 신경 써야 한다. 2. 물체가 있을 때 구형을 하나 만들어서 플레이어 위치에 구를 배치하면 구가 뒷면이라 보이지 않는다. 이걸 뒤집어 줘야 한다. 쉐이더에 그 기능이 있다. 3. 하늘 뒤에 물체가 있으면 물체가 안그려지는 걸 신경 써야 한다. 이번 시간에는 2번 .. DirectX 2024. 3. 10. 64. 애니메이션_애니메이션#4_tweening 1. 17. TweenDemo.fx와 TweenDemo클래스를 생성 후 세팅하기 애니메이션에서는 twining이라는게 있다. 두 가지의 상태가 애니메이션이 바뀔 때 중간에 transition을 틀어주는 거를 얘기한다. 그걸 만들어 볼 건데 방금 만든 blending이랑 크게 다르지 않다. 다만 넘겨주는게 조금 지저분해진다. tweening이랑 관련된 부분들이 조금 더 추가가 되면 된다. 키 프레임을 더 확장시키건 KeyframeDesc를 포함하는 별도의 타입을 만들어서 하건 일단은 만들 수 있다. 쉐이더를 구분하는게 맞을 거 같으니 16. AnimationDemo.fx를 탐색기에서 복붙 해서 이름을 17. TweenDemo.fx로 해서 Client/Shader/Week3필터에 넣어준다. AssimpToo.. DirectX 2024. 3. 8. 63. 애니메이션_애니메이션#3_shader에서 애니메이션 행렬로 연산, ImGUI로 테스트, 보간 이제 Shader 작업을 한다. 16. AnimationDemo.fx에서 작업을 해본다. 일단 여기에 다 넣어주고 나중에 Common 필터 쪽에다가 정리하보도록 한다. 그 전에 하나 빼먹은게 있다. 1. Animation 정보를 Shader에 전달하는 함수 RenderManager::PushKeyframeData정의하기 1) 무슨 Animation을 재생한다는 정보를 Shader에 건내기 위해 필요한 정보를 저장할 struct KeyframeDesc를 정의하기 ModelAnimator에서 무슨 Animation을 틀어주고 있다라는 걸 건내기 위해 추가적인 정보가 필요하다. 얼마 시간이 경과가 되었고, 무엇을 하고 있고, 이런 관련된 정보가 있어야 한다. 지금까지는 RenderManager에서 관련된 정보.. DirectX 2024. 3. 8. 62. 애니메이션_애니메이션#2_CreateAnimationTransform, CreateTexture ModelAnimator::Update에서 //TODO를 채우면 된다. 이게 쉽지가 않다. 1. ModelAnimator.h에 2차원 배열 transforms를 담은 struct AnimTransform 정의하기 텍스쳐를 만들어서 모든 애니메이션의 모든 본의 모든 트랜스폼에 대한 정보를 담아서 전달해 줄 것이다. 애니메이션마다 2차 배열이 있으니까 3차 배열이라고 볼 수 있다. ModelAnimator.h에 struct AnimTransform { // [ ][ ][ ][ ][ ][ ][ ] ... 250개 using TransformArrayType = array; }; 뼈가 최대 250개라는 얘기가 된다. 이걸 이용해서 배열을 만들게 되면 250개의 관절 정보를 담아줄 수 있게 된다. RenderMa.. DirectX 2024. 3. 6. 61. 애니메이션_애니메이션#1_ReadAnimation, ModelAnimator 애니메이션을 파일로 만드는 것에 이어서 본격적으로 사용할 수 있게끔 준비를 해본다. 애니메이션을 파일로 만드는 것에 이어서 본격적으로 사용할 수 있게끔 준비를 해본다. 1. AnimationDemo 클래스 생성하고 세팅하기 탐색기에서 StaticMeshDemo를 복붙 해서 이름을 AnimationDemo로 바꿔치기한다. AssimpTool/Game에 넣는다. 코드를 AnimationDemo에 맞게 수정한다. CreateTank, CreateTower 관련 부분은 삭제한다. AnimationDemo::Init에서 _shader = make_shared(L"16. AnimationDemo.fx"); 이렇게 수정한다. Client/Shaders/Week3의 15. ModelDemo.fx를 탐색기에서 복붙 해서.. DirectX 2024. 3. 5. 60. 애니메이션_애니메이션 데이터 애니메이션 관련된 정보를 추출하는 작업을 해볼 것이다. 기본적으로 원리는 단순하다. 파일이 있는 걸 추출하면 된다. 1. Converter.h에 ExportAnimationData 선언하기 Converter.h에 void ExportAnimationData(wstring savePath, uint32 index=0 ); // 애니메이션이 여러개 있을 수 있으니 index를 받아준다. 선언한다. fbx가 어렵다고 한 게 mesh만 있는 경우가 있고, mesh에 애니메이션이 같은 파일에 있는 경우도 있고, mesh는 없지만 애니메이션 정보만 있는 경우가 있고, 굉장히 다양하다. 대부분은 경우는 애니메이션이 따로 빠져있는 경우가 많다. 핵심적인 부분은 스키닝과 실질적으로 애니메이션의 동작 원리를 이해하는 게 .. DirectX 2024. 3. 4. 59. 애니메이션_스키닝 AssimpTool로 가서 툴부터 건드려 보도록 한다. 1. Animation 파일과 Mesh파일 가져오기 본격적으로 뼈대가 있는 휴먼 모양의 오브젝트를 파싱 한다. 수업 자료의 Resources\Assets\Kachujin을 복붙 해준다. 애니메이션이 3개, 메쉬가 1개 들어가 있다. Mesh를 visual studio에 드래그 앤 드롭해서 살펴볼 수 있다. 이 이미지들이 자동적으로 추출이 된다는 것을 알 수 있다. 설령 추출이 안된다고 해도, 코드에 fbx파일 내에 이미지 파일이 있으면 추출하는 것을 넣어 놨었다. Converter::WriteTexture를 보면 const aiTexture* srcTexture = _scene->GetEmbeddedTexture(file.c_str()); if (s.. DirectX 2024. 3. 3. 58. 애니메이션_애니메이션 이론 1. 뼈대에 관한 내용 - T포즈라는 첫 상태의 글로벌에서 Relative로 넘어갔다가 다시 애니메이션의 글로벌로 넘어가는 작업이 핵심 애니메이션을 할 때 15. ModelDemo.fx의 MeshOutput VS(VertexTextureNormalTangent input) { MeshOutput output; output.position = mul(input.position, BoneTransforms[BoneIndex]); output.position = mul(output.position, W); output.worldPosition = output.position.xyz; output.position = mul(output.position, VP); output.uv = input.uv; outpu.. DirectX 2024. 3. 2. 57. 모델_ImGUI 1. ImGUI 코드 가져오기ImGUI를 검색해서 GitHub에서 다운로드한 후 압축을 풀고 실행을 하면 된다. examples폴더에 sln 파일이 있으니 실행을 해본다. 얘는 별도의 lib파일로 만드는 게 아니라 풀 소스코드를 제공하고 그걸 활용하라고 떠 넘겨주는 방식이다. example_win32_directx11를 시작 프로젝트로 하고 실행을 해보면이렇게 켜진다. 하고 싶은 건 다 할 수 있게 되어 있다. 온갖 기능들이 다 있다. 이 코드를 그대로 가져와서 사용을 하면 된다. 파일 탐색기를 보면횡하다는 것을 알 수 있다. 즉여기있는 소스코드들만 다 긁어오면 사용할 수 있다는 말이 된다. 이 소스코드들로 적정 라이브러리 프로젝트로 만들어서 하면 lib파일도 추출할 수 있겠지만 그냥 이 파일들을 프로젝.. DirectX 2024. 3. 1. 56. 모델_계층 구조 1. 탱크 모델을 띄우고 문제점 발견하기 여러개가 뭉처져서 하나를 만드는 경우가 있다. 만약 이걸 만들어야 한다면 분할 된 거 마다 메시를 만들어 합칠 수 있다. 지금 상황에서는 뼈대 정보를 이용해서 계층 구조를 잘 활용하지 않으면 물체가 정상적으로 뜨지 않는다는 문제가 생길 수 있다. AssimpTool/Game/AssimpTool.cpp에서 Tower말고도 Tank도 같이 넣어준다. void AssimpTool::Init() { { shared_ptr converter = make_shared(); // FBX -> Memory converter->ReadAssetFile(L"Tank/Tank.fbx"); // Memory -> CustomData (File) // 1차 목표 converter->Ex.. DirectX 2024. 2. 29. 55. 모델_모델 띄우기 void AssimpTool::Init() { { shared_ptr converter = make_shared(); // FBX -> Memory converter->ReadAssetFile(L"Tower/Tower.fbx"); // Memory -> CustomData (File) // 1차 목표 converter->ExportMaterialData(L"Tower/Tower"); converter->ExportModelData(L"Tower/Tower"); // CustomData (File) -> Memory } } 지난 시간에 이어서 1차 목표 중 ExportModelData를 구현하는 작업을 해 본다. void Converter::ExportModelData(wstring savePath) { .. DirectX 2024. 2. 28. 54. 모델_Bone, Mesh 로딩 이어서 Material에 관련하여 WriteTexture를 마무리해본다. 1. Converter::WriteTexture 정의하기 필수까진 아니다. xml이 추출이 된 다음에 diffuse랑 specular 파일 넣어주고, 그거에 따라서 실질적으로 로딩을 하게 할 수 있다. 선생님이 포폴 만들 때 썼던 방법 중 하나는 대부분의 물체들이 텍스쳐가 있을 것이기 때문에 House.xml로 material을 만들었으면 House_diffuse랑 House_normal 같은 애들로 이름을 지정해서 컨벤션에 맞게끔 저장하는 방법도 사용했었다. 이렇게 하면 작업하는 시간을 벌 수 있다. 그게 아니라 넣어준 이름 그대로 사용하고 싶다면 이 부분을 채워주는 노가다가 필요하긴 하다. 노가다를 조금이라도 줄이기 위해 파일을.. DirectX 2024. 2. 23. 이전 1 2 3 4 5 6 ··· 8 다음