본문 바로가기

HDR 구현 과정 1부 HDR은 이론에서 나와있듯이 화면의 픽셀들의 평균 휘도 값을 구해서 ToneMapping 공식으로 LDR로는 표현할 수 없는 밝기를 밝게 해주거나 어둡게 해주는 기능이다. HDR을 구현하기 위해서는 ShaderResourceView와 UnorderedAccessView를 만들어주기 위한 버퍼2개, Input용인 Shader Resource View 2개, Output용으로 사용하는 UnorderedAccessView 2개, ToneMapping에 평균 휘도 값을 넣어줄 ShaderResourceView 1개가 필요하다 (이하 Shader Resource View 를 SRV, UnorderedAccessView를 UAV라 하겠다) 버퍼에 들어가는 옵션은 D3D11_BUFFER_DESCtDesc = {}; ..
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를 사용한 모든 코..
다시 포스팅 시작 그동안 3D 포트폴리오 기간이라 포스팅을 하기 어려웠다. 시연회까지 끝내고 영상찍는 중.. 이제 슬슬 그동안 공부한 것들 정리하고 포트폴리오 들어간 기술들을 하나씩 남겨놔야겠다.
DirectX11 자원 (Resource) Direct3D 11의 자원은 버퍼(Buffer), 텍스처(Texture)로 나뉜다. 이 자원들은 ID3D11Resource라는 단일 공통 기반 클래스를 상속받는다. 이러한 구조는 자원이라는 것이 결국 파이프라인에 연결할 수 있고 입력 또는 출력에 쓰이는 메모리 블록이라는 것을 보여준다. 모든 메모리 자원의 생성은 ID3D11Device 인터페이스로 만든다 모든 자원 생성 메서드는 세개의 매개변수를 받는다 1.. Resource Description : 자원 생성에 관한 모든 옵션을 지정하는 구조체이다. 생성된 자원의 원하는 특성들을 정의하는데 쓰인다. 용도 명세 (Usage Specification) : 자원을 어떤 용도로 사용할 것인지 나타낸다. enum D3D11_USAGE { D3D11_USAGE..