전체 글

전체 글

    전문가를 위한 C++ : 1장 (2)

    1. enum과 enum class enum은 원래 타입을 엄격하게 따지지 않는다. 타입을 엄격히 따지는 것을 '스트롱 타입' 또는 '타입에 안전하다(타입 세이프하다)'고 표현한다. enum 타입은 항상 정수로 해석하기 때문에 선언한 형태에 관계없이 모든 enum 타입을 서로 비교할 수 있다. 타입을 엄격하게 적용하고 싶다면 enum class를 사용한다. enum class PieceType { King = 1, Queen,// 2 Rook = 10, Pawn// 11 }; enum class로 정의한 열거 타입 값들의 이름은 스코프(유효 범위)가 자동으로 확장되지 않는다. 다시 말해 enum class 스코프 안에서만 유효하다. 따라서 열거 타입 값을 사용할 때마다 다음과 같이 스코프 지정 연산자를 ..

    전문가를 위한 C++ : 1장 (1)

    위 책을 읽으며 공부한 내용을 정리한 글입니다. 1. using문 헤더 파일 안에서는 절대로 using 문을 작성하면 안된다. (책) 일반적으로 헤더 파일(*.h)에는 using 지시문을 넣지 마세요. 해당 헤더를 포함하는 모든 파일이 네임스페이스의 모든 식별자를 범위로 가져오기 때문에 이름 숨김 및 이름 충돌 문제가 발생할 수 있으며, 디버그하기 매우 어렵습니다. 헤더 파일에는 항상 정규화된 이름을 사용하세요. (MSDN) https://docs.microsoft.com/ko-kr/cpp/cpp/namespaces-cpp?view=msvc-170&viewFallbackFrom=vs-2019 2. c++ 17 중첩된 네임 스페이스 기존에는 이런 방식 namespace MyLibraries { namesp..

    [C++ 11] 중괄호 초기화, 초기화 리스트(Initialize List)

    1. 4가지 초기화 방법 int main() { int value1 = 5; // C int value2(5); // C++ int value3{ 5 };// C++ 11 유니폼 초기화(균일한 초기화) int value4{}; // C++ 11 default인 0으로 초기화됨 } 2. 중괄호 초기화 시 주의할 점 중괄호 초기화는 축소변환(narrowing conversion)을 지원하지 않는다. int main() { // 중괄호 초기화는 축소변환(narrowing conversion)을 지원하지 않는다. // 즉 자동으로 변환되는 것을 막을 수 있다. // 컴파일 에러난다. int v1{ 5.1 }; double d{ 0.5f }; int i{ d }; // 마찬가지로 컴파일 에러, 데이터가 잘리는 것..

    [C++ 11] 복사 생략(Copy Elision)

    [C++ 11] 복사 생략(Copy Elision) 컴파일러가 복사 또는 이동 연산자를 회피 할 수 있으면 회피하는 것을 허용하는 방식 Return Value Optimization / Named Return Value Optimization (예시) struct Foo { Foo() { std::cout Release로 빌드하는 이유) Foo nrvo_foo = NRVO_F(); } Named Return Value Optimization (NRVO) NRVO는 RVO에 속하는 종류로써 예전에는 이러한 NRVO_F 라는 함수 내부에 foo라는 이름을 가진 객체는 return 시켜도 최적화 시키지 않았다. 그러나 사람들이 이름을 가지더라도 최적화 시키자고 하였고 이를 NRVO(Named Return Va..

    [DirectX 11] Normal Mapping

    Normal Mapping 개발 기간 : 2021년 5월 17일 ~ 2021년 5월 18일 Normal Mapping은 다음과 같은 과정으로 진행됩니다. 1. Normal Map 텍스쳐를 로드합니다. 2. Tangent Space의 TBN 벡터 중 T 벡터를 계산합니다. 이 때, 메쉬의 각 정점 v마다, 메쉬에서 그 정점을 공유하는 모든 삼각형의 T 벡터의 평균을 내서 vertex별로 T 벡터를 구합니다. 3. PS에서는 픽셀 위치에서 T와 N 벡터를 알고있고, 외적을 통해 B 벡터를 구합니다. 그리고, TBN 행렬을 구축해 Normal Map의 Tangent Space Normal값을 World Space로 변환합니다. 1. Normal Map 텍스쳐를 로드합니다. 확장자에 따라 DXTK 라이브러리에서..

    [DirectX 11] Skinning Animation

    Skinning Animation 개발 일자 : 2021년 5월 6일 업데이트 일자 : 2021년 12월 12일, FBX 포맷 지원하도록 업데이트 되었음 스키닝 애니메이션 과정은 다음과 같습니다. 1. ase 파일로부터 Bone 데이터 파싱 2. Animation 데이터 파싱 3. Animation Update하기 4. BoneTM 구하기 5. VS에서 vertex마다 BoneIndex, BoneWeight에 따라 BoneTM 곱하기 1. ase 파일로부터 Bone 데이터 파싱 본의 개수, 본의 이름, vertex의 bone index, bone weight를 파싱하고, 데이터를 저장해줍니다. 2. Bone List에 Bone Mesh의 Animation Data를 파싱해서 넣습니다. ase를 기준으로 ..

    [DirectX 11] HDR, Tone Mapping

    개발 일자 : 2022년 1월 20일 기존에 렌더 타겟들을 정수형 버퍼로 사용하고 있었다가, 더 넓은 색감을 지원하고자 HDR을 지원하도록 변경하였습니다. 이를 위해, 렌더 타겟 생성 시에 16bit 실수형 포맷으로 세팅해줬습니다. 기존 렌더링 방식을 그대로 사용하여 16bit 실수형 버퍼에 기록하고, 마지막에 ToneMapping을 하여 HDR->LDR로 압축해줍니다. 이유는, 디스플레이는 HDR 영역까지 표현할 수 없기 때문에 0 ~ 1.0으로 맵핑해줘야하기 때문입니다. 제가 구현해본 ToneMapping은 두 가지입니다. 1. Reinhard 가장 기본적인 톤 맵퍼입니다. 톤 매핑이 끝난 후에는 Gamma Correction을 위해 2.2 제곱 해줬던 값을 다시 1/2.2 제곱을 해주고 있습니다. ..

    SVN 커밋 기록 한 눈에 보기

    https://github.com/JongZero/SVNLogParser GitHub - JongZero/SVNLogParser: SVN의 로그 기록을 가져와 Github처럼 커밋 기록을 한 눈에 볼 수 있게 해주 SVN의 로그 기록을 가져와 Github처럼 커밋 기록을 한 눈에 볼 수 있게 해주는 프로그램 - GitHub - JongZero/SVNLogParser: SVN의 로그 기록을 가져와 Github처럼 커밋 기록을 한 눈에 볼 수 있게 해주는 프로그 github.com SVN 커밋 기록을 Github처럼 한 눈에 볼 수 없을까해서 만들어본 프로그램입니다. 엑셀을 이용해 만듭니다. 사용 프로그램 : tortoiseSVN, Excel, Visual Studio 2019 사용 방법은 다음과 같습니다...