전체 글 62

[ DirectX11 3D Project ] 카메라의 이동

DirectX 11 프로젝트 진행한 작업을 정리 해두기 위해 기록 하겠습니다. 이번 글에서는 W, A, S, D 키와 이동키를 눌러 카메라를 움직이는 방법을 정리하겠습니다. 먼저 카메라를 이동시킵니다. 카메라는 바라보는 방향으로 이동합니다. 바라보는 방향을 구하려면 카메라가 바라보는 위치에서 현재 카메라의 위치를 빼주면 나옵니다. 벡터의 방향만 알면 되니까 정규화 합니다. 바라보는 방향벡터를 구했으면 앞과 뒤로 이동할 때 쓸 수 있습니다. 카메라의 바라보는 방향을 구하는 함수는 CameraClass에 추가했습니다. const XMFLOAT3 CameraClass::GetCameraForwardDirection() { XMFLOAT3 cameraPosition(m_positionX, m_positionY,..

인라인 (Inline)

사용 목적 C++에서 함수를 호출하면 어느정도의 비용이 듭니다. 함수를 호출하기 전에 컴파일러에서 자동으로 생성하는 코드의 일부를 Prefix라고 합니다. 함수 호출하기 전, Prefix의 코드를 실행해 CPU의 레지스터 상태, 플래그 등을 스택에 저장합니다. 이 작업은 메모리와 시간을 소요해서 실행 속도를 저하 시킵니다. 메모리나 성능이 제약된 프로세서를 프로그래밍 할 땐 이런 오버헤드는 무시하지 못할 성능 저하의 요인이 됩니다. 이 오버헤드를 줄이기 위해서 인라인 키워드를 함수 앞에 붙여 사용합니다. 인라인 키워드를 붙인 함수를 호출하는 곳에 함수의 코드를 그대로 치환해 함수 호출 비용이 없습니다. 또한 이런 작업이 컴파일 도중에 일어나기 때문에 런타임 도중에 함수를 호출해서 생기는 성능 저하가 없습..

공부/C++ \C# 2018.08.08

[ 백준 ] 1065번 - 한수

문제 어떤 양의 정수 X의 자리수가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다. 출력 첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다. 예제 입력 110 예제 출력 99 #include using namespace std; int CalculateHansu(int inputNum) { int hansuTotalNum = inputNum; if (inputNum == 1000) { inputNum = 999; } if(100 0; --i) { i..

[ DirectX9 3D Team Portfolio ] Shadow Complex

영상Client : https://www.youtube.com/watch?v=215AsEwEe0o&feature=youtu.beTool : https://www.youtube.com/watch?v=h7VkaBZM-bM&feature=youtu.be 설명설명 - 셰도우 컴플렉스(Shadow Complex)의 기본적인 게임플레이를 구현하고 컷씬 연출, 애니메이션 툴과 애니메이션을 담당하여 게임을 모작했습니다.제작 기간 - 2달담당 파트 - 게임플레이, 애니메이션, 애니메이션 툴, 사운드 사용 언어 & 개발 도구- C++, WIN32 API, STL, HLSL- DirectX 9.0, MFC- Visual Studio 2008, 3D Max

작업물/Portfolio 2018.07.11

vector의 size와 capacity

벡터의 reserve와 resize의 차이에 대해서 이해하기 위해선 size와 capacity에 대해 알고 있어야 합니다. 위 그림을 보면 capacity는 벡터의 요소(element)들을 담을 수 있는 메모리가 할당되어 있는 공간의 용량이고, size는 실제 유효한 요소(element)들의 갯수입니다. reserve 키워드는 벡터의 capacity 크기를 정할 수 있게 해줍니다. push_back 함수를 통해 새로운 요소를 추가할 때 size가 capacity보다 작으면 그냥 맨뒤의 공간에 요소를 복사해 넣고 size의 크기만 늘어납니다. 하지만 size랑 capacity의 크기가 같으면 벡터의 메모리를 재할당 해줘야 합니다. 먼저 기존 capacity보다 더 많은 메모리를 새로운 연속된 공간에 할당하..

공부/C++ \C# 2018.07.04

레퍼런스와 포인터의 차이

1. 포인터는 재할당 할 수 있습니다. 12345678int x = 5;int y = 6;int* p;p = &x;p = &y;*p = 10;assert(x == 5);assert(y == 10); 레퍼런스는 무조건 초기화 할 때 할당 해줘야 합니다. 123int x = 5;int y = 6;int& r = x; 2. 포인터는 스택에 자신 고유의 주소를 가지고 있지만 (x86 운영체제에서 4 바이트), 반면 레퍼런스는 원본 변수와 같은 메모리 주소를 공유하면서 스택 공간에 자리를 차지합니다. 레퍼런스가 원본 변수랑 같은 주소를 공유하니깐 그냥 레퍼런스를 원본의 또 다른 이름이라고 생각하면 됩니다. 참고로 포인터가 가르키는 것은 스택뿐만 아니라 힙에 있을 수 있습니다. 레퍼런스도 마찬가지입니다. 여기서 내..

공부/C++ \C# 2018.05.15