Metaverse 62

Animation

Static Mesh와 Skeletal Mesh 먼저 Static Mesh는 메시 데이터가 고정되어 있어 변경이 불가능한 데이터이다. Skeletal Mesh는 메시 데이터와 뼈대 데이터로 나뉘어져 있고, 이를 이용해 애니메이션에 적용될 수 있다. 각 뼈대의 Bone을 이동 및 회전시킴으로써 팔다리를 움직일 수 있게 한다. Bone / Rig / Skeleton Bone: 뼈대의 뼈에 해당 Rig: 각 본들이 어떻게 연결되어 있는지를 나타냄 Skeleton: 뼈대 구조 목록과 각 본이 어떻게 연결되어 있는지에 대한 정보 애니메이션을 가져와서 사용하려면 해당 애니메이션은 스켈레톤 정보가 필요함 애니메이션 데이터(Animation Sequence) 자체가 본의 트랜스폼 정보를 키프레임에 저장한 것 Anima..

Metaverse/UE5 2024.01.25

Protobuf

Protocol Buffers Google에서 개발한 데이터 직렬화 형식으로, 구조화된 데이터를 이진 형식으로 효율적이고 컴팩트하게 저장하여 네트워크 연결을 통해 더 빠르게 전송할 수 있음 작성된 프로그램을 다른 플랫폼으로 쉽게 포팅할 수 있고, 다양한 응용프로그램에서 사용할 수 있는 구조화된 데이터를 만드는 효율적이고 강력한 방법 언어 독립적 구문을 사용하면 선택한 서로 다른 프로그래밍 언어를 사용하여 작성된 프로그램이 서로 안정적으로 통신할 수 있음 구조화된 데이터는 바이너리 형식으로 저장되기 때문에 XML이나 JSON과 같은 텍스트 기반 형식보다 훨씬 작아 네트워크를 통한 전송이 더 빠름 확장하기 쉽게 설계되어 빠르게 변화하는 데이터 구조와 새로운 기능을 처리하는 데 이상적 활용 시스템 간의 데이터..

Metaverse/Network 2024.01.22

STL - sort

sort 범위의 요소 정렬 std::invoke(comp, std::invoke(proj, *(it + n)), std::invoke(proj, *it)) 요소는 주어진 comp 비교 함수를 통해 비교가 진행됨 이때, ranges::begin(r) ~ ranges::end(r)로 범위를 표현할 수 있음 Time Complexity O(Nlog(N)) 이때, N = ranges::distance(first, last)이다. struct sort_fn { template requires std::sortable constexpr I operator()(I first, S last, Comp comp = {}, Proj proj = {}) const { if (first == last) return first..

Metaverse/복습 2024.01.18

Crescendor - HandTracking Transform API

이벤트가 발생하면, 사용자의 손의 위치를 반환하여 해당 위치로 오브젝트의 위치를 변경하려고 한다. 그러면 Hand 관련 API에서 Transform 정보를 받아와야했고, 그 정보는 OVRHand의 PointerPose였다. 또한, PointerPose에 사용자의 Hand Data를 대입하기 위해 OVRHand에 Tracked Pose Driver라는 컴포넌트가 필요했다. Tracked Pose Driver는 트래킹 대상 객체의 정보를 전달해주는 컴포넌트이다. OVRPlugin과 OVRCommon에는 각각 HandState와 FromFlippedZVector3f() 가 명시되어 있다. 간단한 테스팅을 위해 다음과 같이 함수를 작성하여 UI 버튼 클릭 이벤트 발생 시 Note의 위치를 바꿔주었다. using..

Metaverse/Unity 2024.01.17

Crescendor - Android Build 관련 삽질

학기 중에 졸업작품 제안서를 쓰면서 테스팅을 진행하는데, 나를 계속 괴롭혔던 오류이다. android build support가 설치되지 않고, sdk / ndk / jdk를 따로 설치하니 계속 오류가 떠서 결국 빌드를 못해보고 다른 팀원에게 넘기게 되었다. 이제 oculus build는 거의 내가 담당할 예정이라 기기도 내가 가지고 있고, apk 빌드를 꼭 해내야만 하는 상황이어서 밤새 붙잡고 있어봤다.... 나는 unity에서 jdk, sdk, ndk의 경로를 직접 설정했다. unity editor에 내장된 모듈은 설치가 안되고 (아마 유니티 허브와 에디터의 버전이 안맞아서인 듯한데, 우리가 맞추기로 한 버전은 더이상 허브에서 설치할 수 없는 버전이었다.) android studio의 sdk mana..

Metaverse/Unity 2024.01.04

C++ - 복사 생성자

: 한 객체가 다른 객체로 복사될 때 호출되는 특별한 멤버 함수 class MyClass { public: // 복사 생성자 MyClass(const MyClass& other) { // 복사 수행 // ... } // 다른 멤버 함수들과 변수들 }; 객체의 복사 생성자는 해당 객체와 동일한 자료형의 다른 객체를 받아들여서, 원본 객체의 내용을 새로 생성된 객체에 복사함 여기서 const MyClass& other는 복사 생성자의 매개변수로 전달되는 객체를 상수 참조로 받음을 나타냄 복사생성자가 호출될 때 복사될 객체를 변경하지 않고 읽기만 한다는 것을 의미 복사 생성자가 호출되는 상황 객체의 복사가 필요한 경우: 객체를 다른 객체로 복사하려고 할 때 함수에 인자로 전달 객체 반환 MyClass obj1..

Metaverse/복습 2024.01.03

C++ - 범위 기반 for문

구문 for (for-range-declaration : 식) statement 설명 기존의 for문과 달리, 시작과 끝점을 알려주지 않아도 알아서 처음부터 끝까지 순회하는 반복문 index 정보 존재하지 않음 기존의 for문에서는 index를 나타내는 로컬 변수가 존재하는데, 범위기반 for문에는 존재하지 않음 오직 elem이라는 값만 존재 array의 요소를 변경할 수 없음 매 반복문을 돌 때마다 int elem : arr을 통해 하는 일은 다음과 같음 elem = arr[0]; elem = arr[1]; 이런식으로 array의 요소들이 elem이라는 변수에 복사됨 배열의 요소를 내부에서 바꾸려고 해도 복사된 값이므로 요소 값이 바뀌지 않음 reference, const reference 위에서 말한..

Metaverse/복습 2024.01.03