Programming

    언리얼 엔진 Cast (캐스팅) 심층 분석

    언리얼의 Cast는 UObject 베이스 클래스들을 동적으로 안전하게 형변환 해주는 함수입니다. 캐스팅에 실패하게 될 경우 nullptr을 반환해주게 됩니다. 캐스팅을 할 경우 null 체크는 필수겠죠? 해당 포스팅은 언리얼 Cast의 동작을 하나 하나 분석해 정리하는데 목적을 두었습니다. 다양한 타입을 캐스팅해야 하는 캐스팅의 특성상 가독성은 우주로 날아가는 템플릿 기반으로 되어있어 잘못 파악한 경우도 있을 수 있습니다. 틀린 부분이 혹여나 있다면 댓글로 잡아주시면 정말 감사하겠습니다. Cast함수는 내부적으로 TCastImpl 구조체의 인라인 함수인 DoCast 함수를 호출하게끔 되어있습니다. // Dynamically cast an object type-safely. template FORCEINL..

    각종 프로그래밍 언어 입출력 속도 개선

    C scanf/printf는 충분히 빠릅니다. C++ 아래 얘기는 cin, cout을 쓸 때의 얘기지, scanf/prinf로 입출력을 하고자 하신다면 그냥 쓰시면 됩니다. scanf/printf는 충분히 빠릅니다. endl은 개행문자를 출력할 뿐만 아니라 출력 버퍼를 비우는 역할까지 합니다. 그래서 출력한 뒤 화면에 바로 보이게 할 수 있는데, 그 버퍼를 비우는 작업이 매우 느립니다. 게다가 온라인 저지에서는 화면에 바로 보여지는 것은 중요하지 않고 무엇이 출력되는가가 중요하기 때문에 버퍼를 그렇게 자주 비울 필요가 없습니다. 그래서 endl을 '\n'으로 바꾸는 것만으로도 굉장한 시간 향상이 나타납니다. cin.tie(NULL)은 cin과 cout의 묶음을 풀어 줍니다. 기본적으로 cin으로 읽을 때..

    프러스텀 컬링

    -머릿말- 하드웨어의 발전에 따라 실시간 렌더링 및 포토리얼리즘(현실 사진과도 같은 그래픽풍)등이 이루어 지고 있지만, 위와 같은 고품질 컨텐츠를 위해 3d 렌더링에 있어 여러 최적화 기술이 들어가기에 가능한 일이다. 다양한 컬링 기법중 가장 중요한 속도 증가 기법 중 하나인 프러스텀 컬링에 대한 포스팅이다. 프러스텀 컬링은 번역하면 절두체 컬링이라고 불리며, 카메라의 시야 범위에 포함되는 것들만 렌더링 하며, 나머지는 잘라내듯 렌더링을 하지 않는 기법이다. 피라미드 꼭지를 잘라낸 모양을 절두체라고 할 수 있는데, 이 6개의 평면을 통해 내외부를 판단해 컬링 기법을 적용하게 된다.

    왼손 좌표계, 오른손 좌표계

    맨 처음 접했을땐, 이해하기 참 힘들었던 좌표계 개념... 3d 게임을 개발하려면 3차원 공간을 이해해야하고, 여러 3d 프로그램들이 3차원 공간을 어떻게 표현하고 있는지도 알아야 한다. 3차원 공간에 대한 좌표계 정의는 왼손 좌표계와 오른손 좌표계로 나눌 수 있다. 위 사진을 보면 z축 방향이 반대인것을 빼면 동일하다. 나는 위 방식처럼 손을 거울 반사 대칭형태로 왼손좌표계와 오른손 좌표계를 이해했었다. 대표적인 3d 프로그램의 좌표계 방식이다.