일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스토어드 프로시저
- MYSQL
- 그래프
- Stored Procedure
- Hash
- union find
- Brute Force
- Dijkstra
- Trie
- two pointer
- SQL
- DP
- String
- 다익스트라
- 이진탐색
- binary search
- Two Points
- Today
- Total
목록computer graphics/DX12 book (31)
codingfarm
모니터의 픽셀들이 무한히 작지는 않기 때문에, 모니터 화면에 임의의 선을 완벽하게 나타내는것은 불가능하다. 선을 픽셀들의 배열로 근사할 때 생기는, 계단현상이라고도 하는 앨리어싱(aliasing)의 예가 아래그림에 나타난다. 위와같은 픽셀을 제거하기 위한 앨리어싱 제거(antialiasing) 기법들이 존재하며, 이를 통해 아래와 같은 개선된 효과를 얻을 수 있다. 여기서 소개하는 안티애얼리싱 기법은 총 2가지가 있다. 초과 표본화(supersampling) 후면 버퍼와 깊이 버퍼를 화면 해상도보다 4배(가로, 세로 2배씩) 크게 잡는다. 후면 버퍼에 렌더링하고, 이미지를 화면에 제시할 때 후면 버퍼를 원래 크기의 버퍼로 환원(resolving) 한다. 하향표준화(downsampling) 이라고도 하는 ..
자원 GPU가 data를 기록하거나 읽어들이는 대상 ex : back buffer, depth buffer, stencil buffer, 표면의 모습을 서술하는 texture, 장면안의 기하 구조의 3차원 위치들을 담는 버퍼... 렌더링 시 GPU의 주요 작업 자원들에 data를 write 자원들에서 data를 read 바인딩(Binding) 그리기 명령 제출 전, 해당 그리기 호출이 참조할 자원들을 렌더링 파이프에 묶는(bind)것 이를 가리켜 "자원을 파이프 라인에 연결(link)한다 또는 바인딩(binding)한다 라고 말하기도 한다. 그리기 호출마다 달라지는 자원도 있으며, 필요에 따라 그리기 호출마다 그런 자원들의 binding을 갱신해 주어야 한다. GPU 자원들이 직접 파이프 라인에 묶이는게..
깊이문제 해결하기 카메라는 자신에게 가까운 물체가 멀리있는 물체를 덮는 방식으로 풍경이 보이게된다. 이런 깊이문제를 해결하는 방법은 크게 2가지다. 1. 거리 순서대로 그리기 장면의 물체를 먼것에서 가까운것 순서로 그리는 것 단점 물체를 그리는 순서를 정렬해야 한다 맞물린형태를 제대로 처리하기 힘들다(ex : 두 물체가 꽈배기 형태로 꼬인 경우) 2. 깊이 버퍼링(Depth Buffering) 관찰자를 기준으로 물체들 간의 거리차로 인해 서로 가리는지 여부를 판정하는 기법 깊이 버퍼링을 쓰면 그리는 순서에 관계없이 물체들이 제대로 가려진다. 깊이 버퍼(Depth Buffer) 관찰자를 기준으로 buffer내의 각 element쪽으로 바라볼때 제일 앞에있는 물체 까지의 상대적인 거리를 저장한다. 각 픽셀의..
하나의 프레임 버퍼를 가지고 게임 화면을 표현하면 화면 깜빡임(Screen Flickering) 및 화면 찢어짐(Screen Tearing) 현상이 나타난다. 화면 깜빡임 : 버퍼를 지우고 그릴경우 발생 화면 찢어짐: 이미 그려진 화면 위에 덮어 쓸 경우 발생 더블 버퍼링(Double Buffering) 화면 깜빡임 및 찢어짐 현상을 피하고자 사용되는 방법 후면 버퍼(Back Buffer)와 전면 버퍼(Front Buffer) 2개의 프레임 버퍼의 교환을 통해 프레임 전환을 구현하는 기술 전면 버퍼 : 화면을 표현 후면 버퍼 : 다음 화면이 될 장면을 미리 저장 후면버퍼는 텍스처 이므로 그 원소를 텍셀(texel)이라 부르지만 여기서는 그냥 픽셀(pixel)이라 부름 shader input이나 rende..
2차원 텍스처 data element들의 행렬(2차원 배열) 텍셀(texel) : 텍스처의 원소 응용 이미지 자료의 저장 : 픽셀의 색상 픽셀(pixel) : 색상 정보를 저장하는 원소(정보를 담고만 있어도 픽셀이라 할때도 있다.) 법선 매핑 : 3차원 벡터 DXGI_FORMAT 이라는 열거형으로 지정된 특정 형식(format)의 자료 원소들만 담을 수 있음 정점 및 색인 자료 형식의 서술에 쓰임 data element format들을 나열하면 아래와 같음 docs.microsoft.com/en-us/windows/win32/api/dxgiformat/ne-dxgiformat-dxgi_format 위 열거형 자료가 뜻하는바는 아래와 같다. _FLOAT 실수, 32비트, 16비트 _SINT 2의 보수, 부..
COM $\bullet$ 정의 : 어떤 프로그램이나 시스템을 이루는 컴포넌트들이 상호 통신할 수 있도록 하는 메커니즘 $\bullet$ COM을 이용하면 DirectX의 프로그래밍 언어 독립성과 하위 호환성을 가능하게 할 수 있다. $\bullet$ COM 객체는 흔히 인터페이스라 부르지만, C++ 클래스로 간주해도 무방하므로 흔히 COM 객체라고 부른다. $\bullet$ C++로 DirectX 응용프로그램을 프로그래밍 할 때 COM의 세부사하은 대부분 프로그래머에게 드러나지 않는다. $\bullet$ 프로그래머가 알아야 할 것 -필요한 COM 인터페이스를 가리키는 포인터를 특별한 함수들을 이용해서, 또는 다른 COM 인터페이스의 메서드를 이용해서 얻는 방법 뿐이다. $\bullet$ COM 인터페이스..
Direct3D 초기화 작업을 진행하려면 Direct3D의 기본 형식들 몇 가지와 기본적인 그래픽 개념 몇가지를 잘 알아둘 필요가 있다. 그리고 실질저인 Direct3D 초기화 과정의 필수 단계들을 상세히 설명한다. 그 후에는 실시간 그래픽 응용 프로그램에 필요한 정확한 시간 측정 방법을 살펴본다. 마지막으로, 이후 나오는 모든 예제 응용프로그램이 따르는 일관된 인터페이스를 제공하는 예제 프레임 워크 코드를 소개할것이다. 목표 1. 3차원 그래픽 하드웨어의 프로그래밍에서 Direct3d의 역할을 개괄적으로 이해한다. 2. Direct3D에서 COM의 역할을 이해한다. 3. 2차원 이미지의 저장 방식, 페이지 전환, 깊이 버퍼링, 다중표본화 같은 기초 그래픽 개념들을 배운다. 4. 성능 카운터 함수들을 이..
비례 행렬 생성 XMMATRIX XM_CALLCONV XMMatrixScaling( float ScaleX, float ScaleY, float ScaleZ ); 벡터의 성분들로 비례 행렬 성생 XMMATRIX XM_CALLCONV XMMatrixScalingFromVector( FXMVECTOR Scale ); $x,y,z$ 축에 대한 회전행렬 $R_x,R_y,R_z$ 생성 XMMATRIX XM_CALLCONV XMMatrixRotationX( float Angle ); XMMATRIX XM_CALLCONV XMMatrixRotationY( float Angle ); XMMATRIX XM_CALLCONV XMMatrixRotationZ( float Angle ); 임의의 축에 대한 회전행렬 $R_n$ ..
한 기준계의 점 또는 벡터의 상대적인 좌표를 다른 기준계에 상대적인 좌표로 변환하는 것을 좌표 변경 변환이라 한다. 위그림에서 $i$축과 $j$축에 대해 존재하던 상대 좌표 $p$가 있다. 축 $i$와 $j$가 변형될경우, $\tau(i)$와 $\tau(j)$에 대해 점 $p$도 변형되어 $\tau(p)$에 위치하게 된다. 3차원 컴퓨터 그래픽에서는 여러개의 좌표계를 사용하는 경우가 많으므로, 한 좌표계에서 다른 좌표계로의 변환 방법에 익숙할 필요가 있다. 위치는 벡터가 아니라 점의 속성이며, 점에 대한 좌표계변환과 벡터에 대한 좌표계 변환은 서로 다르다. $\blacksquare$ 벡터 두 좌표계 $A$와 $B$, 그리고 벡터 $p$가 있다. 좌표계 $A$에 상대적인 $p$의 좌표가 $p_A=(x,y)..
함수 $\tau$에 대하여 아래와 같은 성질이 성립하면, 그리고 오직 그럴때에만 $\tau$를 가리켜 선형변환(linear transformation)이라 부른다 $$\tau (u + v) = \tau (u) + \tau (v)$$ $$\tau(ku) = k \tau(u)$$ 여기서 $u$와 $v$는 벡터이고, $k$는 스칼라이다. 비례(scaling) 물체의 크기를 바꾸는 효과를 내는 선형변환이다. 비례변환은 다음과 같이 정의된다. $$S(x,y,z) = (s_xx, s_yy, s_zz)$$ 이는 현재 좌표계를 기준으로, 벡터를 $x$축으로 $s_x$ 단위, $y$축으로 $s_y$단위, $z$축으로 $s_z$단위 만큼 비례한다. 선형 변환에 대한 표준행렬 S는 아래와 같다. $$S = \begin{bm..
3차원 컴퓨터 그래픽에서 행렬(matrix)의 사용 목적은 주로 아래와 같다. 1. 비례나 회전, 이동 같은 기하학적 변환을 간결하게 서술 2. 점이나 벡터의 좌표를 한 기준계에서 다른 기준계로 변환 8. DirectXMath의 행렬 3차원 그래픽에서 점과 벡터를 변환할 때에는 $1 \times 4$ 행벡터와 $4 \times 4$ 행렬을 사용한다. DirectXMath 라이브러리로 $4 \times 4$ 행렬을 표현할 때에는 XMMATRIX라는 형식을 사용한다. struct XMMATRIX { union { XMVECTOR r[4]; struct { float _11; float _12; float _13; float _14; float _21; float _22; float _23; float _24..