본문 바로가기

분류 전체보기

(80)
보기 좋은 코드의 중요성과 코드의 디자인 보기 좋은 코드의 중요성 구성요소1. 문서2. 분할3. 네이밍4. 언어의 사용 형태5. 포매팅 코드의 문서화 주석을 작성해야 하는 이유: 사용자가 그 코드와 어떻게 연동할 수 있는지 설명하기 위해서 공개 메소드에 주석을 제공하면1. 코드로는 표현하기 어려운 내용을 자연 언어로 기술할 수 있다2. 그 메소드의 사용 방법을 담을 수 있다 메타정보를 제공하는 주석: 코드의 개별적인 기능을 설명하기 보다 코드가 생성된 배경에 대해 설명한다 리팩토링 : 코드를 재구성하는 것 추상화를 더욱 강화하는 방법1. 필드(멤버 변수)를 캡슐화한다 : 필드를 private 블록에 두고 접근은 게터와 세터를 이용 2. 타입을 일반화한다 : 좀 더 일반적, 범용적 타입을 이용햇 많은 코드에서 활용할 수 있게 한다 코드를 좀 더 ..
auto, decltype, 문자열 DirectX11을 공부하는 것도 중요하지만 C++ 기초를 다지는 것도 중요하다고 생각한다.문법을 안다고는 하지만 하나하나 세세하게 살펴보고 이해도를 높이는 것이 중요하다는 생각이 들었다.그래서 전문가를 위한 C++ 책도 가끔 가다 보고 있다. 타입 추론 auto, decltype auto 키워드1. 어떤 변수의 타입을 컴파일 타임에 자동적으로 연역해내는 것 ex) auto x = 123; // x는 int 타입이 된다 2. 새로운 함수 정의 문법 3. 자동 함수 리턴 타입 4. 제네릭 람다 표현식 decltype 키워드: 표현식을 인자로 받아서 그 표현식의 결과 타입이 무엇인지 알아낸다 ex) int x = 123; decltype(x) y =456; 동적 메모리: 컴파일 타임에 크기를 정할 수 없는 ..
Lambda (람다) auto Lambda = [캡처_블록](파라미터_목록)mutable 익셉션_목록 속성_지정 -> 리턴_타입{함수_바디}; 캡처 블록 : 람다 함수 안에서 참조할 바깥 변수들을 지정한다. 지정한 변수들은 람다 함수의 스코프 안으로 들어와서 함수 바디에서 접근할 수 있게 된다.파라미터 목록 (생략 가능) : 표현식에서 넘겨받을 파라미터 목록을 정의한다.생략하려면 mutable, 익셉션 목록, 리턴 타입을 지정하지 않아야 한다.mutable (생략 가능) : 람다 함수의 const 속성을 지워서 캡처받은 변수를 수정할 수 있게 한다.익셉션 목록 (생략 가능) : 람다 표현식의 바디 본체 안에서 throw 할 수 있는 익셉션 종류를 지정한다.속성 지정 (생략 가능) : 람다 표현식의 속성을 지정한다.리턴 타입 ..
HDR 이론 포스트 프로세싱 : 조명이 적용된 3D 씬에 2D 이펙트를 적용해 화면에 최종적으로 출력되는 이미지를 개선하는 작업 LDR (Low Dynamic Range) 렌더링 : 8비트 채널 텍스처, 모든 출력 값이 0 ~ 1 사이의 범위로 고정된다 Saturation : 값을 0 ~ 1로 고정해주는 Clamp 역할 밝은 씬에 조명을 비추면 저장해야 하는 조명 값은 LDR의 최대값인 1을 넘어서게 된다. 고정 범위 때문에 밝은 부분의 디테일은 날아가게 된다. LDR 텍스처의 저장 범위가 포화되기 때문이다.마찬가지로 어두운 씬은 낮은 값에서 동일한 효과를 일으킨다 휘도 (Luminance) : 특정 방향에서 표면으로부터의 단위지역당 빛의 정도. 색의 밝고 어두운 정도를 말한다. 톤 매핑 (Tone Mapping) ..
Rasterizer 래스터화기 단계의 처리 공정기하 자료를 렌더 타겟에 저장하기에 적합한 이미지 기반 자료로 효율적으로 변환하는데 필수적이다입력된 기본 도형이 처음 처리되는 연산은 Culling이다Back Face Culling (후면 추려내기): 뒤쪽(시점에서 멀어지는 쪽)을 향한 면을 제외시키는 것. 이 단계에 입력되는 기본도형 중 Face라는 개념이 유효한 것은 삼각형 뿐이라서 삼각형에만 적용된다Culling에 관련된 설정은 CullMode와 FrontCounterClockWise 이다.IA로 입력할 기하구조 자료의 성격에 따라 시계 방향을 전면으로 할 것인지 반시계 방향을 전면으로 할 것인지 결정한다FrontCounterClockWise는 기본도형의 어느 쪽이 전면이고 어느 쪽이 후면인지를 결정한다CullMode는 ..
Light / Rendering 실용 Direct3D 11 렌더링 & 계산 이라는 책을 보고 있다. 처음 Resource와 View, Device, Context와 같은 DirectX11에 관한 내용들이 자세하게 설명되어 있다 그런데 번역을 너무 정직(?)하게 해놓으셔서 실무에서 쓰는 용어들로 다시 해석을 해야하는 경우가 많다 예를 들어 Semantic을 시맨틱말고 의미소로 써있다던지, World 행렬을 세계 행렬이라고 써있다던지.. 이런 번역들 덕에 읽다가 집중이 깨지는 경우가 종종 있는 거 같다 오늘은 조명 부분을 읽었는데 Deferred Rendering과 밀접한 연관이 있어서 자세하게 보고 있다 지금 3D 포트폴리오를 제작할 때 Forward Rendering과 Deferred Rendering을 같이 사용해야하기 때문에 더 유..
가상 메모리 (Virtual Memory) 내용이 정말 쉽게쉽게 설명되어 있어서 어느정도 이해가 쉬운 거 같다 코드적인 부분은 자세히 보지 않아서 나중에 한번 더 볼 때는 코드도 따라쳐가면서 봐야겠다 가상 메모리 컨트롤 Reserve는 예약, Commit는 할당, Free는 할당되지 않았음을 의미한다 페이지의 개수 = 가상 메모리의 크기 / 페이지 하나당 크기 페이지 개수는 가상 메모리의 크기에 비례한다 Free->Commit로 변경하는 것은 malloc 함수 호출을 통해 페이지 크기만큼 할당하면 된다 Reserve상태는 Free와 Commit의 중간 상태이다 메모리를 할당하기 전1.메모리 할당의 시작 주소2.할당할 메모리의 크기을 생각해야한다 가상 메모리 시스템은 페이지 단위로 관리된다. 페이지의 중간 위치에서부터 할당을 시작할 수 없으며, 페..
동기화 (Synchronization) 스레드 동기화: 스레드의 실행순서를 정의하고, 이 순서에 따르도록 하는 것. 메모리 접근 에 있어서 동시접근을 막는 것도 해당함. 유저모드 동기화 (User Mode Synchronize): 동기화가 진행되는 과정에서 커널의 힘을 빌리지 않는 동기화 기법. 동기화 를 위해서 커널 모드로의 전환이 불필요하기 때문에 성능상에 이점이 있다. 커널모드 동기화 (Kernel Mode Synchronize): 커널에서 제공하는 동기화 기능을 활용하는 방법. 동기화에 관련된 함수가 호출될 때마다 커널 모드로의 변경이 필요하고, 이는 성능의 저하로 이어진다 임계영역 (Critical Section): 문제의 원인이 될 수 있는 코드의 블록. 배타적 접근이 요구되는 공유 리소 스에 접근하는 코드 블록 뮤텍스 (Mutex..