분류 전체보기(30)
-
[시스템 프로그래밍] 소개
Carnegie Mellon University의 Introduction to Computer Systems 강의를 듣고 공부한 내용을 정리하겠다.해당 강의의 교재가 CS:APP (Computer Systems : A Programmer's Perspective) 라는 유명한 책이다. 해당 원서도 구매하여 공부하는 중이다.또한 해당 강의에서 진행하는 실습도 Bomb lab, Malloc lab 등 꽤 유명한 것 같다. 저수준 프로그래밍 실습과 메모리 컨트롤을 직접 프로그래밍 해보며 공부할 수 있다. 실습 환경은 VMWare에 Ubuntu 22.04를 설치하여 진행했다. Source 강의https://www.youtube.com/playlist?list=PLcQU3vbfgCc9sVAiHf5761UUApj..
2026.01.18 -
[알고리즘] 계수 정렬 (Counting Sort), O(N)
정렬 알고리즘은 일반적으로 비교 정렬을 하는데, 각 원소의 값을 비교하지 않고 정렬하여 시간복잡도를 O(N)으로 줄이는 특수한 정렬 알고리즘이 존재한다. 그 중 하나가 계수 정렬 (Counting Sort)이다. 추가로 정렬을 하기 위해서 각 원소의 값을 최소 1번씩은 확인해야 하므로 정렬 알고리즘이 O(N)보다 시간 복잡도는 낮아질 수 없다는 것은 자명하다. Counting Sort는 정렬하고자 하는 값의 범위가 O(N)을 넘지 않는 경우 사용할 수 있다. 예를 들어 k 이하의 자연수가 될 수 있고, 실수라고 한다면 수의 범위가 무한해지기 때문에 사용할 수 없다. Counting Sort의 동작 원리는 말 그대로 값을 세서 개수를 기록해둔 뒤 나중에 순서대로 데이터를 배치하는 것이다. 도식을 통해 이..
2024.09.07 -
[DirectX11] Graphics Pipeline 4 - Pixel Shader
Pixel Shader Pixel Shader는 Rasterizer에서 계산한 픽셀들에 대해 어떤 색으로 출력할 지 결정하는 단계이다. 우리는 Vertex에 Color 정보를 넣어뒀고, Rasterizer 단계에서 그 값들이 선형 보간되어서 픽셀마다 값이 계산되어 있으므로 그대로 색을 사용해도 되고, 텍스쳐를 사용하는 경우 Sampler을 사용해서 이미지의 픽셀값을 적절히 가져와서 할당할 수도 있다. 이에 대한 내용은 다른 포스트에서 작성해보겠다. Pixel Shader도 Vertex Shader 같이 .fx 셰이더 코드로 작성하고, D3DCompileFromFile을 통해 Blob 구조체에 binary 코드를 저장하고, CreatePixelShader()로 셰이더를 생성하게 된다. 코드로 그 과정을 ..
2024.08.27 -
[DirectX11] Graphics Pipeline 3 - Rasterizer
Vertex Shader 다음으로 Rasterizer에 대해 알아보겠다. Vertex Shader와 Rasterizer 사이에 Tessellation stage라고 Hull Shader, Tessellator, Geometry Shader의 과정도 있다. 이 단계들은 정점 정보를 이용해 더 정점들을 추가적으로 계산해서 더 디테일한 표면을 구현하기 위해 거치는 단계이다. 하지만 렌더링에서 필수적인 단계는 아니고, 구체적인 내용은 아직 공부하지 못해서 Rasterizer를 먼저 정리하기로 했다. Rasterizer Rasterizer는 vertex 정보들로 구성한 벡터 기반의 topology를 pixel로 변환하는 과정이다. 즉, 말 그대로 vector을 raster로 만들기 때문에 Rasterizer인 것..
2024.08.26 -
[DirectX] Graphics Pipeline 2 - Vertex Shader & HLSL
Vertex Shader Vertex Shader는 3D 공간에 있는 vertex를 화면에 출력하기 위해 2D 좌표로 변환하는 과정이라고 생각하면 된다. 구체적인 좌표 변환 방법은 다른 포스트에서 정리해보도록 하고, 이번 포스트에서는 셰이더 문법을 통해 셰이더를 작성하고 Vertex Shader을 컴파일하는 과정을 정리해보겠다. HLSL HLSL은 DirectX에서 사용하는 셰이더 문법이다. 문법은 C와 비슷하고, Semantic을 통해 Graphics Pipeline에서 사용할 데이터를 인식하는 것이 특징이다. 셰이더 파일 작성 셰이더를 .fx 파일로 만들어 보자. Visual Studio에서 .fx 파일을 셰이더로서 사용하기 위해서 속성에서 설정을 해야 한다. 셰이더 형식을 효과(/fx), 셰이더 ..
2024.08.25 -
[DirectX11] Graphics Pipeline 1 - Input Assembler
Graphics PipelineGraphics Pipeline이란 그래픽스 API (DirectX)에서 물체가 화면에 렌더링 되는 일련의 과정을 의미한다. 아래 이미지는 DirectX11의 Graphics Pipeline의 전 과정을 나타낸다. 이 과정을 이해하기 전에 우선 그래픽스 API를 통한 렌더링은 최종적으로는 픽셀로 나타나지만, 처음 주어지는 input 데이터는 vector 기반의 점 선 면의 기하라는 것을 알고 있어야 한다. 이때 점을 vertex(정점)라고 하고, 우리는 어떤 도형을 구성하는 정점들을 Graphics Pipeline에 넣어서 최종적으로 그 도형이 화면의 픽셀 값을 통해 어떻게 출력될 것인지를 계산하는 것이다. Input Assembler Stage 정점 정보를 받아오는 단계..
2024.08.24