목록전체 글 (24)
Hyun2and
포인트 모든 타입에 대해 암시적 타입 변환을 지원하는 템플릿과 관계가있는 함수를 제공하는 클래스 템플릿을 만들려고 한다면, 클래스 템플릿 안에 프렌드 함수로 정의한다 클래스 템플릿 안에 작성하면 인라인으로 정의되므로 도우미 함수를 따로 생성한다 정리 항목 24 : 타입 변환이 모든 매개변수에 대해 적용되어야 한다면 비멤버 함수를 선언하자 와 관련이 있는 항목 ✔️ 이전의 예시를 템플릿으로만 바꿔주자 template class Rational { public: Rational (const T& numerator = 0, const T& denominator = 1); const T numerator() const; const T ddenominator() const; }; template const Rat..
(처음엔 이름이 길다고 생각했지만 보면 볼수록 항목 이름을 간결하게 잘 지은 것 같다) 포인트 모든 타입을 받아들이는 멤버 함수를 만들려면 멤버 함수 템플릿을 쓰면 된다 복사 생성자와 복사 대입 연산자는 직접 선언해야 한다!! 정리 - 스마트 포인터 : 힙 기반 자원을 타이밍맞게 삭제해준다 (항목 13 참고) - 반복자 iterator : 단순연산을 지원한다 ( ++, -- 등) 포인터 : 암시적 변환을 지원함. 스마트포인터는 각 포인터들이 별개이기 때문에 변환 클래스를 직접 만들어야 한다 -> std::static_pointer_cast() 을 쓰면 Cast 가 되는 것 아닌가? 더보기 책이 옛날책이라 auto_ptr 을 사용하는 예시를 쓰고있다 ! 항목13에는 shared_ptr 이 tr1 라이브러리..
포인트 템플릿으로 코드 비대화가 생긴다. (암시적이기 때문에) 템플릿 매개변수를 함수 매개변수나 멤버 데이터로 넣음으로써 해결할 수 있다. 동일한 이진 구조(long, int) 에 대해서는 한가지 함수 구현(void)을 공유하게 만든다. 정리 코딩 시간 절약, 코드 중복 회피라는 템플릿의 장점을 누리다보면 코드 비대화 (code bloat)가 발생한다. -> 코드 비대화 : 똑같은 애용의 코드와 데이터가 여러 벌로 중복되어 이진 파일로 구워진다) 코드 비대화를 해결하기 위한 방법 공통성 및 가변성 분석 어렵게 써놓았지만,, 코드 비대화를 해결하기 위해 평소에 코드의 비슷한 부분을 추려서 함수로 빼고, 그 부분이 필요한 곳에 함수들을 호출하도록 바꾸는 과정. 클래스와 템플릿에도 동일한 과정을 거치면 됨 그..
포인트 파생 클래스에서 기본 클래스 템플릿의 이름을 참조할 때는, this-> 를 붙이거나 기본 클래스 한정문을 명시적으로 써준다 예제 코드 (대부분은 비워놓은 내부 코드들) #include using namespace std; class CompanyA { public : void sendCleartext(const string& msg) {}; }; class CompanyB { public: void sendCleartext(const string& msg) {}; }; class CompanyZ { public: void sendCleartext(const string& msg) {}; }; class MsgInfo { }; template class MsgSender { public: void ..
지금까지 게임 엔진 게임 구조 디자인 패턴 인풋, 인터랙션 충돌검사 AI 이제는 애니메이션! 이후엔 Visualization, Network AI Individual Controller : 하나의 에이전트 Abstract Controller : 전체적인 전략 sensor, memory, resoning core(FSM, rule), action system actionAI, Tactical AI 이러한 엔피씨들의 액션이 정해지면 그래피컬하게 보여줘야 한다! → 애니메이션 Animation 사전적 의미 : 움직이는 것처럼 착각을 주는 과정 drawing, model, inanimate objects (점토 애니메이션) 어떤 것을 움직이나? 공 : 실제 물리법칙을 써서 표현할 수 있다 차 구름 Charact..
지난시간 AI for an agent 하나의 AI를 컨트롤한다 센서, 메모리, 리즈닝코어(그 다음 액션 플래닝), 액션 AI for a strategy agent 를 위해서는 센서가 그 주변만 보면 된다 전략에서는 agent 전체, 전반적인 중간중간의 목적을 알아야함 중간중간 목표가 최종 목표에 기여하도록 짜야한다 agent 를 위한 것이 strategy 에 적용할 수 있을까? agent 에서는 순서적인 영향이 크지만 strategy는 순서를 설정하기 어렵다 agent 로는 표현하기 어려운 부분을 strategy 에서 구현하는 것이다 Tactical AI Tactic 의 정의 어떤 목표를 달성하기 위해 해야하는 operation 들의 순서 sequence 요소 초기 상태(initial state) 목표 ..
서론 지금까지 input, 시뮬레이션 게임월드 랜더링 - 애니메이션 네트워크 지난시간 게임에서의 AI 지능적인 행위를 컴퓨터가 시뮬레이션한다 지능적인 것? 규칙이 있고, 규칙, 주변 상황에 따라 이루어진다 주변 상황을 파악하는 것이 필요하다 주변 상황에 상관없다면 그냥 로봇이다 게임에서의 AI 추가적인 고려사항 : 성능! 성능이 빨라야한다 AI 가 느리면 게임 월드에 반영이 느려지고, 반응성이 떨어질수록 플레이어가 반응하기 쉬워지면서 재미도 떨어진다 성능이 중요하다. 조금 덜 지능적이더라도 빠른것이 중요하다 외관상 그럴듯하면 된다 수준에 따라 범위를 제한한다 AI 의 종류 AI for Agent 하나를 컨트롤한다 구성요소 센서 : 주변의 정보를 파악한다 메모리 : 새로운 정보를 비교하기 위한 데이터 리즈..
1. Euler 1) 정의 물체가 놓인 방향을 3차원 공간에서 표현하기 위한 방법 (x,y,z) 축에서의 회전 각도로 정의한다 각도는 일반적으로 오른손 법칙 에 따라 정의됩니다 . 즉, 축의 양의 방향에서 볼 때 시계 방향으로 나타나는 회전을 나타낼 때 양수 값을 가지며 회전이 반시계 방향으로 나타날 때 음수 값을 갖습니다. 2) 특징 오일러 각도는 회전한 축을 기준으로 다음 회전을 한다 3) 장점 3차원 상의 물체의 방향(orientation)을 3개의 파라미터만으로 간결하게 표현할 수 있다 대략적인 방향에 대한 직관적인 정보를 준다 4) 단점 단점 1 : Gimbal Lock 같은 방향으로 두 회전 축이 겹치는 경우 해당 2개의 축이 더이상 분리되지 않는 고정 상태를 말한다 세 개의 축을 동시에 계산..
💡자소서 개인적으로 항목들이 다른 기업들에 비해서는 어려운 편에 속했던 것 같다 넷마블과 게임 산업에 대한 이해, 나의 성향과 클라이언트 프로그래머로서 가지고 있는 역량에 대해 기술해야 했다 여러 개의 항목에 대해 1000자 정도로 써야했기 때문에, 각 항목에서 보여줄 수 있는 역량들이 겹치지 않도록 배치한 후에 작성했다 무난하면서 어느정도는 내 생각이 들어가도록 적었었는데, 이후에 면접에서 내 생각이 담긴 부분에 대해서는 질문이 들어오기도 해서 조금 당황했던 것 같다 💡코딩테스트 지난번에 엔씨소프트 후기를 적을 때 코딩테스트를 깜빡했더라,, 두 기업 모두 평이하게 나왔었다 상반기 인턴 코딩테스트가 쉬운 편이었어서 방심했는데 공채는 더 어렵게 나왔다 엔씨소프트에 비해서는 좀더 어려운 문제가 섞여서 나왔었..
[인프런] C++ 프로그래밍 입문 을 보고 정리하는 글 객체지향의 시작 C++ 은 C 기반으로 다른 기능들을 탑재하다보니 절차와 객체 사이 어딘가에 있다 Class 클래스를 정의하는 것 자체로는 메모리를 차지하지 않는다 C++ 에서 class는 struct 와 은닉설정만 다르다 클래스 안에 함수를 정의해도 되긴하지만, 밖에 빼서 정의할 때에는 :: 로 클래스명을 정의한다 데이터와 동작을 함께 정의한다 instantiate : 객체를 만든다 클래스 함수 내부에서 매개변수인지, 멤버변수인지 표시하기 위해 규칙이 있는 경우가 많다 m_, m, _(언더바) 등 현 프로젝트에서는 클래스 멤버 변수는 크게 정의가 없고, 함수에 들어가는 변수는 In___ , 함수에서 포인터 값으로 전달해줄 변수는 out____ 으로..