한 GameObject 내부에서 선언되는 Parent, Children와 한 MeshRenderer 내부에서 선언되는 Mesh, Material 등등과 같은 리소스들은 각각 Scene과 ResourceManager내부에서 관리(생성, 파괴)되기 때문에 이런 관리해주는 클래스 에서만 shared_ptr로 생성해주고 다른 클래스 에서는 weak_ptr로 전해받았었습니다. 그런데 문뜩 든 생각이 결국 다른 클래스에서 이런 객체들을 사용하기 위해 프레임마다 weak_ptr::lock을 사용하여 shared_ptr로 만들어서 사용할텐데 이러면 비용 부담이 너무 많이되어 배보다 배꼽이 큰 상황이 발생하는 것 같다는 생각이 들었고 이럴바엔 그냥 왠만한 클래스에선 리소스를 shared_ptr로 선언하고 사용한 후 관리해주는 클래스(Scene, ResourceManager)들에서 삭제될때 여기서도 동시에 shared_ptr를 지워버리는식으로 관리를 해주는게 더 좋을 것 같다고 생각을했는데 과연 옳은 생각인 건가요?
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
안녕하세요 루키스님. 질문 남깁니다. 쉐이더로 보내준 g_matWVP와 g_matWV를 사용하면 물체가 잘 나옵니다. 하지만, 두 행렬을 사용하지 않고 쉐이더 코드 안에서 직접 wvp, wv를 곱해서 사용하려고 하는데 물체가 나오질 않습니다. HLSL은 열중심이고, DxMath는 행중심 행렬이라 cbuffer안에 있는 값들도 row_major로 설정해주었습니다. 그런데도 물체가 나오질 않습니다.. 혹시 행렬 순서가 잘못되었나 싶어 P VW로 곱해봤으나 결과는 동일했습니다..
삼각형 띄우기 31분 쯤 나오는 LosdShaderFromFile함수 작성시에 저는 string 헤더 추가하라고 오류가 뜹니다. (물론 추가 하는게 문제는 아닌데,) 선생님께서 올려주신 파일을 보니 별도로 추가 되어있지 않아서요,,,, 궁금해서 올려봅니다(너무 하찮은 질문이지만...ㅜㅜ ) 근데 using namespace std; 는 이미 pch에 저도 추가되어 있습니다...ㅠㅠㅠ 선생님 파일을 받아서 열어보아도 저와 같이 오류가 뜹니다. 저는 현재 VS 2022를 쓰고 있습니다. VS 설정이나 기타 확장도구, 템플릿 등의 문제일까요? ㅜㅜ
확인 부탁드립니다. https://www.inflearn.com/questions/1115271/%EC%84%B9%EC%85%9810-rawbuffer%EC%9D%98-result%EB%B2%84%ED%8D%BC-%EC%83%9D%EC%84%B1%EC%8B%9C-%EC%A7%88%EB%AC%B8
안녕하세요 루키스님, 덕분에 좋은 강의 잘 듣고 있습니다. 이 문제는 두번째 강의에서 직접 실습하다가 발생했습니다. D3D11CreateDeviceAndSwapChain 함수 실행 후에 hr에 0x887A0001가 담긴 것을 확인하고 검색해봤더니 공식 문서에 "애플리케이션에서 잘못된 매개 변수 데이터를 제공했습니다. 애플리케이션이 해제되기 전에 디버그하고 수정해야 합니다." 라고 적혀있었습니다. 그런데 저는 루키스 님의 코드와 완전히 동일하게 작성했으며 설정 역시 동일하게 했습니다. 또한 혹시 몰라서 그래픽 툴이 설치되어 있는지도 확인했습니다. 프로젝트를 새로 만들고 잘못된게 있나 반복해서 원본이랑 비교 대조를 해봐도 동일한 증상을 보입니다. 반면에 수업자료 파일에 올려주신 솔루션파일은 문제 없이 작동합니다. 제가 어떤 것을 놓지고 있는지 감이 안잡힙니다. 이런 에러가 발생하는 전형적인 이유가 무엇인지 궁금합니다. winmain 함수가 있던 파일만 아예 새로 작성하니깐 해결됐습니다. 아마 윈도우 핸들 부분을 잘못 건드렸던 것 같습니다.
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
Terrain 실습을 완료하고 강사님께서 주신 텍스쳐 파일이 아닌 다른 곳에서 받은 파일을 적용해보니 Terrain의 edge 부분의 vertex가 비정상적으로 세팅되어 나옵니다. 제가 생각하기엔 terrain 셰이더 코드에서 localPos.y 연산 부분이 문제가 있는 거 같은데 height 값이 결국 텍스쳐 샘플하는 값이라 문제가 없어야 정상이라고 생각하여 도통 감을 잡지 못하겠습니다. normal 쪽은 단순히 면과 빛의 상호작용을 담당하니 Mesh에 직접적으로 연관이 없을 것입니다. 혹시 텍스쳐가 문제가 있을까 생각해보아서 포토샵으로 색상을 따봐도 딱히 튀는 값이 나오진 않네요. 혹시 강사님께서는 이 문제가 어떤 것에서 기인하는지 짐작가시는 바가 있으신가요?
삼각형 띄우기 31분 쯤 나오는 LosdShaderFromFile함수 작성시에 저는 string 헤더 추가하라고 오류가 뜹니다. (물론 추가 하는게 문제는 아닌데,) 선생님께서 올려주신 파일을 보니 별도로 추가 되어있지 않아서요,,,, 궁금해서 올려봅니다(너무 하찮은 질문이지만...ㅜㅜ )
안녕하세요. 섹션10 RawBuffer의 _result버퍼 생성시 BUFFER_DESC 설정 부분 질문 드립니다. "B-14)+Viewport" 샘플 코드를 참조하였습니다. RawBuffer.cpp (줄: 120) 을 보면 아래와 같이 작성해주셨는데요 void RawBuffer::CreateResult() { D3D11_BUFFER_DESC desc; _output->GetDesc(&desc); desc.Usage = D3D11_USAGE_STAGING; desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; desc.BindFlags = D3D11_USAGE_DEFAULT; // UAV가 연결되려면, USAGE는 DEFAULT여야 함. desc.MiscFlags = 0; CHECK(DEVICE->CreateBuffer(&desc, nullptr, _result.GetAddressOf())); } desc.Usage 에 USAGE_STAGING 을 주셨는데, 아래 BindFlags 옆 주석으로는 "Usage 는 DEFAULT 여야 한다"고 적어주셔서 혼란스럽습니다. 그리고 BindFlags 에 USAGE_DEFAULT 를 주셨는데, 의도 된 값인지, 의도한 값이 아니라면 어떤 Flags 를 주어야 하는지 궁금합니다. 감사합니다.
Graphics 11:15 시간에 생성자함수에서 멤버함수를 호출하는데 큰 문제가 되지는 않나요? 검색했을 때 가상함수만 아니면 괜찮다는 글이 많긴 하던데 보통 멤버 함수를 호출해야 하는 경우에는 Init()함수를 따로 만들기만 했었습니다. 그리고 언리얼에서는 생성자 함수에서 멤버함수 포인터를 사용하는 경우에도 에러가 발생했었기 때문에 함수 포인터를 사용하는 경우에는 BeginPlay 함수에서 호출했었습니다.
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
스크린샷에서 보이는 것 처럼 윈도우 사진 뷰어에서는 정상적으로 보이는 사진이 작성한 프로그램에서는 어둡게 보입니다. png 확장자만 이런가 싶었는데 동일 확장자 다른 사진은 정상적으로 출력되는걸 확인했습니다. 혹시 같은 확장자라도 저장하는 방식이 다른걸까요? 마치 감마 보정이 한번 더 들어간 것처럼 보입니다.
강사님 Mesh에 장착하는 Geometry<T>에 관하여 질문이 있습니다. 강사님이 강의를 진행하실때는 Geometry를 만드시면서 Vertex를 손수 타입지정(T)을 해주시는걸 보고 실제 유니티에서는 어떻게 적용되어있나 들어가서 확인해 봤더니 기본 도형들(Mesh) 같은 경우 전부 동일한 Vertex 타입을 사용했지만 외부에서 다운받아 온 Mesh 같은 경우엔 이것이 StaticMesh이건 SkeletalMesh이건 Vertex 타입이 조금조금씩은 다른 정보들을 가지고 있더라고요. 그래서 유니티 공식 메뉴얼를 찾아봤더니 Vertex 타입은 하나만 쓰고 그중 가져온 모델이 필요로 하지 않는 정보가 있을 경우엔 그 항목을 비활성화 한다고 하더라고요. 가져온 모델이 어떤 Vertex 타입을 사용하는지 어떻게 알고 이걸 안다고 쳐도 비활성화는 어떻게해서 vertex 버퍼를 만드는지 알 수 있을까요?
강의 진행하는데는 크게 문제가 없는데 Client프로젝트를 빌드하는 과정에서 SimplatMath.h에서 938줄에 주석해놓은 부분에서 .inl파일을 못 찾는거같아 임시용으로 경로 하드 코딩해서 넣어주었습니다. Engine 프로젝트 속성에서 C/C++ ->General에서 경로를 아래와 같이 추가적으로 더 넣었고 Linker -> Genral에서도 아래처럼 경로를 추가적으로 넣어주어도 SimpleMath.inl 파일 경로를 못찾던데 이럴경우 어떤 방법이 있는지 궁금합니다. (현재 솔루션 Dir/Engine폴더에 SimpleMath.h, SimpleMath.cpp, SimpleMath.inl같이 있습니다)
안녕하세요 유니티 엔진 시리즈나 클리커 게임 등 루키스님이 한땀한땀 코드를 쳐가며 진행하시는 수업은 저도 따라쳐가며 학습하고 있습니다. 그러다 문득 "따라치는 데 너무 시간이 많이 드는 것이 아닐까"라는 생각이 들더군요. 저의 경우에는 따라치면서 강의를 수강하는 것은 그냥 보는것 보다 시간이 2배 더 걸렸습니다. 루키스님은 이에 대해 어떻게 생각하시나요?