예쁜 꿈을 꾸라고
  • 홈
  • 태그
  • 방명록
  • 메뉴 닫기
  • 글작성
  • 방명록
  • 환경설정
    • 분류 전체보기
      • Unreal Engine
        • Unreal 기초
        • Unreal Bug & Error
        • Dedicated Server
        • GAS
        • Behavior Tree
        • UI
        • 미니게임
      • 게임 프로그래밍
        • 게임 프로그래밍 기초
        • 게임 수학
        • 게임 프레임워크
        • 게임 서버
      • WindowsAPI
        • DirectX
      • 자료구조와 알고리즘
      • Git
      • 포트폴리오
      • 취업준비
      • 기타
  • 홈
  • 태그
  • 방명록
WindowsAPI

게임 엔진 루프와 PeekMessage

윈도우 데스크톱 마법사로 생성을 하면 WinMain 함수가 있다.윈도우의 진입점이다.여기서 윈도우의 핵심 함수는 WinMain과 WinProc 함수인데 윈도우는 메시지 기반 시스템으로 사용자의 입력 등으로 이벤트가 발생하면 메시지 큐에서 메시지를 꺼내 WinProc가 해당 요청을 처리하는 방식으로 동작한다. 여기서 메시지 기반 시스템의 문제가 있는데, 바로 이벤트가 발생할 때만 동작한다는 점이다.그러나 게임은 사용자가 입력하면 렌더링이 되고 사용자가 가만히 있으면 게임이 멈추는 방식이 아니다.즉 이벤트가 있건 없건 계속 프로그램이 일을 해줘야 한다. 그렇게 하기 위해서 GetMessage 함수를 사용하지 않고 PeekMessage 함수를 사용한다.PeekMessage는 GetMessage와 매 프레임마..

2025. 8. 29. 00:26
WindowsAPI

DC

윈도우즈는 세가지 동적 라이브러리로 구성되어 있다.1. 커널2. 유저3. GDI # 커널 : 메모리를 관리하고 실행하는 역할# 유저 : 유저 인터페이스와 윈도우를 관리하는 역할, 프로그램 실행# GDI(Graphic Device Interface) : 화면 처리와 그래픽을 담당 # DC(Device Context) : 출력에 필요한 모든 정보를 지닌 데이터 # GDI Object : 그래픽 출력에 사용되는 도구1. HPEN : 선2. HBRUSH : 면3. HFONT : 글꼴4. HBITMAP : 비트맵 이미지5. HPALETTE : 팔레트6. HRGN : 영역 # Stock Object : 윈도우즈가 기본적으로 제공해주는 GDI 오브젝트1. BLACK_BRUSH2. GRAY_BRUSH3. NULL_B..

2025. 8. 28. 21:11
WindowsAPI/DirectX

DirectX 게임 프로그래밍(9) - 매핑(Mapping), Map과 Unmap

# 매핑(Mapping)이란?1. 서로 다른 메모리 공간이나 데이터 구조를 연결하거나 연관짓는 과정2. DX에서는 CPU와 GPU 간 메모리 접근을 가능하게 만들어주는 작업을 의미한다.3. CPU와 GPU는 서로 독립적인 메모리 영역을 사용한다.4. CPU의 메모리 : RAM (메인보드 부착)5. GPU의 메모리 : VRAM (그래픽카드 내장)6. 따라서 CPU가 GPU의 메모리에 직접 접근하거나 데이터를 수정할 수 없고 '매핑' 과정을 통해 GPU의 메모리를 CPU에서 사용할 수 있도록 임시 연결을 해야한다.7. CPU가 GPU 메모리에 접근하여 현재 GPU가 작업중인 데이터를 직접  수정하기 위해 VRAM에 임시 연결하는 과정을 '매핑' 이라고 한다.    # 매핑 과정1. DX에서 매핑은 'Map'..

2024. 12. 29. 17:54
WindowsAPI/DirectX

DirectX 게임 프로그래밍(8) - 회전과 사원수(Quaternion)

# 사원수(Quaternion)1. 사원수는 3D 그래픽스에서 물체의 회전을 효율적으로 계산하기 위해 사용된다.2. 한 축을 지정하여 회전시키는 오일러 각과 회전 행렬에서 발생하는 짐벌락 현상(Gimbal Lock)을 방지하고 연산 효율도 높다.- 오일러 각은 세 축의 회전이 겹치는 경우, 특정 방향으로 회전하지 못하거나 심하게 떨리는 짐벌락 현상(Gimbal Lock)이 발생3. 사원수는 3차원이 아닌 4차원 공간에서 회전을 표현하며 x, y, z 세 축이 모두 회전하더라도 짐벌락 현상이 발생하지 않는다.4. 사원수의 핵심은 회전을 나타내는 축과 각도를 하나의 수학적 객체로 결합한 데 있다.- 오일러 각은 한 축의 회전 각도로 표현한다.

2024. 12. 26. 18:22
WindowsAPI/DirectX

DirectX 게임 프로그래밍(7) - RootComponent

# 부모-자식 구조1. 3D 엔진에서는 물체를 트리 구조로 관리하는 경우가 많다.2. Root : 최상위 부모 노드- 월드 좌표를 가지고 있다.- 위치, 회전, 크기의 기준이 된다.3. Child : 부모 아래 연결된 하위 노드- 부모의 크기, 회전, 위치에 영향을 받으며 로컬 변환을 적용한다.  # DefaultSceneComponent1. Transform은 물체의 크기, 회전, 위치를 포함한 정보를 가지고 있다.2. Transform을 가지고 있는 SceneComponent를 상속받은 DefaultSceneComponent를 RootComponent로 삼는다.3. ChildComponent는 자신의 로컬 행렬에 Root의 월드 행렬을 곱하여 최종 월드 좌표를 계산한다.4. 이 때, 부모(Root)의..

2024. 12. 26. 18:10
WindowsAPI/DirectX

DirectX 게임 프로그래밍(6) - 스왑 체인(Swap Chain) 관련 용어 정리

# 픽셀 데이터1. 각 픽셀이 가져야 할 특성 색상 값2. 색상은 여러 채널로 구성된다.- R채널 : 빨간색- G채널 : 초록색- B채널 : 파란색- A채널 : 알파값(투명도)3. 해상도에 따라 픽셀 데이터의 크기는 달라진다.- 1920 x 1080 해상도의 텍스처는 약 2백만 픽셀 # 렌더링 데이터1. GPU가 연산하여 화면에 출력할 픽셀 데이터2. 1920 x 1080 해상도의 경우, 렌더링 데이터는 1920 x 1080 크기(약 2백만 픽셀)의 픽셀 집합 # 텍스처(Texture)1. GPU가 처리할 수 있는 이미지 데이터의 저장소2. 메모리에 저장된 픽셀 데이터3. 텍스처를 통해 그래픽 객체(모델, 화면 등)에 적용하거나 셰이더에서 사용해 다양한 그래픽 효과를 만들 수 있다.4. 텍스처는 차원..

2024. 12. 26. 00:46
WindowsAPI/DirectX

DirectX 게임 프로그래밍(5) - 렌더링 파이프라인

# 렌더링 파이프라인이란?1. 3D 모델을 화면에 그리기 위해 그래픽 하드웨어가 처리하는 일련의 단계2. Shader라는 그래픽 프로그램을 사용한다.- 그래픽카드는 수학적 연산에 최적화되어 있다.- 행렬은 여러가지 데이터를 하나의 데이터 블록으로 묶기에 최적화된 연산 모델이다.- 렌더링 파이프라인은 CPU가 여러 데이터를 행렬로 변환하여 GPU에게 넘겨주면 수학 연산을 통해 모니터에 그려질 최종 픽셀 색상을 결정하는 과정이다. # 렌더링 파이프라인 필수 5단계1. Input Assembler : 정점(Vertex) 데이터, WVP 행렬 준비2. Vertex Shader : 정점 데이터와 WVP 연산을 통해 삼각형(폴리곤) 생성3. Rasterizer : 그릴 픽셀을 결정4. Pixel Shader :..

2024. 12. 23. 00:18
WindowsAPI/DirectX

DirectX 게임 프로그래밍(4) - Device, Context, DESC, Buffer

# Direct X 11 헤더 및 cpp#include // directx 11.4 API // Device, Context, DXGI 기능 포함#include // 셰이더(HLSL) 컴파일 헤더// 라이브러리(.cpp)#pragma comment(lib, "d3d11") // 렌더링 파이프라인 구성#pragma comment(lib, "d3dcompiler") // 셰이더 컴파일을 위한 라이브러리#pragma comment(lib, "dxguid") // Device, SwapChain 등 인터페이스 정의#pragma comment(lib, "DXGI") // SwapChain 모니터 정보 등 제공 # Direct X 인터페이스 구조ID3D11Device..

2024. 12. 21. 15:10
WindowsAPI/DirectX

DirectX 게임 프로그래밍(3) - 셰이더(Shader) 기초

# 셰이더(Shader)1. GPU에서 실행되는 그래픽스 파이프라인의 특정 단계를 처리하는 프로그램2. 주로 이미지의 시각적 효과나 그래픽 데이터를 처리하는데 사용3. GPU 병렬 처리를 활용해 모니터의 수백 ~ 수천만 개의 픽셀에 출력될 색상값을 결정할 연산을 동시에 처리4. 셰이더는 크게 아래와 같은 작업을 수행한다.4-1. 3D 좌표(화면 좌표) 변환4-2. 조명 및 그림자 계산4-3. 텍스처 매핑4-4. 후처리 효과- 블러, 그림자, 반사, 왜곡 등의 시각 효과4-5. 물리 기반 렌더링- 물리 법칙에 기반한 표면 표현 #HLSL(High-Level Shader Language)1. MS가 DirectX API를 위한 셰이더 프로그래밍 언어로 설계한 고수준 언어2. CPU가 아닌 GPU에서 실..

2024. 12. 19. 17:26
WindowsAPI/DirectX

DirectX 게임 프로그래밍(2) - 게임 엔진과 Loop

윈도우 프로세스의 진입점1. UEngineCore::EngineStart 함수로 진입2. 매개변수로 _hInstance는 내 프로그램의 주소 프로그램을 실행하고 종료할 때까지 무한히 게임 루프를 돌려줄 핵심 클래스 1. UEngineDebug::LeakCheck() : 메모리 누수 체크2. WindowInit() : 윈도우 창 설정 및 생성3. LoadContents() : dll 파일 로드4. UEngineWindow::WindowMessageLoop : 윈도우 메시지 루프에 전달할 함수들 입력 루프에 들어갈 함수는 람다 함수로 작성 파일 경로는 다운로드받는 대상에 따라 경로가 달라질 것이기 때문에 절대경로가 아닌 상대경로이다.그렇기 때문에 어디에 다운로드 받더라도 해당 실행파일이 존재하는 경로를 ..

2024. 12. 15. 19:11
WindowsAPI/DirectX

DirectX 게임 프로그래밍(1) - 게임 엔진 설계 원칙

# 게임 엔진 구성Level 0 : BaseLevel 1 : PlatformLevel 2 : GameEngineLevel 3 : ContetnsLevel 4 : Application Base 단계 : 엔진의 구성하는데 필요한 근본적인 시스템을 지원1. 디버그 (EngineDebug)2. 파일 입출력 (EnginePath, EngineDirectory, EngineFile, EngineSerializer)3. 문자열 (EngineString)4. 수학/물리 연산 (EngineMath)5. 객체 이름, 활성화 여부 지정 (Object)6. 리소스 경로 관리 (EngineResources)7. 시간(EngineTimer)8. 시간을 활용한 이벤트 기능 지원 (TimeEvent)9. 유한상태기계(FSM) ..

2024. 12. 13. 17:12
WindowsAPI

WinAPI 게임 프로그래밍(3) - 게임 엔진 실행흐름(~엔진코어 생성)

1. main 진입점에서 프로그램 실행2. UEngineAPICore::EngineStart 함수 실행    - 매개변수로 프로그램의 주소(hInstance)와 컨텐츠 코어 변수 User의 주소 전달 3. User의 주소는 static 전역 변수 UserCore에 저장하여 전역 어디서든지 ContentsCore에 접근 가능하도록 한다. 4. UEngineWindow::EngineWindowInit 함수를 실행하여 윈도우 창 클래스를 정의한다.  5. 내 프로그램의 주소를 static HINSTANCE 변수 hInstance에 저장한다. 6. 변수 wcex에 창 클래스를 정의한다. 7. CreateWindowClass 함수를 호출한다. 8. 윈도우 이름이 중복되지 않는다면 창 클래스를 등록하고 창을 관리할..

2024. 12. 5. 21:29
WindowsAPI

WinAPI 게임 프로그래밍(2) - Delta Time

# 델타 타임(Delta Time)- 각 프레임 사이에 소요된 시간  윈도우에서 게임이란 프로그램은 종료될 때 까지 CPU 동작을 요구하는 프로그램이다. 이를 윈도우 입장에서 바라보면 프로그램은 메시지(사용자의 요청이나 프로그램, 네트워크의 요청 등)가 없으면 메시지 대기 상태로 잠드는 반면, 게임은 메시지와 관계없이 계속 윈도우에게 CPU 작업 요청을 하는 특수한 프로그램이다.이 때 메시지와 관계없이 계속 프로그램을 실행시킬 때, 윈도우가 제공한 메시지 처리 반복문을 한 번 처리하는 데 PC 성능에 따라 초당 몇 천 ~ 몇 만 번의 메시지를 처리한다. 즉, CPU 성능이 높으면 프로그램의 요청사항을 처리하는 속도도 증가한다.게임도 리소스가 존재하지 않고 그저 메시지 반복문만 돌리면 이론상 몇 만 프레임..

2024. 12. 5. 21:28
WindowsAPI

WinAPI 게임 프로그래밍(1) - 게임 엔진 구성 (윈도우, 엔진, Tick, Level, GameMode)

1. WinMain 함수 호출2. UEngine API Core 클래스의 EngineStart 실행    2-1. 인자로 WinMain에서 제공하는 내 프로그램(게임)의 주소와     2-2. 엔진 Core를 컨텐츠 단계에서 관리할 수 있도록 User 객체를 전달 3. EngineStart 함수에서는 크게 3가지 역할을 맡는데, 게임을 돌리는데 필요한 모든 핵심 기능을 담고 있다.    3-1. 컨텐츠 단계에서 만든 UserCore를 게임 엔진에서 저장해서 static으로 전역에 뿌려주고       3-2. 윈도우 창을 생성한다.    3-3. 마지막으로 엔진의 핵심 루프를 EngineDelegaet 클래스에 함수포인터로 넘겨서 저장하고 그걸 Window Message Loop 로 넘겨서 윈도우가 게임 ..

2024. 12. 5. 21:28
  • «
  • 1
  • »

공지사항

전체 카테고리

  • 분류 전체보기
    • Unreal Engine
      • Unreal 기초
      • Unreal Bug & Error
      • Dedicated Server
      • GAS
      • Behavior Tree
      • UI
      • 미니게임
    • 게임 프로그래밍
      • 게임 프로그래밍 기초
      • 게임 수학
      • 게임 프레임워크
      • 게임 서버
    • WindowsAPI
      • DirectX
    • 자료구조와 알고리즘
    • Git
    • 포트폴리오
    • 취업준비
    • 기타
애드센스 광고 영역
  • 최근 글
  • 최근 댓글

최근 글

최근댓글

태그

  • #게임 프로그래밍
  • #C++
  • #1. ㅇ
MORE

전체 방문자

오늘
어제
전체

블로그 인기글

Powered by Privatenote Copyright © 예쁜 꿈을 꾸라고 All rights reserved. TistoryWhaleSkin3.4

티스토리툴바