본문 바로가기

IT86

Aliasing과 Anti-Aliasing Aliasing과 Anti-Aliasing Aliasing 아날로그의 원본을 컴퓨터가 저장하면서 원본이 손상되는 현상이다. Sampling rate가 낮아서 생기는 모든 문제라고도 말할 수 있다. 한국말로 계단현상이라고도 한다. 이런 선이 있다면, 이 선을 한칸한칸(한 pixel)에 찍어주면서 계단처럼 보이게 된다. 이런 식으로 부자연스럽게 보이게 된다. Polygon Aliasing Scan line에 걸치지 않을 정도로 작은 polygon이 있다면, 컴퓨터가 읽지 못해 색을 칠해주지 못한다. 그래서 우리 눈에 사라진 것처럼 보인다. Anti-Aliasing Aliasing을 줄이는 방법이 Anti-Aliasing이다. sampling rate가 낮아서 생기는 문제이니 높여주면 된다. 단순히 sampl.. 2021. 2. 3.
Rasterization Rasterization Rasterization Primitive Assembly 과정에서 Primitive을 그리는데, 이 때 어떤 pixel이 Primitive에 속하는지 계산하는 것. (OpenGL 에서는 이 과정을 알아서 해준다) 그래서 pixel에 들어가는 Fragment의 list를 뽑아낼 수 있다. Line Algorithm 그렇다면 Line에 속해있는 pixel들은 어떻게 계산되어질까? Line을 Rasterization하는 알고리즘이 존재한다. 1. DDA Algorithm x가 1만큼 변할 때마다 y는 m만큼 변화시켜준다. 그러면 x는 정수단위이고, y는 부동소수점단위이기 때문에 반올림 시켜준다. 이를 수도코드로 표현하면 다음과 같다. for(ix = x1; ix 아래 pixel 로... 2021. 1. 31.
Perspective Projection Perspective Projection Perspective Projection 원근법으로 멀리 있는 건 작게, 가까이 있는 건 크게 그리는 방법이다. Projection Matrix 만약 z의 위치에 어떤 물체가 있고, 이를 View plane에 크기에 맞춰 그리려면 닮은 비를 이용하자. 이를 x', y', z' 으로 풀어보면 이를 행렬로 표현하면 다음과 같다. 한 예시인데, 이같은 행렬 형태로 쓰인다는 것만 알고 있자. Frustum View Volume -> Normalized View Volume Normalized Coordinates를 사용하기 위해 우선 Znear Plane과 Zfar Plane을 두고, Znear 와 Zfar를 -1 과 1 로 만들어줘야 한다. Z 를 -1~1 로 만들어주.. 2021. 1. 18.
Camera Coordinates Camera Coordinates 좌표계는 어떤 게 있을까? 1. Modeling Coordinates Modeling 하는 좌표계 실세계와 다른 독립된 좌표계이다. 2. World Coordinates 실세계의 좌표계 Modeling 된 물체들이 World Coordinates에 배치된다. 3. Camera Coordinates 카메라로 보는 좌표계 유저가 바라보게 되는 좌표계이다. 이 때 Camera Coordinates 는 어떻게 구성될까? Camera Coordinates Camera 는 그 자리에 있고, 그 위치에 대한 상대적인 위치를 정의하면 된다. 그림으로 살펴보자. World Coordinates가 있고, Camera Coordinates가 있다고 하자. 이 때 World Coordinat.. 2021. 1. 17.
GPU와 Buffer GPU와 Buffer Buffer Video Memory에 data를 저장하기 위한 공간 (하드웨어 저장공간) Vertex Buffer Objects (VBO) Vertex 특성인 Attributes를 담을 수 있는 buffer. Vertex의 position 이나 Texture Coordinates 등이 있다. OpenGL 입장에서는 position 하나가 buffer 하나라고 생각하면 된다. Vertex Array (VA) Vertex의 Attributes 가 여러개, 즉 buffer가 여러개 존재한다. 각각의 buffer가 무엇인지 알기 위해서 번호를 다는 것. 즉 Array에 담은 것이다. Vertex Buffer Objects GPU로 보낼 Vertex 의 position 배열이 있다고 하자. .. 2021. 1. 17.
GPU에 data를 전달하기 GPU에 data를 전달하기 옛날 방식 CPU에서 RAM에 있는 data를 읽고 매 프레임마다 GPU로 전달하는 방식이었다. 그런데 이는 전달하지 않아도 될 때에도 data를 전달하게 되는 큰 낭비가 발생하게 된다. 현재 방식 GPU한테 data를 다 보내놓고 필요할 때마다 그리라고 신호를 주는 방식이다. GPU는 data를 Video Memory에 저장한 상태에서, CPU에서 그리라는 신호가 오면 Video Memory에서 data를 가져와서 연산하는 방식이다. 그리고 GPU의 bus는 PCIE 라는 것을 사용한다. 이는 그래픽 카드에서 주로 사용하는데 그만큼 전송할 데이터 양이 많아서 그렇다. 또 Video Memory는 DDR5 를 사용한다. (현재 노트북 RAM 사양을 보면 아마 DDR4가 제일 .. 2021. 1. 17.
[ 컴퓨터구조 ] Cache Cache 순서 1. Cache 설명, 용어 2. Cache 구성 3. Indexing 4. Block offset 5. Tag 6. Tag matching + Write-back, Write-through Cache 란? Memory에 접근하는 것은 느리다. Processor가 연산하는 것이 훨씬 빠르다. 그래서 Memory에서 data를 읽고 쓰기 위해 access하는 성능이 느려서, 그동안 Processor는 놀고 있게 된다. Processor는 비싼 장비이니 최대한 써먹어야 한다. 따라서 자주 사용하는 데이터는 Memory까지 가지 말고 Processor 안에 미리 가져옴(Prefetching)와서 사용함으로써 Processor가 계속 바쁘게 돌아갈 수 있게 만드는 기술이다. 즉, Memory에 .. 2020. 12. 9.
[ 3D Rotation ] 임의의 축으로 회전하기 임의의 축으로 회전하기 3D 환경에서 x축, y축, z축으로 회전하는 건 4X4 matrix로 할 수 있다. 그러면 임의의 축으로 회전하는 건 어떻게 할까? 순서 1. 임의의 축이 좌표축과 평행할 때 (Special Case) 회전 2. 좌표축과 평행하지 않은 임의의 축 회전 - 5 Step이 있음 - α와 β를 구하는 법 - 다른 형태의 matrix 임의의 축이 좌표축과 평행할 때 (Special Case) 임의의 축이 x과 평행하다고 해보자. 이럴 때 회전은 어떻게 될까? 다음과 같이 진행된다. 1. 임의의 축을 x축으로 이동 2. x축 기준으로 회전 3. 임의의 축을 원래 자리로 이동 1. 임의의 축을 x축으로 이동 2. x축 기준으로 회전 3. 임의의 축을 원래 자리로 이동 회전하는 점의 식은 이.. 2020. 12. 4.
3D Geometric Transformation 3D Geometric Transformation Homogenous Coordinates in 3D 2D에서 변환 matrix가 3X3 matrix로 표현됐다면, 3D에서 변환 matrix는 4X4 matrix로 표현된다. 3D Translation 3D에서의 Translation matrix는 위와 같이 4X4 matrix로 표현할 수 있다. Inverse matrix는 이와 같이 표현된다. 3D Rotation 2D에서는 각도 하나로 Rotation이 가능했다. 회전하는 방향이 하나이다. 그런데 3D에서는?? 세 방향으로 회전이 가능하다. (Yaw, Roll, Pitch) 그래서 rotation의 축이 결정되어야 한다. x축 기준, y축 기준, z축 기준, 임의의 축 기준으로 회전할 수 있다. 우선.. 2020. 12. 4.
Homogeneous Coordinate Homogeneous Coordinate 이전 글 2D Geometric Transformation에 이어서. Homogeneous Coordinates (x,y) 라는 2D 좌표를 확장하여 (x,y,1) 으로 표현하는 것이다. 즉, 2D 좌표계를 3X3 matrix로 확장한 것이다. (만약 3D 좌표계라면, 4 X 4 matrix가 된다.) Homogeneous Coordinates의 특징 - (x, y, h) 일 때, h=1 일 때 augmented vector라고 부름. - 원점 : (0, 0, 1) - (x, y, 0) : 0을 곱해도 x, y가 남아있을 정도면 엄청 크므로, 숫자가 무한대였을 것이라 생각. - (0, 0, 0) : Homogeneous Coordinates에서는 존재하지 않음. .. 2020. 12. 4.
2D Geometric Transformation 2D Geometric Transformation 순서 1. 2D Translation matrix 2. 2D Rotation matrix 3. 2D Scaling matirx 4. 실제 사용하는 matrix일까? Transformation 만들어진 기하학적 물체의 위치를 바꾸거나, 방향을 바꾸거나, 종횡비를 바꾸거나, 크기를 바꾸거나 이런 변환 작업을 Geometric Transformation이라고 한다. 결국엔, 물체를 어디선가 만들었는데, 디스플레이 화면 상에 어디에 보여야할지의 문제라고 생각하면 된다. 우리 화면 상에 실제로 어디에 배치되어야 하냐는 것이다. Transformation의 하나의 예시 Maya, 3D Max, Blender 등에서 어떤 물체를 만들었는데, 이것을 Unity, Unr.. 2020. 12. 4.
정렬 - 가장 큰 수 정렬 - 가장 큰 수 문제 출저 - 프로그래머스 programmers.co.kr/learn/courses/30/lessons/42746 Answer code 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 #include #include #include using namespace std; bool cmp(int a, int b){ string str1 = to_string(a) + to_string(b); string str2 = to_string(b) + to_string(a); return str1 > str2; } string solution(vector numbers) { string answer = ""; sort(numbe.. 2020. 11. 15.
정렬 - K번째 수 정렬 - K번째 수 문제 출저 - 프로그래머스 programmers.co.kr/learn/courses/30/lessons/42748 풀이 생각 1. 특정 범위를 잘라서 정렬하자 2. 정렬한 배열의 k번째 수 push My code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include #include #include using namespace std; vector slice(const vector& array, int a, int b){ return vector(array.begin()+a, array.begin()+b); } vector solution(vector array, vector commands) { vector answer;.. 2020. 11. 15.
우선순위 큐, 그리디 - 허프만 압축 허프만 압축 허프만 압축이란? 어떤 데이터를 전송할 때, 한 글자를 1byte(8bits)로 전송하게 되면 글자수 * 8 의 bits가 쓰인다. 허프만 압축은 빈도수가 높은 글자를 짧은 bits로, 빈도수가 적은 긴 bits로 인코딩하는 압축방법이다. 문제 encoder : ASCII 코드로 표현되어 있는 txt 파일을 입력받아 encoding하여 압축 파일 생성하기 decoder : encoder를 통해 encoding된 압축 파일을 입력받아 원본 ASCII 코드로 표현되어 있는 txt 생성하기 단, 문장이 길 때 ASCII 코드로 표현되어 있는 파일보다 크기가 작아져야 함 풀이생각 1. 각 ASCII Character의 빈도수를 세야 한다. => hash 를 사용하여 쌍을 만들자. => unorder.. 2020. 11. 12.
[ 3D Modeling ] Procedural Polygon Mesh Procedural Polygon Mesh Procedural Polygon Mesh Procedural 하게 방법을 이용해서 Polygon Mesh를 생산해 내는 방법이다. 제일 많이 쓰는 방법이 Fractal이다. 기준이 되는 Geometry가 하나 있고, 이 Geometry를 만나면 이렇게 그려라 하는 규칙이 있다. 그러면 계속 확장해 가게 된다. 어떤 선에 규칙을 적용시켜보자. 이 하나의 규칙을 계속 적용해 나가면 위처럼 계속 나아갈 것이다. 위 규칙을 삼각형의 선들에 적용시켜 보자. 이런 식으로 계속 나아가게 된다. 이를 이용하면 굉장히 복잡한 지형을 모델링 없이 만들 수 있게 된다. ex) 풀이나 산 등을 만들 때 사용된다. [참고] Interactive Computer Graphics: A .. 2020. 10. 24.