꾸준히 개발하자

고정 헤더 영역

글 제목

메뉴 레이어

꾸준히 개발하자

메뉴 리스트

  • 홈
  • 태그
  • 방명록
  • 분류 전체보기 (115)
    • Computer Graphics (58)
      • SCOP (9)
      • HumanGL (9)
      • Graphics Pipeline (10)
      • ALEngine (21)
      • Hiking (9)
    • 자료구조와 알고리즘 (43)
      • 백준 (14)
      • 자료구조, 알고리즘 (29)
    • Java 공부 (5)
      • Java 공부 (1)
      • Java 주차별 공부 (3)
      • 더 자바, 코드를 테스트하는 다양한 방법 (1)
    • 리눅스 (8)
      • 리눅스 기초 (8)

검색 레이어

꾸준히 개발하자

검색 영역

컨텐츠 검색

Computer Graphics/ALEngine

  • FT_Newton: 메모리 풀 구현 - (12)

    2025.02.07 by Banjosh

  • FT_Newton: 최적화를 통해 FPS 방어하기 - (11)

    2025.02.04 by Banjosh

  • FT_Newton: Cylinder 와 Capsule 충돌 - (10)

    2025.01.16 by Banjosh

  • FT_Newton: Sphere 와 Box 충돌 - (9)

    2025.01.16 by Banjosh

  • FT_Newton: Physics Loop의 마지막 단계 Solve - (8)

    2025.01.16 by Banjosh

  • FT_Newton: Narrow Phase / Clipping - (7)

    2025.01.15 by Banjosh

  • FT_Newton: Narrow Phase / EPA - (6)

    2025.01.15 by Banjosh

  • FT_Newton: Narrow Phase / SAT vs GJK - (5)

    2025.01.15 by Banjosh

FT_Newton: 메모리 풀 구현 - (12)

이번 글에서는 메모리 풀 구현에 대해 알아보자.  우선, 왜 메모리 풀을 써야 할까에 대한 의문이 먼저 생길 수 있다.  C에서는 malloc, C++에서는 new 연산자를 통해 메모리를 할당받아 사용한다. 물론 명시적으로 malloc이나 new를 호출해 메모리를 할당할 수도 있지만, vector와 같은 동적 자료구조를 사용할 경우 내부적으로 메모리 할당이 수시로 일어나게 된다. 즉, new와 malloc을 통해 쉽게 메모리를 할당받을 수 있다는 장점이 있지만, 자주 사용하게 되면 다음과 같은 단점들이 발생한다.시스템 콜 오버헤드malloc과 new는 메모리를 할당하기 위해 내부적으로 시스템 콜을 사용하는데,시스템 콜은 사용자 모드에서 커널 모드로 전환되는 비용이 크므로 자주 호출하면 성능이 저하된다.복..

Computer Graphics/ALEngine 2025. 2. 7. 22:01

FT_Newton: 최적화를 통해 FPS 방어하기 - (11)

저번 글까지 기본적인 기능은 완성되었지만, 매우 느린 물리 엔진이라는 사실을 확인할 수 있었다.이번 글에서는 그 느렸던 물리 엔진의 FPS 방어 과정을 적어보려 한다.  물리 엔진의 기본 기능이 확보된 후, 게임 엔진 개발 팀원들에게 받은 미션은 100 x 100의 박스를 생성하고 FPS 60 방어선을 지키는 것이었다. 2 x 2 크기의 박스 충돌에서도 느렸던 내 물리 엔진을 어떻게 최적화할지 고민한 끝에 다음 과정을 거치기로 했다. 1. 현재 상태 파악2. Visual Studio Profiler를 이용한 분석 및 문제 가정 3. 문제 가정에 따른 해결 방법 모색 4. 해결 방법 적용 후 다시 테스트   1. 현재 상태 파악   최적화를 진행하기 위해 일단 고정된 테스트 박스의 개수를 정한 뒤 현재 ..

Computer Graphics/ALEngine 2025. 2. 4. 01:10

FT_Newton: Cylinder 와 Capsule 충돌 - (10)

이번에는 기존 충돌 로직에 Cylinder Shape과 Capsule Shape을 추가해보았다. GJK/EPA 알고리즘을 사용했기 때문에 Shape 추가는 크게 어렵지 않았고, collider와 support 함수, clipping 함수만 추가로 더 만들어 주기만 하면 된다. Cylinder 충돌  Capsule 충돌  이렇게 기본 Shape 들에 대한 구현이 끝났고 다음은 여러 Shape의 충돌을 구현한 영상이다. 아직 최적화를 하지 않아서 오브젝트가 많아지면 금방 느려지지만, 충돌 구현은 잘 되어있는 것을 볼 수 있다.

Computer Graphics/ALEngine 2025. 1. 16. 13:33

FT_Newton: Sphere 와 Box 충돌 - (9)

지금까지 구현한 로직을 바탕으로 Sphere Shape, Box Shape에 대한 충돌을 구현하였다 Sphere 충돌  Box 충돌 이렇게 Sphere Shape과 Box Shape에 대한 충돌 구현을 해봤고 다음 글에서는 Cylinder Shape과 Capsule Shape에 대한 충돌을 살펴볼 예정이다.

Computer Graphics/ALEngine 2025. 1. 16. 13:18

FT_Newton: Physics Loop의 마지막 단계 Solve - (8)

Physics Loop의 마지막 단계인 Solve에 대해 알아보자이전 단계인 Narrow Phase를 통해 우리는 충돌마다 Manifold들을 생성할 수 있었다.struct Manifold{ float seperation; // 충돌 깊이 glm::vec3 normal; // 충돌 방향 glm::vec3 pointA; // 오브젝트 A의 충돌 지점 glm::vec3 pointB; // 오브젝트 B의 충돌 지점}; Solve 단계에서는 위 정보를 토대로 VelocityConstraints와 PositionConstraints를 처리한다.VelocityConstraints와 PositionConstraints란?1. VelocityConstraints..

Computer Graphics/ALEngine 2025. 1. 16. 11:41

FT_Newton: Narrow Phase / Clipping - (7)

이번에는 Narrow Phase의 마지막 단계인 Clipping에 대해 알아보자.Clipping이란? Clipping은 EPA에서 찾은 충돌 방향과 충돌 깊이를 바탕으로 충돌점(Contact Point)을 생성하는 방법이다.초기에는 Clipping 없이 충돌당 1개의 충돌점만 계산했지만, Sphere 충돌과 달리 Box 충돌에서는 여러 개의 충돌점이 필요했다. 이를 해결하기 위해 Clipping 방식을 도입하여 다수의 충돌점을 구하는 방법으로 변경했다.Clipping 과정오브젝트 A와 B의 충돌면 선택오브젝트 A, B와 충돌 방향 dir이 주어진 상태.오브젝트 A에서 dir 방향으로 가장 멀리 떨어진 면 a를 충돌면으로 설정.오브젝트 B에서 −dir 방향으로 가장 멀리 떨어진 면 b를 충돌면으로 설정.충..

Computer Graphics/ALEngine 2025. 1. 15. 21:28

FT_Newton: Narrow Phase / EPA - (6)

이번에는 지난 글에서 다룬 GJK 이후, 충돌 방향과 충돌 깊이를 찾아주는 EPA 알고리즘에 대해 알아보자.EPA란?EPA(Expanding Polytope Algorithm)는 두 도형 A, B의 Minkowski Difference를 활용해 충돌 해소의 최소 깊이와 충돌 방향을 찾아주는 알고리즘이다.이 알고리즘은 GJK에서 생성된 4개의 simplex로 이루어진 사면체에서 시작한다.GJK에서 충돌이 감지된 경우에만 EPA 단계를 진행하기 때문에, 사면체 내부에 원점이 포함된 상태가 확정적이다.이후, 아래의 과정을 반복하며 충돌 깊이와 충돌 방향 벡터를 계산한다.EPA 알고리즘 과정원점에서 다면체의 평면까지의 거리 계산현재 simplex로 이루어진 다면체의 모든 평면에 대해, 원점에서 각 평면까지의 거..

Computer Graphics/ALEngine 2025. 1. 15. 18:51

FT_Newton: Narrow Phase / SAT vs GJK - (5)

Broad Phase와 Narrow Phase를 살펴보기 전에, Broad Phase에 대해 간단히 상기해보자.Broad Phase모든 물체의 충돌 범위를 AABB(축 방향 정렬된 박스)로 설정한다.Integrate 단계 이후, AABB 범위가 겹치는 물체들을 충돌 쌍으로 만들어 Narrow Phase에 전달한다.Narrow PhaseBroad Phase에서 만들어진 충돌 쌍은 AABB의 넓은 범위를 기준으로 설정되었기 때문에, Narrow Phase에서는 더 정밀한 충돌 감지를 진행한다.이 과정에서 실제 충돌이 확정되면 접촉점, 침투 깊이, 충돌 방향에 대한 정보를 계산하여 Solve 단계로 넘겨준다.Narrow Phase를 진행하기 위해서는 먼저 실제 충돌인지 여부를 감지하는 알고리즘이 필요하다.대표..

Computer Graphics/ALEngine 2025. 1. 15. 17:13

추가 정보

인기글

최신글

페이징

이전
1 2 3
다음
TISTORY
꾸준히 개발하자 © Magazine Lab
페이스북 트위터 인스타그램 유투브 메일

티스토리툴바