일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- DirectX
- vertex
- 다이렉트 초기화
- engine
- 게임수학
- 다이렉트X 튜토리얼
- C언어
- 전처리문
- 다이렉트X
- CPU
- Direct3D
- RenderTargetView
- GPU
- DirectX12
- Input Assembler
- 세팅
- UE4
- swapchain
- Direct3D Init
- View
- 코딩
- 프로그래밍
- c
- 동기화
- DESC
- CommandList
- DirectXTK
- Direct Init
- C++
- 다중표본화
- Today
- Total
목록분류 전체보기 (71)
비타Cpp
모니터의 픽셀들이 무한히 작지는 않기 때문에, 모니터에 임의의 선을 완벽하게 표현할 수는 없다. 흔히 '계단현상'이라고 하는 앨리어싱(Aliasing) 효과가 아래의 그림이다. 선을 픽셀들의 배열로 '근사'하다 보면 이런 현상이 생긴다. 삼각형의 변에서도 이와 비슷한 앨리어싱 효과가 나타난다. 이러한 계단현상을 바로잡을 수 있는 기법이 안티앨리어싱(Anti-Aliasing)기법이다. 이러한 기법의 하나가 초과 표본화(Supersampling)이다. 초과 표본화에서는 후면 버퍼와 깊이 버퍼를 화면 해상도보다 4배(가로, 세로 두 배씩) 크게 잡고, 3차원 장면을 4배 크기의 해상도에서 후면 버퍼에 렌더링 한다. 이미지를 화면에 제시할 때가 되면 후면 버퍼를 원래 크기의 버퍼로 환원(Resolving)한다...
렌더링 과정에서 GPU는 자원들에 자료를 기록하거나 자원들에서 자료를 읽어 들인다. Draw() 명령을 호출하기 전에, 먼저 참조할 자원들을 렌더링 파이프라인에 묶어야(Bind) 한다. 이를 가리켜 자원을 파이프라인에 "연결한다(link)" 또는 "바인딩한다"라고 말한다. 하지만 GPU자원들이 파이프 라인에 직접 묶이는 것은 아니다. 실제로 파이프라인에 묶이는 것은 해당 자원을 참조하는 서술자(Descriptor) 객체이다. 서술자 객체는자원을 GPU에게 서술해주는 경량의 자료구조라고 할 수 있다. 이는 하나의 간접층(level of indirection)이다. 이처럼 간접층을 두는 이유는, GPU자원이라는 것이 사실상 범용적이므로, 같은 자원을 렌더링 파이프라인의 다른 단계(Stage) 에서 사용할수 ..
깊이 버퍼(depth buffer)는 이미지 자료를 담지 않는 텍스처의 한 예이다. 깊이 버퍼는 각 픽셀의 깊이 정보를 담는다. 픽셀의 깊이는 0.0에서 1.0까지의 값으로 0.0은 시야 절두체(View Frustum) 안에서 관찰자에 최대한 가까운 물체에 해당하고 1.0은 시야 절두체 안에서 최대한 먼 물체에 해당한다. 깊이 버퍼의 원소들과 후면 버퍼의 픽셀들은 일대일로 대응된다(즉, 후면 버퍼의 i,j번째 원소는 깊이 버퍼의 i,j번째 원소에 대응). 예를 들어 후면 버퍼의 해상도가 1280X1024라면 깊이 버퍼는 1280X1024개의 원소들로 구성된다. 한 물체의 픽셀들이 다른 물체보다 앞에 있는지 판정하기 위해, Direct3D는 깊이 버퍼링 또는 z-버퍼링이라는 기법을 사용한다. 여기서 중요한..
애니메이션이 껌뻑이는 현상을 피하려면 SwapChain을 이용하는 것이 최선이다. SwapChain은 애니메이션의 한 프레임 전체를 화면 바깥의(off-screen) 텍스처에 그린다. 이런 텍스처를 후면 버퍼(back buffer)라고 부른다. 주어진 한 프레임을 위해 장면 전체를 후면 버퍼에 그린다음에는, 그후면 버퍼를 하나의 완전한 프레임으로서 화면에 표시한다. 이렇게 하면 화면을 보는 사용자는 프레임이 그려지는 과정이 나타나지 않고 완성된 프레임만 보이게 된다. 이러한 기법을 이중 버퍼링이라고 부른다. 이중 버퍼링을 효율적으로 구현 하려면 하드웨어로 관리되는 두 개의 텍스처 버퍼가 필요한데, 하나는 전면 버퍼(front buffer)이고 다른 하나는 앞에서 말한 후면 버퍼이다. 화면에는 전면 버퍼에..
2차원 텍스처는 자료 원소들의 2차원 행렬이다. 2차원 텍스처의 용도 하나는 2차원 이미지 라료를 저장하는 것인데, 이때 텍스처의 각 원소는 픽셀 하나의 색상을 담는다. 그러나 이것이 텍스처의 유일한 용도는 아니다. 예를 들어 법선 매핑이라고 하는 고급 기법에서는 텍스처의 각 원소가 색상이 아니라 3차원 벡터를 담는다. 텍스처는 단순한 자료 배열인 것만은 아니다. 텍스처에 밉맵 수준(Mipmap Level)들이 존재할 수 있으며, GPU는 필터링, 다중표본화 등의 특별한 연산을 텍스처에 적용할 수 있다.더 나아가서, 텍스처에 아무 자료나 담을 수 있는 것은 아니다. 텍스처에는 특정 형식(Format)의 자료 원소들만 담을 수 있는데, 구체적인 형식은 DXGI_FORMAT이라는 열거형으로 지정한다. DXG..
COM(Component Object Model)은 DirectX의 프로그래밍 언어 독립성과 하위 호환성을 가능하게 하는 기술이다. COM 객체는 참조 횟수가 0이 되면 메모리에서 해제된다. COM 객체의 수명 관리를 돕기 위해, Windows 런타임 라이브러리(WRL)는 Microsoft::WRL::ComPtr이라는 클래스(사용 하려면 #include 가 필요)를 제공한다. 이 클래스는 COM객체를 위한 스마트 포인터이다. 범위를 벗어난 ComPtr 인스턴스는 바탕 COM 객체에 대해 자동으로 Release를 호출한다. 따라서 프로그래머가 직접 Release를 호출할 필요가 없다.
본 글은 유튜브의 Jpres님의 영상을 보고 개인적으로 공부하면서 남기는 글입니다. 플레이리스트 링크 : www.youtube.com/playlist?list=PLcacUGyBsOIBlGyQQWzp6D1Xn6ZENx9Y2 C++ DirectX 11 Engine Tutorials Buy my mixtape. www.youtube.com 영문 영상을 되지도 않는 영어실력과 구글 번역을 돌려가면 열심히 이해하며 쓰는 글이니, 틀린 부분이 많을 수 있습니다. 꼭 발견하면 꾸짖어주세요 ㅎㅎ; 질문도 해주시면 아는 범위 내에서 열심히 답변해드립니다. 이제 DirectX Engine을 만들면서 필요한 디버깅용 ErrorLogger와 문자열을 변환시켜줄 String Converter를 만든다. ErrorLogger는 ..
본 글은 유튜브의 Jpres님의 영상을 보고 개인적으로 공부하면서 남기는 글입니다. 플레이리스트 링크 : www.youtube.com/playlist?list=PLcacUGyBsOIBlGyQQWzp6D1Xn6ZENx9Y2 C++ DirectX 11 Engine Tutorials Buy my mixtape. www.youtube.com 영문 영상을 되지도 않는 영어실력과 구글 번역을 돌려가면 열심히 이해하며 쓰는 글이니, 틀린 부분이 많을 수 있습니다. 꼭 발견하면 꾸짖어주세요 ㅎㅎ; 질문도 해주시면 아는 범위 내에서 열심히 답변해드립니다. Include와 Library 설정을 모두 마쳤으면 이제 사용할 Library의 경로를 코드로 가져와야 한다. 가져오는 법은 전처리 문중 하나인 #pragma comm..