묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
shared_ptr 과 헤더파일 관련하여 질문있습니다
Engin.h 에서 #pragma onceclass Engine{public: void Init(const WindowInfo& window); void Render(); void ResizeWindow(int32 width, int32 height);private: WindowInfo _window; D3D12_VIEWPORT _viewport = {}; D3D12_RECT _scissorRect = {}; shared_ptr<class Device> _device; shared_ptr<class CommandQueue> _cmdQueue; shared_ptr<class SwapChain> _swapChain; shared_ptr<class DescriptorHeap> _descHeap;};여기서 #include <memory>를 하지 않고도 shared_ptr이 컴파일이 가능한 이유가 뭔지 알수 있을까요...?
-
해결됨[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
안녕하세요 루키스님 메모리 릭 관련해서 질문드립니다.
마지막 업로드 파일 기준으로 메모리 릭이 발생되는데요. 서버가 열리지 않았을땐 발생하지 않아서 서버와 연결하는 부분인것 같았고 구글 프로토퍼프때문인가 싶어 검색하여 게임 소멸자에google::protobuf::ShutdownProtobufLibrary();이 구문을 추가했더니 조금 릭이 줄긴했지만 여전히 메모리 릭이 발생합니다. 게임세션이나 서비스가 상호참조되어 스마트 포인터가 해제가 안되나 해서 열심히 찾아봤지만 그부분 문제가 아닌것 같더라구요..어느 부분에서 발생하고 어떻게 고쳐야 하는지 알려주시면 감사하겠습니다.
-
해결됨[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
서버 허락 후 움직이는 모델로 만들 때 궁금한 것이 있습니다.
안녕하세요!이동할 때 서버에 움직여도 되는지 묻고, 대답이 오면 그때 움직이는 방식으로 만든다고 했을 때,SetDir, SetState같은 것들도 위와 같은 방식을 취하는 게 좋을까요?이동은 선 보고 후 허락이 오면 이동하는 방식,SetDir과 SetState는 강의에서처럼 먼저 Set하고 서버에 보고하는 방식으로 코드를 짰는데이게 뭔가 흐름이 꼬이는 부분이 있는 것 같아요.두 개를 하나의 방식으로 통일하는 게 좋을지,보통 선 보고 후 허락이 오면 이동하는 방식을 취할 때SetDir, SetState같은 것들도 똑같이 허락이 오면 바뀌는 방식으로 하는지 궁금합니다.감사합니다. 강의 잘 보고 있습니다!
-
미해결게임 엔진을 지탱하는 게임 수학
연산 순서는 오른쪽에서 왼쪽??
164쪽 5.2.3절 바로 전 문장인벡터에 선형 변환을 적용하기 위한 연산 순서는 오른쪽에서 왼쪽 방향으로 이뤄진다.이 부분을 잘 모르겠어서 질문합니다.연산 순서가 왜(어떻게?) 오른쪽에서 왼쪽인가요?ㅠㅠ
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
질문있습니다.
질문1) D3D12_DESCRIPTOR_RANGE ranges[2] ={{ D3D12_DESCRIPTOR_RANGE_TYPE_CBV, 5, 0, 0, D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND }, // b0 ~ b4{ D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 5, 0, 0, D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND } // t0 ~ t4}; CD3DX12_ROOT_PARAMETER rootParameters[1] = {};rootParameters[0].InitAsDescriptorTable(_countof(ranges), ranges, D3D12_SHADER_VISIBILITY_ALL); 와 같이 루트시그니처에서 테이블의 사용범위를 넓게잡아두고사용할때만 Shader 에서 buffer를 정의 ( ex :cbuffer WVP: register(b0 )해서사용해주고있는데 테이블힙의 메모리 낭비를 제외하면 성능에 큰 악영향이 있을까요?런타임에 터지거나 하는 오류는 현재 없는데 궁금해서 여쭤봅니다. 질문2)제가 이해한게 맞나 궁금해서 질문드립니다.질문1의 방식처럼 rootSignature 를 만들었다고 하였을때 ,SetGraphicsRootDescriptorTable 함수인자에 핸들값을 넣을때RootSignature 에서는 b0~b5 ,t0~t5 의 총10개를 사용한다고 서명했기떄문에 ,DX에서 읽을때 10개단위로 읽어주기 때문에 선두에 있는 handle 값만 넣어주는 방식이 맞나요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
장치 초기화 nullptr이 자꾸 발견 되네요.
Engine.cpp 파일에서_device->Init();cmdQueue->Init(device->GetDevice(), swapChain, descHeap);swapChain->Init(info, device->GetDXGI(), _cmdQueue->GetCmdQueue());descHeap->Init(device->GetDevice(), swapChain);이부분에서 자꾸 하나씩 nullptr이 발견되네요. 처음엔 제가 틀리게 작성한 부분이 있겠지해서 swapChin에서 nullptr이 나와서 찾아보다가 나중엔 그냥 자료파일로 덮어쓰기를 했는데도 이번엔descHeap->rtvHeap이 nullptr이라는 오류 메시지가 나오네요. 강의자료를 복붙해도 나오는nullptr은 어떻게 해결해야 할까요 ㅠ
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
질문드립니다.
강의에 혹시 다이렉트x 내용도 있을까요?없다면 다른 강의 중에 다룬 게 있을까요?
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
LoadTexture로 텍스처를 출력할 때 궁금한것이 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.강의자료에 있는 bmp이미지 파일은 정상적으로 잘 출력이 됩니다. 다만, 다른 bmp파일로 출력을 할 경우 이미지로드에 실패합니다.파일을 보니 출력되지 않는 bmp파일의 경우 비트심도가 32이고 강의자료에있는 bmp파일의 경우 24인 것을 확인하고 비트심도를 동일하게 24로 변경했는데도 출력이 되지않습니다. 정확한 원인이 궁금하여 질문드립니다. 항상 좋은 강의 감사드립니다.
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
SocketUtils 관련해서 질문 있습니다.
assert는 release 모드에서 사라지는 것으로 알고있는데그래서 그런가 Release모드에서 작동시킬 때 서버가 꺼지는 현상이 발생합니다.assert를 if 문으로 수정했더니 동작은 되는데,이게 해결법인가요. 아니면 서버가 Debug만 고려된건가요?
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
단일쓰레드로 어디까지 커버가 될까요?
루키스님 강의 잘 듣고 여러가지 연동을 시도해서 컨텐츠를 만드는 중인데요 지금은 데이터나 오브젝트들이 많지 않아서 별 문제가 없는데 나중에 3d 포폴도 이걸 기반으로 만들고 싶어서 멀티쓰레드를 사용해야할 정도는 어느정도 되야하는지가 궁긍합니다. 그리고 마지막에 aws 에 서버 올리시는 부분을 잠깐 언급해주셨는데 c++서버강의엔 그런부분이 없는것 같아 그부분 강의 예정이 있는지도, 아니면 관련 자료나 공부를 어떻게 해야하는지도 궁급합니다
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
Static UserManager um을 포인터로 만들어서 리턴 하면 안되는 이유가 궁금합니다.
아래의 코드와 같이 포인터로 변수를 만들어줘서 넘겨주면 AddUser() 함수를 부를때 '_userCount' 올려주는 변수에서 '액세스 위반 this가 nullptr 입니다.' 라고 뜹니다.그 이유가 객체를 생성해 주지 않았기 때문에 'nullptr'이 생성 되는 건가요? 이해가 잘 되지 않는 부분이 static 함수를 부를 때 변수를 초기화 되어 전역 변수로 사용되는데, 포인터는 객체가 생성되지 않는 것 같더라구요.그래서 new UserManager( ) 를 통해 동적 할당을 하니 객체가 하나씩 생기는 문제가 발생하고, static 메모리와 동적 할당 되는 메모리 위치(?), 특성(?)이 달라서 생기는 문제인가 싶습니다.public: UserManager() :_userCount(0) {} static UserManager* GetInstance() { static UserManager* um = new UserManager(); um->_userCount = 0; return um; } 주저리 주저리 궁금한 내용을 적다보니 제대로 설명했는지 모르겠네요... ㅡㅜ 답변해 주신다면 감사하겠습니다. 혹시 몰라 _userCount를 생성자로 초기화 시켜줬습니다.class UserManager { public: UserManager() :_userCount(0) {} static UserManager* GetInstance() { static UserManager* um = nullptr; return um; } public: void AddUser() { _userCount++; } int GetUserCount() { return _userCount; } private: int _userCount = 0; };
-
해결됨게임 엔진을 지탱하는 게임 수학
3차원 회전 변환 오일러 각
안녕하세요, 언리얼 엔진을 공부하다가 게임 개발의 기초부터 공부하고 싶어서 게임 수학 수업을 듣고 있는 학생입니다. 10장을 공부하다 오일러 각을 활용한 회전 행렬을 만드는 과정에서 의문점이 있어 질문 드립니다. 오일러 각을 통해 세 개의 축으로 3번 회전할 때, 축을 기준 삼는 방식은 1, 2번 중에 어떤 것인가요?ex) z->x->y 축 순으로 회전한다고 할 때,고정된 좌표계 상 z축 기준 회전 -> 동일한 좌표계 상 x축 기준 회전 -> 동일한 좌표계 상 y축 기준 회전.(밑의 이미지처럼)고정된 좌표계 상 z축 기준 회전 -> 앞선 회전으로 인해 새로 정의된 x축 기준 회전 -> 앞선 회전들로 인해 새로 정의된 y축 기준 회전.
-
미해결게임 엔진을 지탱하는 게임 수학
1강 19:53 환의공리
환의 공리 3번에덧셈과 곱셈 연산은 분배 법칙을 만족한다. 를덧셈과 곱셈간의 연산은 분배 법칙을 만족한다 로 바꾸는게 조금 더 자연스러울 것 같습니다.위의 문장은 덧셈, 곱셈의 개별적인 연산이 분배 법칙을 만족한다고 인식 될 수도 있다고 생각해서 아래 문장이 더 자연스러운 것 같습니다.
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
리소스 파일 경로
강사님 혹시 제 코드와 강사님 코드를 비교하려고 파일을 다운받았는데요 리소스파일 이미지 경로가 틀려서 확인을 못하는데 혹시 어디서 변경할 수 있는지 알 수 있을까요? 오류는 계속 이렇게 뜹니다.
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
knight 기본생성자
knight에 기타 생성자를 만들어 주면, 기본 생성자를 사용 할 수 없다고 했는데, 새로운 knight를 만들어 주어 기본 생성자를 이용하니깐 잘 만들어 지더라구요.제가 잘 못 이해 하는걸까요?같은 객체일 경우 기본 생성자가 실행이 안된다는 말씀 일까요?새로운 객체면 상관 없는거구요?
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
[문자열] 강의 부분에서 StrCpy함수 포인터로 구현 하는 부분 질문 있습니다.
글로 질문은 처음이라 두서 없을 수 있다는 부분 양해 부탁 드립니다. char* StrCpy(char dest, char src) 함수에서 char * ret = dest; 선언을 통해 기존 원본 위치값을 저장해 주는것은 알겠는데,while문이 다 돌고 나서 'dest'의 값을 확인해 보면 문자열이 없는 것을 데이터를 확인 하여 알았습니다.그 이유가 'dest++'을 통해 포인터의 시작 위치 값을 변경해 주어서 값이 없는 주소 부분을 가르키기 때문에 'dest'의 데이터가 아무것도 없는 것이 맞을까요? 그렇기 때문에 원본 데이터에는 정상적으로 들어있고,함수내에서 'dest'의 주소 시작점이 뒤로 밀려나 데이터가 없다고 판단해도 되는지 궁금합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
용 모델에 분명 Diffuse 텍스쳐가 있는것같은데 왜 적용이 안되나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 리소스를 보면 groundColor라고 디퓨즈텍스쳐가 있는데 왜 적용이 안되는건가요?
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
C2666 ERRROR 관련 문의 드립니다 (operator == 오버로드~) - [17주차] 온라인 게임 개론
안녕하세요 선생님, 강의 열심히 듣고 있습니다.17주차 온라인 게임 개론에서 수업자료 받아서 실행시켜 보았는데, 아래와 같은 에러가 발생합니다ㅠㅠ 처음에 CollisionManager와 UI included 되어 있어서 컴파일 에러나는 거 때문에 그 부분만 include 된거 삭제하였고 다른거는 하나도 건들지 않았는데도 저런 에러가 뜨네요.. 각 오류에 해당하는 line의 코드는 아래와 같습니다. 구글에 찾아봐도 해결 방법을 모르겠네요.. 도움 주시면 감사 드리겠습니다!
-
해결됨게임 엔진을 지탱하는 게임 수학
로컬 <-> 월드 트랜스폼 변환 시 모델링 행렬을 바로 곱하지 않는 이유
안녕하세요, 해당 강의를 듣고 난 후 조금 더 수학 지식을 쌓기 위해 '이득우의 게임수학' 책으로 공부하고 있는 취준생입니다.제가 수학 지식이 얇아서 이해에 어려운 부분이 있어 질문 드립니다.619p. ~ 624p. 에 걸쳐서부모 월드 + 내 로컬을 이용한 내 월드 트랜스폼 구하기부모 월드 + 내 월드를 이용한 내 로컬 트랜스폼 구하기 내용이 있는데,여기서 왜 Scale, Rotation, Translation을 따로 구하는지 궁금합니다. 제가 생각을 해보았는데,모델링 행렬끼리 곱해서 구해버리면 T * R * S * T * R * S 순서로 곱해져서,Rotation과 Scale의 경우가 제대로 계산되지 않기 때문인 것인가요?ex) 1의 경우 내 로컬 Transform의 Scale은 부모 Scale 내 로컬 Scale, Rotation은 부모 Quat * 내 로컬 Quat 이어야 하는데, 내 월드 트랜스폼을 구하기 위해 각 트랜스폼에서 구한 모델링 행렬끼리 곱해서 구해버리면 중간에 다른 연산이 들어간 상태에서 Scale, Rotation이 구해진다?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
안녕하세요 질문있습니다
for (int i = 0; i < vmesh.size(); ++i){_shader->SetPipelineState();core->GetCmdList()->IASetVertexBuffers(0,1,&_v_mesh[i]->GetVertexView());core->GetCmdList()->IASetIndexBuffer(&_v_mesh[i]->GetIndexView());_transform->Update();core->GetTableHeap()->BindTexture(_texture->GetCpuHandle(), SRV_REGISTER::t0);core->GetTableHeap()->CommitTable();core->GetCmdList()->DrawIndexedInstanced(_v_mesh[i]->GetIndexCount(), 1, 0, 0, 0);} DX11 버전에서 제공해주신 모델 탱크 를 로딩하려고Assimp 를 사용하였는데 , vmesh 사이즈가 12이라12번 계속 반복해주는 코드를 작성하였는데 _v_mesh[0] 번째 정보만 바인딩되는데 문제가뭘까요..