일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MYSQL
- Trie
- DP
- 이진탐색
- 스토어드 프로시저
- 그래프
- binary search
- Hash
- Dijkstra
- String
- Brute Force
- two pointer
- SQL
- Two Points
- Stored Procedure
- 다익스트라
- union find
- Today
- Total
목록computer graphics (74)
codingfarm
렌더링 과정에서 GPU는 자원들에 자료를 기록하거나(후면 버퍼나 깊이, 스텐실 버퍼 등) 자원들에서 자료를 읽어들인다.(표면의 모습을 서술하는 텍스처나 장면안의 기하구조의 3차원 위치들을 담은 버퍼 등) 그리기 명령을 제출하기 전에, 먼저 해당 그리기 호출이 참조할 자원들을 렌더링 파이프라인에 묶어야(bind)한다. 이를 가리켜 자원을 파이프라인에 "연결(Link)한다" 또는 "바인딩(Binding)한다" 라고 말하기도 한다. 그리기 호출마다 달라지는 자원도 있으며, 필요에 따라 그리기 호출마다 그런 자원들의 바인딩을 갱신해 주어야 한다. 그런데 GPU 자원들이 파이프라인에 직접 묶이는것은 아니다. 실제로 파이프라인에 묶이는것은 해당 자원을 참조하는 서술자(Descriptor) 객체이다. 서술자 객체는 ..

깊이 버퍼(Depth Buffer)는 이미지 자료를 담지 않는 텍스처의 한 예이다. 깊이 버퍼는 각 픽셀의 깊이 정보를 담는다. 픽셀의 깊이는 0.0에서 1.0 까지의 값으로, 0.0은 관찰자와 최대한 가까운 픽셀에 해당하고 1.0은 최대한 먼 픽셀에 해당한다. 깊이 버퍼의 원소들과 후면 버퍼의 픽셀들은 일대일로 대응된다. 즉, 깊이 버퍼와 후면버퍼는 같은 해상도를 지닌다. 아래 그림처럼 몇몇 물체가 다른 물체들을 가리고 있다고 해보자 한 물체의 픽셀들이 다른 물체보다 앞에 있는지 판정 하기 위해 Direct3D는 깊이 버퍼링 또는 z-버퍼링이라는 기법을 사용한다.깊이 버퍼링을 이용하면 물체들을 그리는 순서에 상관없이 물체들이 제대로 가려진다. 깊이 문제를 해결하는 방법은 장면의 물체를 먼것에서 가까운것..

모니터에 하나의 프레임 버퍼를 가지고 게임화면을 표현한다면, 매 프레임마다 버퍼를 지우고 그리거나 이미 그려진 버퍼에 덮어쓸것이다 전자의 경우에는 버퍼가 지워지는 찰나의 순간이 화면에 표시되면 화면 깜빡임(Screen Flickering)현상이 나타나며, 후자의 경우에는 화면이 그려지는 도중에 이전 화면가 현재화면이 겹처지면서 화면 찢어짐(Screen Tearing)현상이 생길것이다. 결국 이는 보는이에게 불편함을 끼치게 된다. 이러한 현상을 피하고자 사용하는 방법이 2개의 프레임 버퍼를 이용하는것이다. 각각의 프레임 버퍼는 각 화면 바깥의 텍스처인 후면 버퍼(Back Buffer)와 전면 버퍼(Front Buffer)을 뜻한다. 전면버퍼를 이용해 현재 화면을 표현하면서, 다음 화면이 될 장면을 후면 버..
2차원 텍스처는 자료 원소들의 행렬(2차원 배열)이다. 2차원 텍스처의 용도 중 하나는 2차원 이미지 자료를 저장하는 것인데, 이때 텍스처의 각 원소는 픽셀 하나의 색상을 담는다. 하지만 텍스처가 꼭 이미지 자료의 저장만을 위해 사용되는 것은 아니며 훨씬 범용적으로 사용된다. 예를 들면 법선 매핑 같은 경우 텍스처에 각 원소의 색상이 아닌 3차원 벡터를 담는다. 텍스처에는 아무 자료나 담을 수 있는 것은 아니다. 텍스처에는 특정 형식(format)의 자료 원소들만 담을 수 있는데, 구체적인 형식은 DXGI_FORMAT이라는 열거형으로 지정한다. 자료 원소 형식들을 나열하면 다음과 같다. docs.microsoft.com/en-us/windows/win32/api/dxgiformat/ne-dxgiforma..
COM(Component Object Model)은 어떤 프로그램이나 시스템을 이루는 컴포넌트들이 상호 통신할 수 있도록 하는 메커니즘이라고 할 수 있다. 그렇기 때문에 COM을 이용하면 DirectX의 프로그래밍 언어 독립성과 하위 호환성을 가능하게 할 수 있다. COM 객체는 흔히 인터페이스라 부르지만, C++클래스로 간주해도 무방하므로 흔히 COM 객체라고 부른다. C++로 DirectX 응용프로그램을 프로그래밍 할때 COM의 세부사항 대부분은 프로그래머에게 드러나지 않는다. 프로그래머가 알아야 할 것은 필요한 COM 인터페이스를 가리키는 포인터를 특별한 함수들을 이용해서, 또는 다른 COM 인터페이스의 메서드를 이용해서 얻는 방법 뿐이다. COM 인터페이스를 new나 delete를 이용하여 색성,..
Direct3D는 응용 프로그램이 3차원 그래픽 가속기능을 이용해서 3차원 세계를 렌더링할 수 있게 하는 저수준 API(Application Programing Interface)이다. 그래픽 하드웨어를 제어할 수 있는 소프트웨어 인터페이스를 제공한다. 응용프로그램과 그래픽 하드웨어 사이에 간접층로써 응용프로그램 개발자는 하드웨어의 구체적인 세부사항을 걱정할 필요가 없다. 이를 위해서는 GPU 제조사들이 Direct3D 팀과의 협업으로 Direct3D를 준수하는 드라이버를 제공해야 한다. 과거에는 GPU 장치가 Direct3D 9 능력 집합의 일부만 지원해도 되었다. 그래서 Direct3D 9의 어떤 특정 기능을 사용하고자 하는 응용 프로그램은 반드시 현재 하드웨어가 그 기능을 지원하는지를 먼저 점검해야..
비례 행렬 생성 XMMATRIX XM_CALLCONV XMMatrixScaling( float ScaleX, float ScaleY, float ScaleZ ); 벡터의 성분들로 비례 행렬 성생 XMMATRIX XM_CALLCONV XMMatrixScalingFromVector( FXMVECTOR Scale ); x,y,z 축에 대한 회전행렬 Rx,Ry,Rz 생성 XMMATRIX XM_CALLCONV XMMatrixRotationX( float Angle ); XMMATRIX XM_CALLCONV XMMatrixRotationY( float Angle ); XMMATRIX XM_CALLCONV XMMatrixRotationZ( float Angle ); 임의의 축에 대한 회전행렬 Rn ..

한 기준계의 점 또는 벡터의 상대적인 좌표를 다른 기준계에 상대적인 좌표로 변환하는 것을 좌표 변경 변환이라 한다. 위그림에서 i축과 j축에 대해 존재하던 상대 좌표 p가 있다. 축 i와 j가 변형될경우, τ(i)와 τ(j)에 대해 점 p도 변형되어 τ(p)에 위치하게 된다. 3차원 컴퓨터 그래픽에서는 여러개의 좌표계를 사용하는 경우가 많으므로, 한 좌표계에서 다른 좌표계로의 변환 방법에 익숙할 필요가 있다. 위치는 벡터가 아니라 점의 속성이며, 점에 대한 좌표계변환과 벡터에 대한 좌표계 변환은 서로 다르다. ◼ 벡터 두 좌표계 A와 B, 그리고 벡터 p가 있다. 좌표계 A에 상대적인 p의 좌표가 $p_A=(x,y)..

함수 τ에 대하여 아래와 같은 성질이 성립하면, 그리고 오직 그럴때에만 τ를 가리켜 선형변환(linear transformation)이라 부른다 τ(u+v)=τ(u)+τ(v) τ(ku)=kτ(u) 여기서 u와 v는 벡터이고, k는 스칼라이다. 비례(scaling) 물체의 크기를 바꾸는 효과를 내는 선형변환이다. 비례변환은 다음과 같이 정의된다. S(x,y,z)=(sxx,syy,szz) 이는 현재 좌표계를 기준으로, 벡터를 x축으로 sx 단위, y축으로 sy단위, z축으로 sz단위 만큼 비례한다. 선형 변환에 대한 표준행렬 S는 아래와 같다. $$S = \begin{bm..

3차원 컴퓨터 그래픽에서 행렬(matrix)의 사용 목적은 주로 아래와 같다. 1. 비례나 회전, 이동 같은 기하학적 변환을 간결하게 서술 2. 점이나 벡터의 좌표를 한 기준계에서 다른 기준계로 변환 8. DirectXMath의 행렬 3차원 그래픽에서 점과 벡터를 변환할 때에는 1×4 행벡터와 4×4 행렬을 사용한다. DirectXMath 라이브러리로 4×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..
OpenGL Super Bible 책의 모든 예제에 쓰이는 간단한 애플리케이션 프레임워크를 살펴본다. 책의 애플리케이션 프레임워크를 통해 어떻게 메인 윈도우를 만드는지 살펴보고 간단한 그래픽스 렌더링을 해본다. 간단한 GLSL 쉐이더가 어떻게 생겼는지, 쉐이더를 사용하여 단순한 점들을 어떻게 렌더링 하는지 살펴본다. 기본 프레임 워크 ∘ sb6.h는 sb6라는 네임스페이스를 정의하며, 안에는 애플리케이션 클래스인 sb6::application 에 대한 선언이 들어있다. ∘ 위 예제에서는 이 애플리케이션 클래스를 상속받은 클래스를 사용한다. sb6::application를 활용하여 애플리케이션을 작성하기 위해선 1. ab6.h 헤더파일을 인클루드 한다. 2. sb6::applicati..
아래 링크의 글을 굉장히 많이 참고했다 https://webnautes.tistory.com/1102

배울 내용 ∘ 그래픽스 파이프 라인이 무엇인가? OpenGL과 무슨 관계인가? ∘ OpenGL의 역사와 현재 상태 ∘ 이책에서 다룰 내용의 기본 개념 OpenGL은 애플리케이션이 그 하부에서 동작하는 장치의 그래픽스 서브시스템에 접근하고 제어하기 위해 사용하는 인터페이스(API)이다. 즉, OpenGL은 API이다. 서브시스템에 대한 표준화된 인터페이스(API)에서 오는 장점 -이식성을 증대하여 하이엔드 그래픽스 워크스테이션에서부터 일반 데스크톱 컴퓨터, 콘솔게임기, 모바일폰 등에 대한 이식성을 증대 시킬수 있고, 소프트웨어 개발자들의 생산성을 증대 시킬 수 있다. OpenGL과 그래픽스 파이프 라인 ∘ OpenGL의 목표 : 애플리케이션과 하부의 그래픽스 서브..

아래 명령어로 opengl을 설치한다 sudo apt-get install -y build-essential sudo apt-get install freeglut3-dev libglu1-mesa-dev mesa-common-dev 위 명령어 이후 /usr/include/GL 가 생긴것을 확인 가능하다 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 #include "GL/freeglut.h" void init(); void display(); void drawPoints(); voi..