본문 바로가기

전체 글86

게임 프로그래머 취업 비법서 (인터뷰) https://www.yamyamcoding.com/91c0b5c9-d4da-414a-8b24-35ccf8b8475c  목차1. 면접, 필기시험 준비를 위한 공부내용 정리 41.1 객체지향과 C++ 41.1.1 절차적 프로그래밍과 객체지향의 차이점 41.1.2 객체지향의 장점 41.1.3 객체지향의 특징 41.1.4 클래스 61.1.5 다형성 91.1.6 포인터와 참조자, Malloc과 New 101.1.7 가상함수 171.1.8 C++ 스타일 캐스팅 191.1.9 STL 컨테이너 211.1.10 가비지 컬렉터 241.1.11 타입 간의 계산 결과 251.1.12 생성자와 소멸자 261.1.13 C++의 메모리 영역 301.1.14 C++11/14에 추가된 신기능 301.1.15 const 311.2 컴.. 2023. 7. 15.
Imgui 를 이용한 Tool 프로그래밍 예제 :) https://github.com/eazuooz/YamYamEngine/commit/8b83f796b62cad09fa54740d40e68fc5bc4df694 Deubg release 빌드이벤트 설정 · eazuooz/YamYamEngine@8b83f79 eazuooz committed Jun 15, 2023 github.com IMGUI는 즉시 모드 그래픽 사용자 인터페이스의 약자입니다. 애플리케이션이나 게임에서 사용자 인터페이스를 간단하고 즉각적으로 생성하고 상호 작용할 수 있는 방법을 제공하는 UI 시스템 또는 라이브러리입니다. IMGUI는 일반적으로 Unity를 비롯한 게임 개발 프레임워크와 다른 소프트웨어 애플리케이션에서 사용됩니다. 일반적으로 리텐티드 모드 또는 선언적 접근 방식을 기.. 2023. 6. 29.
Audio system (FMOD) 사용 예제 :) https://github.com/eazuooz/YamYamEngine/commit/90f91c4e2f590829ebb1b39277f13866dad48a52 audio system 완료 · eazuooz/YamYamEngine@90f91c4 eazuooz committed May 31, 2023 github.com 개발 엔진에서 오디오 컴포넌트는 게임 또는 애플리케이션 내에서 오디오 소스를 추가하고 제어할 수 있는 기본 제공 컴포넌트입니다. 이를 통해 사운드, 음악 및 기타 오디오 효과를 재생하여 사용자의 전반적인 오디오 경험을 향상시킬 수 있습니다. 오디오 컴포넌트는 세 가지 주요 요소로 구성됩니다: 오디오 소스: 이 컴포넌트는 게임에서 재생할 오디오 클립 또는 사운드 파일을 나타냅니다. 짧.. 2023. 6. 29.
포스트 프로세싱 효과 예제 :) https://github.com/eazuooz/YamYamEngine/commit/ce603624ac0927cf6365afc252cd3014ad727b59 PostProcess 효과 추가 · eazuooz/YamYamEngine@ce60362 eazuooz committed Apr 10, 2023 github.com 포스트 프로세싱이란? 포스트 프로세싱은 이미지, 동영상 또는 기타 유형의 미디어를 캡처하거나 렌더링한 후 조작하거나 향상시키는 작업을 말합니다. 여기에는 전반적인 품질, 미적 매력을 개선하거나 특정 예술적 효과를 얻기 위해 다양한 기법과 조정을 적용하는 것이 포함됩니다. 디지털 이미지 또는 사진의 경우, 후처리에는 일반적으로 Adobe Photoshop, Lightroom 또는 .. 2023. 6. 29.
게임 개발에 필요한 지식을 공유하는 블로그 2023. 4. 30.
Particle System 예제 :) https://github.com/eazuooz/YamYamEngine/commit/ef9a0e889bd89a4b810d83edeabb85d20277f724 Particle refactoring · eazuooz/YamYamEngine@ef9a0e8 Show file tree Showing 11 changed files with 78 additions and 90 deletions. github.com 파티클이란? 물리학에서 입자는 본질적으로 기본 또는 기본 요소인 작고 국소화된 물체를 의미합니다. 이러한 물체는 물질 입자 또는 힘을 전달하는 입자일 수 있습니다. 물질 입자는 우주의 구성 요소이며 전자, 쿼크, 중성미자 등의 입자를 포함합니다. 힘 운반 입자는 물질 입자 간의 상호작용을 매개하.. 2023. 4. 8.
Compute Shader 예제 :) https://github.com/eazuooz/YamYamEngine/commit/aa0c1d6683a1facaa711123b71be8028285d5d14 Default Compute shader · eazuooz/YamYamEngine@aa0c1d6 Show file tree Showing 19 changed files with 253 additions and 51 deletions. github.com DirectX에서 컴퓨팅 셰이더는 GPU(그래픽 처리 장치)에서 실행되며 범용 컴퓨팅 작업을 수행하는 데 사용되는 프로그래밍 가능한 셰이더의 한 유형입니다. 이미지를 렌더링하고 시각 효과를 적용하는 데 사용되는 기존 그래픽 셰이더와 달리 컴퓨팅 셰이더는 그래픽과 직접 관련이 없는 복잡한 수.. 2023. 4. 8.
2D Light 예제 : ) https://github.com/eazuooz/YamYamEngine/commit/39b0d2695bed01de869db209351bd6a528585b3e StructedBuffer, 2DLight · eazuooz/YamYamEngine@39b0d26 Show file tree Showing 28 changed files with 382 additions and 34 deletions. github.com 게임 조명은 비디오 게임에서 빛과 그림자를 사용하여 게임 세계에 깊이감, 사실감, 분위기를 조성하는 것을 말합니다. 게임 조명은 주변 조명, 직접 조명, 전역 조명 등 다양한 기법을 통해 구현할 수 있습니다. 앰비언트 조명은 게임 월드의 전반적인 조명 수준을 나타냅니다. 밝은 대낮, 황.. 2023. 4. 8.
Animation Event 예제 :) https://github.com/eazuooz/YamYamEngine/commit/9dcd7d665c14f92fad3f35e3beb488681e774f09 Animation Event system · eazuooz/YamYamEngine@9dcd7d6 Show file tree Showing 7 changed files with 65 additions and 18 deletions. github.com Event는 각각의 애니메이션이 처음 재생될떄 StartEvent 하나의 애니메이션 동작이 완료될떄 CompleteEvent 애니메이션이 전환되면서 끝날때 EndEvent함수를 호출되게 되어있다. 그래서 다음과 같이 Event에 알맞는 멤버함수를 bind시켜주어야 제대로 동작하게 된다. Ima.. 2023. 3. 2.
Animator, Animation2D 예제 :) https://github.com/eazuooz/YamYamEngine/commit/4eeca35f9022cf076e299466032e9e4db0679707 Animation 2D · eazuooz/YamYamEngine@4eeca35 Show file tree Showing 19 changed files with 236 additions and 60 deletions. github.com 2D 게임에서 애니메이션을 재생시키는 방법은 영화에서 쓰이는 방식과 크게 다르지 않다. 이러한 애니메이션 기법을 Sprite 애니메이션이라고 한다. 이러한 그림을 한장장한을 움직이는 순서대로 빠른시간동안 재생시켜주면 눈의 착시로 움직이는 것 처럼 보이게 된다. 우선은 Animation이 재생되게 하는 Ani.. 2023. 3. 2.
Collision check / OBB 예제 :) https://github.com/eazuooz/YamYamEngine/commit/ffb802ac42b1cec2e93dcbc0bb66e71211a7131b Collider Manager · eazuooz/YamYamEngine@ffb802a Show file tree Showing 18 changed files with 518 additions and 52 deletions. github.com 콜리전 마스크는 게임 오브젝트의 콜리더가 콜리전 중에 상호작용할 레이어를 정의하는 비트 플래그 세트입니다. 레이어에는 고유한 비트 값이 할당되며, 이 비트 값은 콜리더의 콜리전 마스크에서 켜거나 꺼서 콜리전 동작을 제어할 수 있습니다. static std::bitset mLayerCollisionMa.. 2023. 3. 2.
Grid 오브젝트 예제 : ) https://github.com/eazuooz/YamYamEngine/commit/5cd8da6e2ff068adf0ff32f84f2aeb4113cf34df GridObject · eazuooz/YamYamEngine@5cd8da6 Show file tree Showing 23 changed files with 407 additions and 87 deletions. github.com 그래픽 프로그래밍에서 그리드는 도면이나 디자인에서 객체나 요소를 배치하고 정렬하는 데 참조로 사용되는 가로 및 세로 선의 네트워크를 말합니다. 그리드는 일반적으로 특정 프로젝트의 요구 사항에 따라 다양한 크기와 간격으로 조정할 수 있는 일련의 균일한 간격의 교차 선으로 표시됩니다. 디자이너와 아티스트는 종종 .. 2023. 3. 2.
계층 구조 예제 :) https://github.com/eazuooz/YamYamEngine/commit/89bee1b4401ce4ca8d129cb82cbb1294f0cd26bc Hirearchy Transform · eazuooz/YamYamEngine@89bee1b Show file tree Showing 5 changed files with 45 additions and 35 deletions. github.com 부모-변환 아키텍처는 게임 오브젝트를 계층 구조로 구성하는 방식입니다. 부모라는 개념은 한 오브젝트(자식)가 다른 오브젝트(부모)에 붙어 있고 다른 오브젝트의 움직임을 따르는 오브젝트를 함께 그룹화하는 데 사용됩니다. 한 개체가 다른 개체의 자식으로 설정되면 부모의 위치, 회전 및 배율을 상속받습니.. 2023. 2. 7.
두 개 이상의 카메라 사용 예제 :) https://github.com/eazuooz/YamYamEngine/commit/553cd747d498851b5ed23370015a7a68b333bedc cameras rendering · eazuooz/YamYamEngine@553cd74 Show file tree Showing 16 changed files with 198 additions and 39 deletions. github.com 게임 프로그래밍에서 멀티 카메라 시스템은 게임 세계의 다양한 시점을 화면에 동시에 표시하는 데 사용되는 기술입니다. 이 기술은 일반적으로 게임에서 플레이어가 시점을 더 잘 제어하고 게임의 시각적 매력을 향상시키기 위해 사용됩니다. 멀티 카메라 시스템은 일반적으로 게임 월드 내에서 서로 다른 위치와 .. 2023. 2. 6.
World View Projection 변환 예제 :) https://github.com/eazuooz/YamYamEngine/commit/5746341cee3f322346b6f0f90fb69db6e121ce48#diff-4da099d09d596674ef3104953885d51bd55ca72a394800f0a83f9a457cd5e3de View, Projection Matrix · eazuooz/YamYamEngine@5746341 Show file tree Showing 23 changed files with 385 additions and 117 deletions. github.com 3차원 공간을 설계하는 방법은 크게 두가지로 구분된다. Z값이 모니터 뒤쪽으로 증가하는 왼손 좌표계와 z값이 모니터 앞쪽으로 증가하는 오른손 좌표계이다. 하나의 .. 2023. 1. 11.
스마트 포인터 C++ 프로그램에서 new 키워드를 사용하여 동적으로 할당 받은 메모리는, 반드시 delete 키워드를 사용하여 해제 해야 합니다. C++에서는 메모리 누수 (memory leak)으로부터 프로그램의 안정성을 보장하기 위해 스마트 포인터를 제공하고 있습니다. 스마트 포인터(smart pointer)란 포인터처럼 동작하는 클래스 템플릿으로, 사용이 끝난 메모리를 자동으로 해제해 줍니다. 스마트 포인터의 동작 보통 new 키워드를 사용해 기본 포인터가 실제 메모리를 가리키도록 초기화한 후에, 기본 포인터를 스마트 포인터에 대입하여 사용합니다. 이렇게 정의된 스마트 포인터의 수명이 다하면 소멸자는, delete키워드를 사용하여 할당된 메모리를 자동으로 해제합니다. 따라서 new 키워드가 반환되는 주소값을 스마.. 2023. 1. 3.
벡터의 외적 외적의 결과는 언제나 3차원 벡터가 된다. 이는 연산 결과가 항상 스칼라로 나오는 내적과 대비된다. 외적 계산식의 패턴은 x성분의 결과를 만들기 위해서 x와 관련없는 나머지 두 성분 Y, z 를 결합해 만든다는 것이다. 나머지 y, z를 만들떄도 동일하다. 외적은 교환 법칙이 성립하지 않는다. 뺄셈에서 두 수의 순서를 바꾸어서 계산하는 것처럼 외적도 순서를 바꾸면 반대 방향의 벡터가 나온다. U x V = -V x U 외적은 결합법칙도 성립하지 않는다. 하지만 덧셈에 대한 분배법칙은 성립한다. U x (V + W) = U x V + U x W 내적 외적 계산 결과 스칼라 벡터 교환 법칙 O X 결합 법칙 X X 분배 법칙 O O 연산 방법 같은 요소 사용 다른 요소 사용 이렇게 서로 대립되는 내적과 외적.. 2023. 1. 2.
시야 판별 (앞뒤 판별) 2023. 1. 2.
벡터의 내적 벡터의 내적(dot product)은 같은 차원의 두 벡터가 주어졌을 떄, 벡터를 구성하는 각 성분을 곱한 후 이들을 더해 스칼라를 만들어내는 연산이다. 내적은 곱셈 기호와 동일한 가운데 점(•)을 사용한다. 내적은 스칼라의 곱셈과 덧셈으로 구성되어 있으므로 교환 법칙이 성립된다. 하지만 결과가 벡터가 아닌 스칼라로 나오는 성질로 인해 결합법칙은 성립하지 않는다. 내적은 덤셈에 대한 분배법칙이 성립된다. 같은 벡터를 내적하면 벡터의 크기를 제곱한 결과가 나온다. 이와 같은 내적의 성질은 모든 차원의 벡터에서 동일하게 적용된다. 벡터의 내적은 그림과 같이 두 벡터의 사잇각에 대한 cos함수와 비례하는 특징을 가진다. 위처럼 선을 그어 직각삼각형 2개를 만들면 b의 길이는 밑변 2개의 합이 된다. 제 2 코.. 2023. 1. 2.
삼각함수를 활용한 벡터의 회전 2023. 1. 2.
벡터의 크기와 이동 2023. 1. 2.
벡터 공간의 연산 벡터와 벡터의 덧셈 벡터와 벡터의 뺄셈 스칼라와 벡터의 곱셈 2023. 1. 2.
스칼라와 벡터 평면의 좌표 (x, y)는 두 실수 x와 y를 결합해 만들어 진다. 그렇기 떄문에 좌표의 연산은 실수가지니는 연산의 성질을바탕으로 설계돼야 한다. 선형대수학에서 벡터 공간 또는 선형 공간은 원소를 서로 더하거나 주어진 배수로 늘이거나 줄일 수 있는 공간이다. 체(대수학)에 대한, 가군의 특수한 경우다. 벡터 공간의 원소를 벡터라고 하며, 이는 직관적으로 방향 및 길이의 비가 정의된 대상을 나타낸다. 스칼라 크기만 있고 방향이 없는 물리량, 즉 방향성을 가지지 않는 성분이다. 시간, 부피, 질량, 온도, 속력, 에너지, 전위 등 벡터 크기와 방향이있는 물리량, 즉 크기에 방향성을 함께 고려하여야 설명이 가능한 물리량이다. 변위, 속도, 가속도, 힘, 운동량, 충격량, 중력장, 전기장, 자기장 등 2023. 1. 2.
데카르트 좌표 데카르트 좌표계는 그림과 같이 수평으로 배치한 첫 번째 실수 집합의 미지수를 x, 수직으로 배치한 두번째 실수 집합의 미지수를 y로 표기하고 원점을 기준으로 x축의 오른편, y축의 위편은 양의 영역을 나타낸다. 이렇게 배치된 두 실수 집합으로 평면을 가르면 평면의 영역은 총 4개의 분면으로 나뉘는데, 오른쪽 상단에서부터 반시계 방향으로 그림과 같이 이름을 붙힌다. 데카르트 좌표계는 한 원소의 곱집합과 동일하게 순서쌍으로 표현하며 좌표(coordinate)라고 부른다. 일반적으로 좌표는 수와 동일하게 그림과 같이 점 또는 원점으로부터의 화살표로 표현한 다. 좌표 역시 크기와 방향 두 가지 속성을 지니게 된다. 좌표를 다루는 작업은 직선에서 평면으로 무대만 넓어졌을 뿐, 수직선에서 수를 다루는 방식과매우 유.. 2023. 1. 2.
Material 메테리얼 예제 :) https://github.com/eazuooz/YamYamEngine/commit/40905bb6f2164b1e308096cbd84eadbe9b5921c7 Material · eazuooz/YamYamEngine@40905bb Show file tree Showing 16 changed files with 177 additions and 29 deletions. github.com Materials 게임 오브젝트의 픽셀의 최종 컬러는 메테리얼을 통해서 결정된다. 메테리얼은 셰이더와 텍스처가 합쳐진 에셋으로, 오브젝트의 픽셀 컬러를 결정한다. MeshRenderer 컴포넌트 안에 메테리얼을 세팅해줄수 있다. 메시를 구성하는 폴리곤에 색을 칠할 수 있는 성분 재질에서 셰이더를 선택할 수 있음 텍.. 2023. 1. 2.
Sampler 샘플러 예제 :) https://github.com/eazuooz/YamYamEngine/commit/c23ad1cb690b8f8daef757da40f60c4b941835e4 Sampler · eazuooz/YamYamEngine@c23ad1c Show file tree Showing 8 changed files with 91 additions and 30 deletions. github.com 샘플러를 사용한다라는 것은 셰이더 스테이지에 세팅되어 있는 샘플러 스테이지를 경유해서 텍스처(셰이더 리소스 뷰)에 엑세스 함으로써 필터링 처리나 샘플링 처리를 수행한 값을 얻을 수 있다. 셰이더 코드에서 샘플러를 사용하려면 SamplerState 타입등을 사용한다. SamplerState g_sam_0 : registe.. 2023. 1. 2.
Texture 생성 예제:) https://github.com/eazuooz/YamYamEngine/commit/ed27ddb9e49182c3dcf4b307336018a5376704f5 Texture · eazuooz/YamYamEngine@ed27ddb Show file tree Showing 38 changed files with 1,505 additions and 322 deletions. github.com 텍스처는 다른 자원과 마찬가지로 렌더링 파이프라인에서 [뷰]를 통해 엑세스 된다. [뷰]는 [텍스처 리소스]가 렌더링 파이프라인으로부터 어떠한 데이터로 보이게 할것인가를 정의한다. 텍스처를 다루는 기본적인 순서는 텍스처 리소스 생성 -> 텍스처 이미지 로드 -> 텍스처에 엑세스 하는 뷰 생성 우리는 이미지로드를 .. 2022. 12. 26.
Scene, GameObject, Component Scene 우리게임의 구조는 이런 방식으로 진행될 것이다. 씬 안에는 오브젝트가 포함되어 있습니다. 씬을 사용하여 메인 메뉴, 각각의 레벨 및 기타 여러가지를 만들 수 있습니다. 하나의 씬 파일은 한 레벨로 생각해야 합니다. 각 씬에서는 환경과 장애물, 장식을 배치하고 게임을 세세하게 디자인하고 만듭니다. class Scene : public Entity { public: Scene(); virtual ~Scene(); virtual void Initialize(); virtual void Update(); virtual void FixedUpdate(); virtual void Render(); Layer* GetLayer(UINT index) { return& mLayers[index]; } void.. 2022. 12. 21.
Mesh, MeshRenderer 예제:) https://github.com/eazuooz/YamYamEngine/commit/e2240b03720c7d8bf7be2f359de99928bb69ffb9 GameObject, Component, Scene, MeshRenderer · eazuooz/YamYamEngine@e2240b0 Show file tree Showing 21 changed files with 444 additions and 54 deletions. github.com 폴리곤 메쉬(polygon mesh) 이러한 객체는 여러 기법으로 구성될 수 있지만, 게임과 같은 실시간으로 처리되는 물체들은 거의 대부분 폴리곤(polygon) 모델링 기법을 사용한다.(GPU가 폴리곤 메쉬 처리에 최적화되어 있기 때문) 폴리곤의 원래 뜻.. 2022. 12. 21.
Constant Buffer(상수 버퍼), Index Buffer(인덱스 버퍼) 예제 :) https://github.com/eazuooz/YamYamEngine/commit/83ba804aa603c90876755b4782ed2eac0a126450 constatne buffer , index buffer · eazuooz/YamYamEngine@83ba804 Show file tree Showing 10 changed files with 165 additions and 30 deletions. github.com 셰이더에서 실행하는 코드는 HLSL 코드를 사용한다. HLSL로 코드를 작성하고 컴파일 하면 바이트코드가 만들어진다. 해당 바이트 코드를 관리하는 인터페이스가 ID3DBlob인터페이스 이며 이를 토해 셰이더 오브젝트를 생성한다. 상수버와 시맨틱스 struct VTX_IN {.. 2022. 12. 8.