본문 바로가기

분류 전체보기142

오일러 회전과 짐벌락 현상 아주 오래전에 오일러 회전을 공부하면서, 짐벌락 현상이 일어나는 사실만 인지했었습니다. 당시에는 짐벌락이 정확히 무엇인지 책을 아무리 봐도 이해가 안되었기 때문에 그냥 대충 넘어갔고, 그렇게 그렇게 세월이 흘렀습니다. 그런데 최근에 관련 영상을 찾아보고 단번에 이해를 하게 되었습니다. 오일러 회전과 짐벌 락3D 공간에서 회전을 표현하는 가장 직관적인 방법은 X, Y, Z 축을 기준으로 각도를 나누어 회전시키는 방식입니다.이를 오일러 회전(Euler Rotation)이라고 합니다.예를 들면 X축 회전, Y축 회전, Z축 회전처럼 사람이 이해하기 쉬운 형태로 회전을 다룹니다.문제는 이 회전이 순차적이라는 점입니다. 그리고 한 축을 회전시키면, 그 다음 축은 이미 회전된 좌표계를 기준으로 다시 회전하게 됩니다.. 2025. 12. 14.
특이한 언리얼 좌표계와 회전 방향 언리얼 엔진의 좌표계와 회전은 다른 3D 엔진이나 수학에서 배우는 개념과 조금 다릅니다.엔진 초기 설계 단계에서부터 이렇게 기준이 정해졌기 때문에 지금 와서 이를 수정하는 것은 사실상 불가능하고, 사용하는 입장에서는 이 구조에 익숙해지는 수밖에 없습니다. • Z 축이 위방향 • 회전의 경우 * X, Y 축은 오른손으로 축을 감쌌을 때, 말아쥔 손가락 방향이 + 회전 * Z 축은 왼손으로 축을 감쌌을 때, 말아쥔 손가락 방향이 + 회전 이 부분은 아무래도 말로 설명하는 것보다 그림으로 보는 편이 훨씬 이해가 빠릅니다. 출처 :https://www.mathworks.com/help/robotics/ug/coordinate-systems-for-unreal-engine-simulation-in-rob.. 2025. 12. 13.
C++ 소개 C++ 는 오래된 언어지만, 지금도 여전히 다양한 분야에서 사용되고 있는 프로그래밍 언어입니다.이 글에서는 C 언어에서 출발해 C++이 어떻게 탄생했고, 어떤 과정을 거쳐 현재 버전까지 발전해 왔는지 대략적으로나마 정리해 보았습니다. 1. C 언어C 언어는 빠른 언어입니다.반면, 개발자가 직접 관리해야 할 것들이 많고, 프로그램의 규모가 커질수록 C 만으로는 감당하기 어려운 한계가 있습니다. 2. C++ 탄생이런 배경에서 C++은 1980년대 초, C 언어를 기반으로 성능은 그대로 유지하면서 객체 개념을 도입하고 클래스와 상속 개념을 추가한 언어로 등장했습니다. 대형 소프트웨어 개발을 염두에 두고 설계된 언어입니다. 3. C++98 표준1998년에는 C++의 첫 공식 표준인 C++98이 발표되었습니다.그.. 2025. 12. 11.
왜 언리얼 엔진은 C++ 표준 라이브러리를 그대로 사용하지 않을까 언리얼 엔진을 처음 접하면, 기존 C++에서 익숙하게 사용하던 코드들이 다른 이름과 규칙으로 다시 등장한다는 점에서 혼란을 느끼기 쉽습니다. 특히 C++ 경험이 있는 개발자일수록 “이미 알고 있는 개념인데 왜 언리얼에서는 다른 방식을 요구하는가”라는 의문을 갖게 됩니다. 대표적인 예로는 문자열 타입과 STL 컨테이너, 그리고 스마트 포인터를 들 수 있습니다.C++에서는 std::string, std::vector, std::unique_ptr, std::shared_ptr 와 같은 표준 라이브러리 타입을 사용하지만, 언리얼에서는 이에 대응하는 엔진 전용 타입들이 존재합니다. 대표적으로 다음과 같은 엔진 전용 타입들이 사용됩니다. • FString, FName, FText • TArray, TMap,.. 2025. 12. 10.
C#에서 float 형 random 이 없는 이유와 그래도 필요하다면? C#으로 게임이나 시뮬레이션 코드를 작성하다 보면, 종종 이런 고민을 하게 됩니다.“int 랜덤은 있는데, 왜 float 랜덤은 없지?”Random.Next()처럼 간단하게 쓸 수 있는 NextFloat() 같은 함수가 있으면 좋을 것 같은데, C# 기본 Random 클래스에는 그런 함수가 존재하지 않습니다.이 글에서는 그 이유와, 실제로는 float 랜덤을 어떻게 만들어 써야 하는지 정리해 보겠습니다. 1. float 랜덤이 없는 이유C#의 Random 클래스는 .NET 초창기부터 설계된 타입입니다. 이때 “실수 난수”를 표현하는 기본 타입으로 double이 선택되었습니다. 그래서 지금도 실수 난수는 무조건 NextDouble() 하나만 제공합니다.정수 계열 • int Next() • int Next(.. 2025. 11. 16.
C# 에서 static GameData 클래스 설계 예시 이번 글에서는 StageData 구조체와 GameData 정적 클래스를 이용해 게임의 스테이지 설정 데이터를 관리하는 코드를 어떻게 구성했는지 설명합니다. 아래 예시 코드를 기준으로 세부 개념을 정리합니다.public struct StageData{ public int ballSpeed; public int blockRow; public int blockColumn; public int blockWidth;}internal static class GameData{ public static StageData[] stageData; public static int StageIndex { get; set; } public static StageData CurrentStag.. 2025. 11. 15.