목록전체 글 (253)
bdfgdfg
사용기술 C++11 DirectX11 IOCP MSSQL (ODBC API) 개발인원 1명
변환(Transform) 그래픽스에서 물체의 변환을 위해 행렬을 사용한다. Scale(신축),Rotation(회전),Translation(이동)의 변환행렬부터 살펴본다. -> 위를 SRT변환 행렬이라 하며 로컬공간에서 위의 행렬들을 곱하여 월드공간에 올린다.(단위 행렬이어도 상관없다) -> 로컬공간은 물체 중심의 자신만의 좌표 공간. -> 월드공간은 하나의 월드(게임 세상)가 기준이되는 좌표 공간. -> 왼손 좌표계를 사용하는 DirectX에서는 S * R * T * M(기타 행렬)의 순서로 최종 변환 행렬을 결합해야 한다. Scale행렬 스케일 행렬은 월드 공간에 올라갈 물체의 크기를 바꾼다. 물체의 크기를 바꾸기 위한 행렬을 곱할 떄는 위의 Scale행렬을 곱하게 되는데, 주 대각선상에서 물체의 3차..
std::function std::function은 호출할 수 있는 모든 것을 Callable이라 하며, C++에서는 ()를 붙여 호출할 수 있는 모든것으로 정의한다. 위 경우 함수만을 떠올릴 수 있지만, C++에서는 Callable의 방법은 다양하다. 1 2 3 4 5 6 7 8 9 10 11 12 struct FuncObject { int operator()(int a, int b) { return a + b; } }; int main() { FuncObject a; std::cout 람다도 가능. -> C 스타일의 함수 포인터의 경우에는 함수만 저장 가능했다. 1 2 3 4 5 FuncObject a; int (*ptrFunc)(int a, int b); ptrFunc = a(20, 30); // ..
std::atmoic atomic은 원자라는 의미를 가지며 원자적 연산(더 이상 쪼개질 수 없는 연산)을 진행한다. 원자적 연산은 처리하는 중간에 다른 스레드가 끼어들 여지를 주지 않으며 전부 처리하거나 or 아무것도 하지 못했다. 이 두 가지 상황만이 존재하는 연산. 즉 한번에 일어나는 연산. 이것은 싱글 쓰레드 환경에서는 중요치 않지만, 멀티 쓰레드 환경에서는 중요한 개념. -> 둘 이상의 스레드가 공유 자원에 접근할 때 발생할 수 있는 문제를 경쟁 상태(Race condition)이라 한다. -> 경쟁 상태는 mutex와 같은 상호 배제 객체로도 해결이 가능하지만, atomic연산을 통해서도 위의 문제를 방지할 수 있다. -> 경쟁 상태가 문제가 되는 이유는 운영체제의 콘텍스트 스위칭(Context..