[2023 03 03] 목소리 더빙, 보이스 도와주는 프로그램 개발 연습 일지 (16-3) - 오브젝트 출력자 구현 - Whitmem
[2023 03 03] 목소리 더빙, 보이스 도와주는 프로그램 개발 연습 일지 (16-3) - 오브젝트 출력자 구현
Develop History
2023-03-04 02:28 게시 fd3c231080b4f400cd5b

0
0
110
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
구현 내용
파형을 그리고, 오브젝트를 그리는 작업을 진행하였다.
UI 클래스 구조
특이점
화면의 전체 사이즈를 기준으로하는 렌더링은 Default의 약자인 "D" 접두사를 붙여 클래스 이름을 구성하였다.
로컬 좌표를 기준으로 하는 렌더링은 Local의 약자인 "L" 접두사를 붙여 클래스 이름을 구성하였다.
WaveLineRenderer
WaveLineRenderer은 Wave 파형을 그려주는 도구이다. 44100 개 이상의 파형 데이터를 화면상에 그려주기 위해서는 그래픽 메모리에 Vertex를 고정 해 줘야 한다. GL Vertex를 통해서 화면 상에 직접 그릴 수 있긴 하지만, CPU를 사용하여 44100개를 반복하며 초당 60개를 그리기에는 병목 현상이 발생할 수 있으므로, GPU 메모리에 COPY하여 그리기를 한 번에 요청하는 것이 좋다고 생각했다. 초기 init 될 때, double[] waves 를 2D 좌표로 투영한 뒤 이를 BindBuffer BufferData 로 적용 해 준다.
Render 부분에서는, 적용된 Vertex 버퍼들을 x, y에 translate 후 출력 해 준다. 여기서 유의 할 점은, 그래픽 버퍼 공간에 Array를 넣을 때의 좌표는 로컬 좌표계 기준이다. translate 할 때 전반적으로 그려지는 위치는 이동된다.
로컬 좌표 렌더러
로컬 좌표 렌더러는 특정 오브젝트나 데이터를 출력할 때 그 오브젝트 시점을 기준으로 내부에 출력을 할 때 사용하는 것을 의도했다. 모든 컴포넌트 렌더러를 직접 화면에 2D 좌표를 계산하며 출력할 수는 없으므로, 오브젝트가 출력되는 상대 좌표 내에서 다시 출력할 수 있도록 하였다.
예를 들어, TrackRenderer은 트랙 배경 출력 외에는 할 작업이 많이 없으므로, 전체 화면 좌표계 기준으로 출력할 수 있도록 DRendererInterface 을 사용하였다. 다만 ObjectRenderer 출력의 경우, Object 배경을 출력하는 렌더러, 그 내부의 파형 등을 출력하는 추가 컴포넌트 렌더러 WaveLineRenderer 같은 경우 로컬 좌표계를 기준으로 출력하는데, 오브젝트 배경을 출력하는SingleObjectTextureRenderer 의 경우, Track 좌표계를 기준으로 출력하도록 하였다. 트랙이 존재하는 어느 위치의 어느 재생 지점에 Object가 존재하므로, Track을 기반으로 하고, 그 외 Object 내에 존재하는 Wave 등은 Object 좌표를 기준으로 한다. WaveLineRenderer 등은 Object 내에 출력되는 것이므로, Object의 좌표 정보가 있어야 내부 로컬 좌표로 출력할 수 있는데, WaveLineRenderer 을 생성할 때 ObjectCoordinationDelegator 을 통해서 Object의 위치 정보를 대리 해 주도록 하였다.
즉 정리하자면,
DSingleTrackTextureRenderer
전체 화면 영역을 기반으로 출력
LSingleObjectTextureRenderer
트랙을 기반으로 로컬 좌표계
TrackTextureRenderer의 Coordination 대리자에 의거
LWaveLineRenderer Component
오브젝트를 기반으로 로컬 좌표계
LSingleObjectTextureRenderer의 좌표를 대리 해주는 Coordination 대리자에 의거
다음 목표
PD Layer의 음향 처리 클래스와 연동한다.
댓글 0개
댓글은 일회용 패스워드가 발급되며 사이트 이용 약관에 동의로 간주됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.