<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Game Programming on Cigarettes &amp; Coffee</title><link>https://cignc.dev/categories/game-programming/</link><description>Recent content in Game Programming on Cigarettes &amp; Coffee</description><generator>Hugo</generator><language>ko-kr</language><lastBuildDate>Sun, 17 May 2026 01:39:28 +0900</lastBuildDate><atom:link href="https://cignc.dev/categories/game-programming/index.xml" rel="self" type="application/rss+xml"/><item><title>🖼️ Graphics 기초</title><link>https://cignc.dev/posts/game-programming/graphics-basics/</link><pubDate>Sun, 17 May 2026 01:39:28 +0900</pubDate><guid>https://cignc.dev/posts/game-programming/graphics-basics/</guid><description>&lt;h2 id="1-frame-buffer-color-buffer-depth-buffer"&gt;1. Frame Buffer, Color Buffer, Depth Buffer&lt;/h2&gt;
&lt;p&gt;화면에 보이는 이미지는 결국 픽셀들의 배열이다. OpenGL에서는 렌더링 결과가 frame buffer에 기록되는데, 기본적으로 SDL window에 연결된 기본 frame buffer가 있다.&lt;/p&gt;
&lt;p&gt;기본 frame buffer에는 보통 다음 buffer들이 있다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Color Buffer&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Depth Buffer&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Stencil Buffer&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Color Buffer는 최종 색상이 저장되는 곳이고, Depth Buffer는 각 픽셀에 가장 가까운 물체의 깊이값이 저장되는 곳이다. Stencil Buffer는 마스크 처리 등에 사용된다.&lt;/p&gt;
&lt;p&gt;Sphere와 같은 3D 메시들은 앞쪽 삼각형과 뒤쪽 삼각형이 겹쳐 보일 수 있기 때문에 Depth Test 기능은 켜놓아야 한다.&lt;/p&gt;</description></item><item><title>🔧 SDL과 OpenGL</title><link>https://cignc.dev/posts/game-programming/sdl-and-opengl/</link><pubDate>Tue, 12 May 2026 03:27:06 +0900</pubDate><guid>https://cignc.dev/posts/game-programming/sdl-and-opengl/</guid><description>&lt;h2 id="1-sdl3"&gt;1. SDL3&lt;/h2&gt;
&lt;p&gt;SDL은 Simple Direct Media Layer의 약자로, 게임이나 멀티미디어 프로그램을 만들 때 필요한 운영체제 의존 기능을 추상화해주는 라이브러리다. SDL이 도와주는 대표적인 일은 다음과 같다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;창 생성&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;이벤트 처리&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;키보드 / 마우스 / 게임패드 입력&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;오디오&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;타이머&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;OpenGL, Vulkan, Metal 같은 그래픽스 API와 연결할 수 있는 window 준비&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SDL 자체에도 간단한 렌더링 기능이 포함되어 있기는 하지만, SDL의 주된 역할은 다음과 같다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;OpenGL을 사용할 수 있는 창 생성&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;OpenGL Context 생성&lt;/p&gt;</description></item><item><title>🔦 Ray Casting</title><link>https://cignc.dev/posts/game-programming/ray-casting/</link><pubDate>Fri, 20 Mar 2026 17:14:45 +0900</pubDate><guid>https://cignc.dev/posts/game-programming/ray-casting/</guid><description>&lt;h2 id="1-광선"&gt;1. 광선&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;광선 위의 한 점에 대한 표현&lt;/p&gt;
$$
 r(t) = o + t d \text{(o는 원점, d는 방향벡터)}
 $$&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;방향벡터가 항상 단위 벡터임이 보장되지는 않지만, 관련 연산 대부분에서 방향벡터를 정규화하여 사용함&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2-표면"&gt;2. 표면&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ray - Object 교차의 기본이 되는 표면은 크게 음함수 표면과 명시적 표면으로 구분됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="명시적-표면"&gt;명시적 표면&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;한 변수를 다른 변수들의 함수로 직접 표현하는 방식&lt;/p&gt;
$$
 z = f(x, y)
 $$&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;예시: 포물선의 표면&lt;/p&gt;
$$
 z = x^2 + y^2
 $$&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;명시적 표면과 Ray 간 교차를 검사할 때, 함수에 $x$, $y$ 값을 대입해보고 그 값을 z값과 비교하여 표면에 있는 점인지, 표면을 지난 점인지, 표면에 닿지 못한 점인지 결정&lt;/p&gt;</description></item><item><title>💥 기초 게임 물리</title><link>https://cignc.dev/posts/game-programming/basic-game-physics/</link><pubDate>Mon, 09 Feb 2026 19:08:03 +0900</pubDate><guid>https://cignc.dev/posts/game-programming/basic-game-physics/</guid><description>&lt;h2 id="1-운동의-기본"&gt;1. 운동의 기본&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;위치와 속도, 가속도&lt;/p&gt;
$$
 v = \frac{dx}{dt}, a = \frac{dv}{dt}
 $$&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;등가속도 운동 공식&lt;/p&gt;
$$
 v = v_0 + at
 $$$$
 x = x_0 + v_0 t + \frac{1}{2} a t^2
 $$&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2-뉴턴의-운동-법칙"&gt;2. 뉴턴의 운동 법칙&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;제1법칙(관성의 법칙): 외부에서 가해지는 알짜힘(합력)이 0일 때, 정지한 물체는 계속 정지해 있고, 운동하던 물체는 등속 직선 운동을 유지함&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;제2법칙(가속도의 법칙): 물체에 알짜힘이 작용하면 힘의 방향으로 가속도가 발생하며, 가속도는 힘의 크기에 비례하고 질량에 반비례함&lt;/p&gt;</description></item><item><title>➕ 기초 게임 수학</title><link>https://cignc.dev/posts/game-programming/basic-game-mathematics/</link><pubDate>Tue, 03 Feb 2026 22:18:21 +0900</pubDate><guid>https://cignc.dev/posts/game-programming/basic-game-mathematics/</guid><description>&lt;h2 id="1-수"&gt;1. 수&lt;/h2&gt;
&lt;h3 id="수와-집합"&gt;수와 집합&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;수학에서 가장 기본적인 연산인 사칙연산($+$, $-$, $\times$, $\div$)에서, 특정한 공리적 수 집합(정수, 유리수, 실수 등)이 덧셈과 곱셈에 대해 다음 11개 공리를 만족하면 해당 수 집합을 체(field)라고 부름&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;덧셈에 대해 닫혀있음&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;덧셈에 대해 결합법칙 성립&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;덧셈에 대해 항등원 존재&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;덧셈에 대해 역원 존재&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;덧셈에 대해 교환법칙 성립&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;곱셈에 대해 닫혀있음&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;곱셈에 대해 결합법칙 성립&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;덧셈과 곱셈에 대해 분배법칙 성립&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;곱셈에 대해 항등원 존재&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;곱셈에 대해 역원 존재&lt;/p&gt;</description></item><item><title>🚂 Dear ImGui</title><link>https://cignc.dev/posts/game-programming/dear-imgui/</link><pubDate>Fri, 30 Jan 2026 18:21:39 +0900</pubDate><guid>https://cignc.dev/posts/game-programming/dear-imgui/</guid><description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://github.com/ocornut/imgui" target="_blank" rel="noopener noreferrer"&gt;Dear ImGui&lt;/a&gt;(Immediate Mode Graphical User Interface, ImGui)는 애플리케이션에 디버그 인터페이스, 개발 도구, 실험적인 UI 등을 빠르게 추가하기 위해 사용하는 오픈 소스 C++ 라이브러리&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;게임 개발이나 그래픽스 프로그래밍같은 실시간 애플리케이션 개발에 많이 사용됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="1-주요-특징"&gt;1. 주요 특징&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Immediate Mode 기반&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Immediate Mode란 UI 요소들이 매 프레임마다 다시 생성되고 렌더링된다는 의미&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;기존의 UI 라이브러리들이 Retained Mode(UI 상태를 내부적으로 유지) 기반이라면, ImGui는 프레임 단위로 UI 상태를 관리하지 않고, 코드에서 직접 그림&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;간단한 API&lt;/p&gt;</description></item></channel></rss>