일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Two Points
- union find
- Trie
- Dijkstra
- Brute Force
- DP
- 스토어드 프로시저
- 다익스트라
- Hash
- SQL
- MYSQL
- two pointer
- 이진탐색
- 그래프
- String
- Stored Procedure
- binary search
- Today
- Total
목록분류 전체보기 (425)
codingfarm
기능수준은 Direct3D 11에서 도입되었다. 코드에서 D3D_FEATURE_LEVEL 이라는 열거형으로 대표되는 이 기능 수준은 대략적으로 버전 9에서 11까지의 여러 Direct3D 버전들에 대응된다. typedef enum D3D_FEATURE_LEVEL { D3D_FEATURE_LEVEL_1_0_CORE, D3D_FEATURE_LEVEL_9_1, D3D_FEATURE_LEVEL_9_2, D3D_FEATURE_LEVEL_9_3, D3D_FEATURE_LEVEL_10_0, D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_11_1, D3D_FEATURE_LEVEL_12_0, D3D_FEATURE_LEVEL_12_1 } ; 기능 수준..

모니터의 픽셀들이 무한히 작지는 않기 때문에, 모니터 화면에 임의의 선을 완벽하게 나타내는것은 불가능하다. 선을 픽셀들의 배열로 근사할 때 생기는, 계단현상이라고도 하는 앨리어싱(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. 성능 카운터 함수들을 이..

타이머 메시지인 WM_TIMER는 사용자의 동작과 관계없이 발생하는 메시지이다. 이 메시지는 한번 지정해 놓으면 일정한 시간 간격을 두고 연속적으로 계속 발생한다. 주기적으로 같은 동작을 반복해야 하거나 여러번 나누어 해야할 일이 있을 때 이 메시지를 사용한다 시계 아래는 타이머 메시지를 이용한 간단한 시계이다. 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 #include LRESULT CALL..

docs.microsoft.com/en-us/windows/win32/inputdev/mouse-input Mouse 마우스란 일반적으로 쓰는 쥐처럼 생긴 마우스와 노트북의 터치패드, 트랙볼과 그림용 타블릿 등을 모두 포함하는 명칭이다. 마우스 입력에 관한 메시지는 아래와 같은 종류가 있다. 버튼 누름 놓음 더블클릭 좌측 WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCLK 우측 WM_RBUTTONDOWN WM_RBUTTONUP WM_RBUTTONDBLCLK 중앙 WM_MBUTTONDOWN WM_MBUTTONUP WM_MBUTTONDBLCLK 마우스 메시지는 lParam의 상위 워드에 마우스 버튼이 눌러진 y좌표, 하위워드에 x좌표를 가지며 좌표값을 검출해 내기 위해 HIWOR..

super는 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조 변수이다. 멤버변수와 지역변수의 이름이 같을때 this로 구별하듯이, 상속받은 멤버와 자신의 클래스에 정의된 멤버의 이름이 같을 때는 super를 사용해서 구별할 수 있다. 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 package project_1; class Parent{ int x = 10; void Method() { System.out.println(x); } } class Child extends Parent{ int x = 20; void Method() { System.out.println(x); Syst..

오버라이딩이란 조상클래스로부터 상속받은 메서드의 내용을 변경하는것이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Point{ int x; int y; String getLocation() { return "x : " + x + ", y :" + y; } } class Point3D extends Point{ int z; String GetLocation(){ return "x : " + x + ", y :" + y + ", z : " + z; } } Colored by Color Scripter cs 가령 아래 코드를 확인해보면 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 pa..

상속(inheritance) 상속 : 기존의클래스를 재사용하여 새로운 클래스를 작성하는것 class Parent { int age; } class Child extends Parent { void play(){ System.out.println("hello"); } } Child 클래스는 자동적으로 age라는 멤버변수가 추가된 것과 같은 효과를 얻는다. Play 함수는 Child 클래스 내에서만 독자적으로 사용할 수 있다. Parent와 Child 클래스를 상속관계도와 다이어그램으로 표현하면 아래와 같다. 생성자와 초기화 블럭은 상속되지 않는다. 멤버(필드, 메서드)만 상속된다. 접근제어자가 private또는 default인 멤버들은 상속되지 않는다기보다는 상속은 받지만 자손 클래스로부터의 접근이 제한된..
배열내에 임의의 숫자들이 정렬되어 저장되있다. 또한 임의의 수가 2개 주어진다 할때 배열내에서 2개의 수 사이에 있는 성분들의 갯수는 몇개일까? 이것 문제를 해결하기 위한 이상적인 방법은 이진탐색을 이용하는 것이다. 2개의 임의의 수 중에 작은수를 기준으로 lower_bound, 큰수를 기준으로 upper_bound를 해서 나온 2개 요소의 위치를 빼주면 구간길이를 구할 수 있다. 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 // Example program #include #include #include #include using namespace std; int main() { vector vi; for(int i=0; i

WM_CHAR 메시지 도스(콘솔) 환경에서는 getch, gets, scanf 처럼 명시적으로 입력을 받는 함수들이 따로 있다. 위 입력 함수들은 사용자로부터 입력이 완료될 때까지 프로그램의 실행은 잠시 중단된다. 이는 싱글 태스킹 환경에서는 아무 문제 없지만, 멀티태스킹의 윈도우즈 환경에서는 이런 명시적인 입력 함수가 존재하지 않으며 반드시 메시지를 받아야 한다. 윈도우즈는 포커스(focus)를 가진 프로그램에게 키보드 메시지(WM_CHAR, WM_KEYDOWN)를 보내며 프로그램은 이런 메시지를 받아 키보드 입력을 처리한다. 가령 아무 대화상자나 열어 Tab키를 눌러가면서 포커스를 이동해보면 강조표시가 이동하는것을 볼 수 있다. 한번에 하나의 프로그램만 키보드 입력을 받을 수 있는 이유는 간단하다. ..
비프음을 내는 출력을 낼 수 도 있다. BOOL MessageBeep(UINT uType); docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebeep 간단하게 매개변수에 0xFFFFFFFF를 넣으면 경고음이 스피커를 통해 출력된다. 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 #include LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HINSTANCE g_hIns..
애니메이션을 정확히 수행하려면 시간을 측정해야한다. 특히, 애니메이션의 프레임들 사이에 흐른 시간과 양을(경과시간; elpased time)을 측정할 수 있어야 한다. 1. 성능 타이머(Performance Timer) 시간 측정을 위해 Windows가 제공하는 성능 타이머(performance timer)를 사용한다. 이를 성능 카운터(poerformance counter)라고도 한다. 성능 타이머를 조회하는 Win32 함수를 사용하려면 windows.h 헤더파일을 추가해야 한다. 성능 타이머는 시간을 개수(count) 단위로 측정한다. 성능 타이머로부터 개수 단위의 현재 시간을 얻을 때에는 다음과 같이 QueryPerformanceCounter 함수를 사용한다. __int64 currTime; Que..

보통은 3차원 장면을 후면 버퍼 전체에 그린다. 그러나 원한다면 후면버퍼의 일부를 차지하는 직사각형 영역에만 그리는것도 가능하다. 장면을 그려 넣고자 하는 후면 버퍼의 부분지가각형 영역을 뷰포트(viewport)라고 부른다. 다음은 이 뷰포트를 서술하는 데 쓰이는 구조체이다. typedef struct D3D11_VIEWPORT { FLOAT TopLeftX; FLOAT TopLeftY; FLOAT Width; FLOAT Height; FLOAT MinDepth; FLOAT MaxDepth; } D3D11_VIEWPORT; 뷰포트를 수정함으로써 3차원 장면을 후면 버퍼의 한 부분직사각형에 그린 모습이다. 그리고 후면 버퍼를 응용 프로그램창의 클라이언트 영역에 제시한다. 처음 4개의 필드는 뷰포트를 표시할..
후면버퍼와 깊이$\cdot$스텐실 버퍼에 대한 뷰들을 생성했으니, 이제 이 뷰들을 파이프라인의 출력 병합기 단계에 묶어 보자. 이 과정을 거쳐야 비로소 자원들이 파이프라인의 렌더 대상과 깊이$\cdot$스텐실 버퍼로 작용하게 된다. 필요한 코드는 아래와 같다. md3dImmediateContext->OMSetRenderTargets( 1, &mRenderTargetView, mDepthStencilView); 함수에 쓰인 각 매개변수의 기능에 대해서 알아본다. 첫번째 매개변수는 묶고자 하는 렌더대상의 갯수로 여기에서는 하나만 정하지만 장면을 여러개의 렌더 대상에 동시에 렌더링 하는 경우(고급기법이다)에는 여러개의 렌더대상 뷰를 지정할 수 있다. 둘째 매개변수는 파이프라인에 묶을 렌더 대상 뷰들을 가리키는..
이제 깊이, 스텐실 버퍼를 생성해야 한다. 이전에 설명했듯이, 깊이 버퍼는 그냥 깊이정보를 담는 (그리고 스텐실을 사용하는 경우 스텐실 정보도 담는) 2차원 텍스처이다. 2차원 텍스처를 생성할 때에는 생성할 텍스처를 서술하는 D3D11_TEXTURE2D_DESC 구조체를 채우고 ID3D11Device::CreateTexture2D 메서드를 호출해야 한다. D3D11_TEXTURE2D_DESC 구조체의 정의는 아래와 같다. typedef struct D3D11_TEXTURE2D_DESC { UINT Width; UINT Height; UINT MipLevels; UINT ArraySize; DXGI_FORMAT Format; DXGI_SAMPLE_DESC SampleDesc; D3D11_USAGE Usag..