렌더링 파이프라인이란 3D 이미지를 2D 화면에 보여주기 위한 단계입니다. 아래 내용은 핵심적이라고 부를 수 있는 부분들에 대한 설명입니다. Input-Assember Stage(IA) : 구현할 모델에 대한 정보를 받아오는 단계 - 정점의 정보들(위치, 노말, 색상, UV) Vertex Shader(VS) : 정점을 대상으로 연산을 하는 단계(로컬 -> 월드 -> 카메라 -> Projection 으로써 구현되는 정점 위치 계산) - 로컬은 자기 자신을 기준으로 하는 좌표계 - 월드는 월드 기준으로 하는 좌표계 - 카메라는 카메라 기준으로 하는 좌표계 - Projection은 3D 화면을 2D 화면으로 바꿔주는 단계입니다. 바꾸는 방법 월드 : 로컬 * W(스케일(scale) 자전(Lotation) 이동..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
1장 멀티플레이어 게임의 간추린 역사 복습 문제 1-1) 로컬 멀티플레이어 게임과 네트워크 멀티 플레이어 게임의 차이는 무엇인가? 로컬 같은 경우에는 한 컴퓨터에서 2인이 함께 게임을 플레이 함. 네트워크 멀티 플레이어 게임은 네트워크 상에서 다수의 컴퓨터가 함께 플레이 가능함. 1-2) 로컬 네트워크 연결의 세 가지 예를 들어보자. 1) 직렬 포트로 컴퓨터를 서로 연결 2) 랜 네트워크 연결 3) 전화선(?) 1-3) 랜에서 동작하는 게임을 인터넷에서도 동작하게 하려면 어떤 점을 주로 고려해야 하는가? 랜으로 멀티플레이가 가능하다면, 다른 연결 수단으로도 멀티플레이가 가능하다. 다만 레이턴시, 즉 네트워크로 데이터를 전송하면서 발생하는 시간 지연을 해결해야 한다. 1-4) 머드 게임이란 무엇이며 추후 ..
이번 내용은 단순하게 후에 코딩 때, 사용할 STL들이이나 함수를 좀 더 편하게 찾기 위해서 만든 글입니다. 내용은 제가 이해한 것을 바탕으로 적은 것이므로 틀릴 수도 있습니다. 만약 틀린 내용이 있다면 댓글 달아주시면 감사하겠습니다. ㅎㅎ new, delete : 동적할당 ifstream, ofstream, std::stringstream(문자열 스트림) : 파일 입출력 template : 템플릿, 템플릿 메타 프로그래밍도 존재 std::vector, std::list, std::deque : 자료구조 1 std::set, std::map (unordered도 존재) : 자료구조 2 std::algorithm : 알고리즘(sort, remove) [전달받을내용](인자) { 내용 } : 람다 형식 std..
사이트 : https://modoocode.com/271 씹어먹는 C++ - modoocode.com Atomic - CAS(Compare_And_Swap) 의사 코드 (한줄로 실행) if(_locked == expected){ exptected = _locked; _locked = desired; return true; } else{ expected = _locked; return false; } 이 코드의 핵심은 SpinLock입니다. SpinLock이란, while로 반복문을 돌면서 내가 Lock을 잡을 수 있는지 확인하는 방식의 Lock이다. Lock을 걸때는 Atomic의 compare_exchange_strong을 사용하여 _locked가 false, 즉 아무도 Lock을 잡지 않은 상태일때 ..
강의 : https://modoocode.com/252 씹어먹는 C ++ - modoocode.com 위 강의의 문제를 풀어본 내용입니다. 다만, 아직 촌수 계산은 미구현 상태입니다. 예시 더보기 #include #include #include #include #include "Member.h" int main() { std::shared_ptr m0 = std::make_shared("A"); std::shared_ptr m1 = std::make_shared("B"); std::shared_ptr m2 = std::make_shared("C"); std::shared_ptr m3 = std::make_shared("D"); std::shared_ptr m4 = std::make_shared("E");..
#pragma once template class unique_ptr { private: T* data; //static bool count = false; public: // 복사생성자 삭제 (이동만 가능하도록) unique_ptr(const unique_ptr& rhs) = delete; unique_ptr& operator= (const unique_ptr& rhs) = delete; // 종료생성자 ~unique_ptr() { if(data != nullptr) delete data; } //생성자 unique_ptr() : data(nullptr) {} unique_ptr(T* t) : data(t) {} //이동 생성자 unique_ptr(unique_ptr&& t) noexcept{ this..