posts

GL 기초 개념 및 eCharts 관련 GL 라이브러리 차이

Oct 1, 2025 updated Oct 1, 2025 3djavascriptlegacyvisualization

1. GL (Graphics Library)란?

GLGraphics Library의 약어로, 컴퓨터 그래픽을 그리는 데 필요한 기능들을 제공하는 라이브러리입니다.
특히 OpenGL은 2D 및 3D 그래픽 렌더링을 위해 널리 사용되는 표준 API입니다.

2. WebGL

WebGL은 브라우저에서 직접 사용할 수 있는 2D와 3D 그래픽 렌더링을 위한 JavaScript API입니다.

  • 하드웨어 가속: GPU를 사용하여 복잡한 그래픽 처리를 빠르게 수행.
  • 플러그인 불필요: 최신 브라우저에 기본 내장되어 별도의 설치 없이 사용 가능.
  • 저수준 API: 셰이더 작성, 버퍼 관리, 텍스처 로딩 등의 세부 작업을 직접 처리해야 함.
  • 사용 예: 웹 게임, 3D 데이터 시각화, 인터랙티브 UI 등.

3. claygl

claygl은 WebGL을 기반으로 한 렌더링 엔진으로, WebGL의 복잡한 저수준 작업들을 추상화해 보다 쉽게 사용할 수 있도록 도와줍니다.

  • 특징:
    • 높은 추상화: WebGL의 복잡한 기능들을 간단한 API로 사용할 수 있게 해줌.
    • 수학 연산 지원: 벡터 및 행렬 연산과 같은 3D 변환 기능을 내장.
    • 효율적인 자원 관리: 메모리 최적화와 성능 향상에 도움.
  • 사용 상황:
    • 복잡한 3D 렌더링이 필요할 때.
    • 셰이더 관리, 장면 구성, 애니메이션 처리 등 고급 기능 구현 시.

4. graphicGL

graphicGL은 eCharts 내부에서 WebGL 관련 객체(예: Mesh, Material, Shader 등)를 관리하기 위해 사용하는 래퍼(wrapper)입니다.

  • 특징:
    • 추상화 계층 제공: WebGL 객체들을 객체지향적으로 다루며 복잡한 처리를 추상화.
    • eCharts와 통합: 차트 업데이트, 애니메이션, 이벤트 처리 등 eCharts 전용 기능과 긴밀하게 연동.
    • 코드 가독성 향상: 복잡한 WebGL 처리를 내부적으로 처리하여 사용자 코드를 간단하고 명료하게 유지.
  • 사용 상황:
    • eCharts 내에서 3D 차트를 구현할 때.
    • GL 객체 관리와 사용자 인터랙션이 필요한 경우.

5. 각 라이브러리의 비교

ㄹㅇㄴㅇㄹ (정말, 진짜) 각 라이브러리의 특징과 사용 목적은 다음과 같습니다:

항목 WebGL claygl graphicGL
레벨 낮은 수준 (Low-level) 중간 수준 (Mid-level) 높은 수준 (High-level, eCharts 전용 추상화)
추상화 직접 셰이더, 버퍼, 텍스처 관리 WebGL 기능을 추상화하여 사용하기 쉽게 제공 eCharts와 통합된 객체 관리 (Mesh, Material 등)
사용 용도 맞춤형, 직접 그래픽 처리 시 3D 렌더링 엔진을 쉽게 사용하고 싶을 때 eCharts 3D 차트 구현 시, GL 객체 관리와 인터랙션 지원
장점 - 유연성과 세밀한 제어 가능 - 사용이 간편하고 빠른 프로토타이핑 가능 - eCharts와의 높은 통합성, 간결한 API 제공
단점 - 복잡한 API로 인해 학습 곡선이 높음 - WebGL 만큼의 자유도는 제공하지 않음 - eCharts 내부에서만 주로 사용되어 독립적으로 활용하기 어려움

6. 결론

  • GL 기본 개념: GL은 그래픽 렌더링을 위한 필수 도구로, OpenGL/WebGL 등이 대표적입니다.
  • WebGL: 브라우저 내에서 GPU 가속 그래픽을 구현하며, 낮은 수준의 세밀한 제어가 가능하나 복잡합니다.
  • claygl: WebGL의 복잡성을 감추고 쉽게 3D 렌더링을 구현할 수 있도록 도와주는 라이브러리입니다.
  • graphicGL: eCharts 내부에서 3D 차트 렌더링을 위해 GL 객체와 인터랙션을 관리하는 데 최적화된 래퍼입니다.

이 문서가 eCharts에서 각각의 GL 관련 도구들이 어떤 역할을 하고, 언제 어떤 것을 사용해야 하는지에 대해 ㄹㅇㄴㅇㄹ(정말, 진짜) 도움이 되길 바랍니다.