본문 바로가기

프로그래밍

(77)
template template : 타입을 가변적으로 사용할 수 있도록 해준다. 타입을 여러개 받아서 사용할 수도 있다. 제한이 없다. 형태 : template / template 템플릿은 클래스나 함수에서 사용할 수 있다. ex) 아래처럼 해주게 되면 T가 변수 타입이 된다. 템플릿의 타입은 컴파일 시간에 정의가 된다. 이 함수를 호출하면서 타입이 정해지기 때문이다. 함수를 호출하는 구문을 컴파일러가 분석할 때 어떤 타입인지 정해지게 된다. template T Sum(T a, T b) { return a+ b; } int main() { // 아래처럼 명시적으로 타입을 지정해줄 수 있다. cout
const와 static const : 변수를 상수값으로 만드는 용도, 객체의 데이터 변경을 허용하지 않게 하고 싶을 때 사용한다. 클래스 멤버함수는 함수 선언 끝에 const를 붙일 수 있다. const를 붙이게 되면 이 함수 안에선느 멤버변수의 값을 변경할 수 없다. 이 클래스를 이용해서 생성한 객체가 const로 생성이 되면 일반 멤버함수는 호출이 불가능하다. 함수 뒤에 const가 붙은 멤버함수만 호출이 가능하다. ex) int GetVariable() const { return iVariable; } const의 사용 예시 1. const int iNum = 10; -> 변수 num을 상수화한다. 2. const int * ptr1 = &val1; -> 포인터 ptr1을 이용해서 vall의 값을 변경할 수 없다. 3. ..
복사생성자 다른 객체의 데이터를 복사해서 객체를 생성할 수 있도록 해주는 생성자이다. 만약 복사생성자가 없다면 기본 복사생성자를 활용하게 된다. 인자로 해당 클래스의 객체를 받게 되어있고 그 객체를 복사해주게 된다. 얕은 복사 (Shallow Copy) : 단순한 값을 복사하는 방식이다. 기본 복사생성자는 얕은복사를 해준다. 깊은 복사 (Deep Copy) : 값 뿐만 아니라 동적할당된 공간은 새로 공간을 할당해주고 기존 객체의 동적할당된 공간의 값을 새로 할당된 공간에 복사해주는 방식이다. class SoSimple { private: int num1; int num2; public: SoSimple(int n1, int n2) : num1(n1), num2(n2) { } void ShowSimpleData() ..
Reference (참조자) Reference : 자신이 참조하는 변수를 대신할 수 있는 또 하나의 이름, 다른 대상을 참조할 수 있는 기능이다. Reference는 그 자체가 참조하는 대상이 된다. 일종의 별명을 붙여주는 것이다. 반드시 변수 선언과 동시에 참조하는 대상을 지정해주어야 한다. 값을 복사하지 않고 같은 메모리 공간의 이름(참조)이다. Reference와 Pointer의 차이점 : Pointer는 다른 대상을 참조하기 위해서 참조할 대상의 메모리 주소를 담아두고 참조를 한다. Reference는 주소를 저장하는 것이 아니라 바로 접근하여 참조할 수 있게 만들어준다. Reference에 const가 붙으면 참조하는 대상의 값을 변경할 수 없다. 단순 값 참조용으로만 쓴다. Reference 변수는 선언할 때만 참조 대상..
while과 do while, #define과 inline while문과 do while문의 차이 do while : 처음 한번은 코드블럭 안의 코드가 무조건 동작되고 그 후에 조건식을 체크하여 true일 경우 반복하게 된다. while : 시작부터 조건을 체크한다. 열거체 : 숫자에 이름을 부여하여 연속된 상수에 이름을 주거나 아니면 원하는 상수값에 이름을 부여해줄 수 있다. 일종의 사용자 정의 타입을 만들어내는 것이다. 그렇기 때문에 main 바깥에 열거체를 만들어두고 main 안에서 사용할 수 있다. enum 문의 이름이 곧 변수 타입이 될 수 있고 4 byte의 크기를 가지게 된다. #define과 inline #define : 전처리기에서 처리된다. ex) #define FOUR 4 -> FOUR라는 이름에 4를 부여해놓고 이 FOUR를 사용한 모든 코..
DirectX11 자원 (Resource) Direct3D 11의 자원은 버퍼(Buffer), 텍스처(Texture)로 나뉜다. 이 자원들은 ID3D11Resource라는 단일 공통 기반 클래스를 상속받는다. 이러한 구조는 자원이라는 것이 결국 파이프라인에 연결할 수 있고 입력 또는 출력에 쓰이는 메모리 블록이라는 것을 보여준다. 모든 메모리 자원의 생성은 ID3D11Device 인터페이스로 만든다 모든 자원 생성 메서드는 세개의 매개변수를 받는다 1.. Resource Description : 자원 생성에 관한 모든 옵션을 지정하는 구조체이다. 생성된 자원의 원하는 특성들을 정의하는데 쓰인다. 용도 명세 (Usage Specification) : 자원을 어떤 용도로 사용할 것인지 나타낸다. enum D3D11_USAGE { D3D11_USAGE..
Rim Light 이론과 구현 Rim Light = 역광 (Back Lighting) : 오브젝트 뒷면의 조명이 비춰서 오브젝트의 외각이 빛나는 듯이 보이는 현상(엣지 라이팅) 장점 1. 캐릭터와 배경의 구별을 명확히 한다 2. 물체의 외곽선을 살려준다 3. 빛을 받지 않는 부분의 디테일을 높여준다 4. 구현이 아주 간단하다' Fresnel (프레넬)공식을 사용한다. ViewDir을 이용하는데 이것은 버텍스에서 바라보는 카메라의 방향이다. Normal과 ViewDir을 dot 연산하게 되면 카메라가 조명처럼 인식되서 내가 바라보는 방향이 계속 밝아진다. 카메라가 조명인 것처럼 연산되었기 때문에 카메라를 회전해도 빛의 각도는 변하지 않는다. 이 결과를 뒤집어준다. Emissive = 1- fRIm 이렇게 하면 각도를 바꾸어도 외각이 밝..
Adaptation 구현 과정 Adaptation은 이론에도 나와있듯이 사람이 어두운 곳에 있다가 밝은 곳으로 나오면서 눈이 서서히 적응하게 되는 효과를 말한다. Adaptation을 구현하려면 먼저 HDR이 구현되어야 한다. Adaptation을 구현하기 위해서는 리소스를 저장할 Buffer 3개, Input을 위한 ShaderResourceView 3개, Output을 위한UnorderedAccessView 3개가 필요하다 픽셀을 DownScale 하기 위해 다음과 같은 Description을 가진 Buffer, ShaderResourceView, UnorderedAccessView를 만들어준다. 그리고 DownScale에서 구한 현재 프레임의 평균 휘도를 가지고 Adaptation을 해주기 위해 다음과 같은 Description..