본문 바로가기

전체 글339

1. protected 생성자 & 소멸자 protected에 생성자가 있는 경우 생성자가 protected에 있는 경우, 외부에서 생성할 수 없다. 파생 클래스의 생성자에서만 불릴 수 있다. class Animal { public: virtual ~Animal() {} protected: Animal() {} }; class Dog : public Animal { public: Dog() {} }; *기반 클래스의 생성자와 파생 클래스의 생성자 중 어떤 게 먼저 불릴까? - 보통 기반 클래스의 생성자가 먼저 불린다고 알고 있지만 (결과적으로는 맞음) - 파생 클래스가 먼저 불리고 거기서 기반 클래스를 먼저 실행시키는 것 - 단지 그 시점이 파생 클래스 생성자 내부의 코드를 실행하기 전이라서 먼저 기반 클래스의 코드가 먼저 실행되는 것 뿐임 Do.. 2023. 2. 8.
24. Multi Render Target - 멀티 렌더타겟은 CCTV같이 화면 안에 화면을 표현할 때 주로 사용되는 기술이다. - 하나 더 주요한 기능은 텍스쳐에 정보를 저장할 수 있다는 것인데, - 원래 기존에 픽셀 쉐이더의 결과물이 단순히 색상값이었다면, - 멀티 렌더타겟을 통해 텍스쳐에 픽셀 쉐이더의 결과를 저장하면 이후에 이 텍스쳐를 통해 그 정보를 재사용할 수 있다. - 어떤 이점이 있는가? - A라는 정보를 B, C, D라는 텍스쳐에 적용하고 싶은데 각각 적용하려면 전부 렌더링파이프라인을 처음부터 거쳐서 하나 하나 처리해야 한다. - 그런데 텍스쳐에 저장해놓으면 한 번 계산된 값을 돌려쓸 수 있는 장점이 생겨서 성능 향상에 도움이 된다. - 이런 기법을 Deferred Rendering 기법이라고 하고, 기존에 우리가 사용한 방법은 .. 2023. 2. 4.
23. Orthographic Projection 직교투영은 원근투영과 다르게 깊이 값에 대해 크기를 보정해주지 않는다. UI와 같은 고정된 화면을 만들 때 유용하게 사용된다. *NDC 좌표계는 x(-1~1), y(-1~1), z(0~1)로 되어 있다. - x, y만 봤을 때 가운데가 (0, 0)이고 우상단은 (1, 1)이 되어야 함 - 실제 크기인 width, height를 대입해보면 좌표는 우상단이 w/2, h/2이므로 이 값을 1, 1로 만들어 주어야 한다. - 그러려면 x = 2x/w로 계산하고, y = 2y/h로 계산해야 한다. - (x는 x를 (w/2)로 나눈 값이고, y는 y를 (h/2)로 나눈 값이다.) - z는 비교적 조금 더 까다롭다. - z = z / (f - n) - n / (f - n) 이 식에 z를 대입하여 계산해면 된다. - .. 2023. 2. 2.
22. Quaternion - 개념과 사용 방법 - 사원수라고도 부르며, Vector4와 같이 float4개로 이루어진 단위 - 행렬에 비해 빠르고, 메모리를 적게 차지한다 - 그리고 짐벌락 현상을 막을 수 있다. 쿼터니언 q는 xi + yj + zk + w로 이루어져 있으며, xi + yj + zk를 허수부, w를 실수부로 표현한다. i, j, k는 서로 다른 공간에 존재하며, 아래와 같은 식을 만족한다. i² = j² = k² = -1 ij = -ji = k jk = -kj = i ki = -ik = j 각 요소의 제곱은 -1이지만 각각 요소에 대한 곱은 다른 차원으로 이동된다. xi + yj + zk + w 로 이루어진 구성은 Vector4에서 x, y, z, w의 구성과 비슷함을 알 수 있다. 따라서 3차원 벡터 v(x, y, z)를 4차원 벡.. 2023. 2. 1.